撰写自己的存储系统:从何开始?

5

阅读关于NoSQL(http://nosql.eventbrite.com/)的文章,这是一项旨在鼓励放弃传统关系型数据库,转而使用定制的、适用于应用程序的存储系统的运动。

被尝试编写一个小型个人存储系统(针对.NET框架)作为学习项目的想法所吸引,您有什么建议或有用的链接?从哪里开始?如何平衡硬盘上的内容和内存中的内容?

我认为这可能是一个有趣的机会,可以了解数据库内部工作的细节,但我确实缺乏最基本的理论知识。谢谢。

6个回答

3
NoSQL运动旨在面向巨大规模系统,这些规模超过了关系模型的极限。在你开始编写自己的存储之前,我强烈建议你先了解关系模型,因为它是计算机科学中文档最全、最易理解的领域之一。可以从Gray's and Reuter's Transaction Processing入手,该书讲解了实现经典RDBMS的所有知识。接下来要看的是Readings in Database Systems,这是最相关的科学论文和文章的集合。

2

1
我只是想告诉你链接失效了。 - Rickard B.

2
在开始之前,我建议您了解SQL Server将XML文件作为BLOB对象存储在关系数据库中的能力。也许您的存储系统不需要从头开始构建,而是可以在SQL的XML存储能力之上创建混合型存储系统。

2
这段话的意思是:

这完全取决于您正在构建的应用程序。

例如,如果您的应用程序只需要持久化几百个对象并以几种方式进行处理,并且不在乎偶尔出现数据损坏的情况。您可能可以使用LINQ查询列表并定期将列表持久化到磁盘上。

如果您需要具有魔法ACID属性的任何内容,则需要大量工作。

如果您需要支持事务的内容,则需要大量工作。

如果您需要理解ANSI-SQL,则必须编写解析器,这需要大量工作。

在开始编写任何类型的数据库之前,我认为您应该了解大量的数据库理论,获取一本书籍,并阅读它。


2

看一下Prevayler团队完成的工作。他们指出,如果你可以将数据放入内存中,大多数使用场景会显示出更好的性能,并且不需要使用RDBMS编写大量代码。另一方面,Google、Amazon等公司表明,对于大量数据,你不想使用RDBMS。随着我们转向64位操作系统和具有大量内存的个人电脑,RDBMS处于进退两难的境地。


1

虽然这是一个晚回复,但在进行此操作之前,您需要考虑几种基本情况,即使您已经了解dbo及其引擎的工作方式。 1. 是否需要大量存储? 如果是这样,那么您需要微调页面并使用文件格式来加载和检索,以避免过多的时间消耗。

  1. 它是否需要处理许多连接? 页面很重要,但您可能还需要为服务或应用程序创建一个引擎,以便在幕后运行。

  2. 它是用于应用程序使用还是Web使用? 如果是用于Web,则真正使用MySql或MSSQL。

不要选择内联内存作为您的数据库存储,因为这会使数据库的目的无效。数据库是为了让您在一段时间后释放表对象并将该内存返还给系统。如果只是轻量级使用,请创建一个简单的XML/自定义文件数据库系统,因为您不会一次保存或更改大量数据。更好的选择是使用非常适合此目的的SQLite。如果是用于开源或商业用途,请不要选择内联内存,因为您不想强制某人满足高内存需求,内存需要花费金钱,有些人仍在运行32位操作系统。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接