编写自己的存储系统:从哪里开始?

时间:2009-07-02 22:35:30

标签: c# database database-design

阅读有关NoSQL(http://nosql.eventbrite.com/)的文章,该活动旨在鼓励传统关系数据库的使用,转而采用适合应用的自定义存储系统。

对于尝试编写一个小型个人存储系统(用于.net框架)作为学习宠物项目的想法感兴趣,您有什么建议或有用的链接?从哪儿开始?如何平衡硬盘驱动器上的内容和内存中的内容?

我认为这可能是一个学习数据库内部工作内容的有趣机会,但我真的缺乏最基本的理论。 感谢。

6 个答案:

答案 0 :(得分:3)

NoSQL运动的目标是大规模系统,其大小是关系模型真正打破的。在开始编写自己的存储之前,我强烈建议您理解关系模型,这是CS中最好的文档和易于理解的域之一。从Gray's and Reuter's Transaction Processing开始,本书解释了有关实现经典RDBMS的所有。您列表中的下一个应该是Readings in Database Systems,这是最相关的科学论文和文章的集合。

答案 1 :(得分:2)

SO问题"Implementing a database — How to get started"对您的问题有一些有用的答案!

答案 2 :(得分:2)

在您开始之前,我建议您研究SQL Server将XML文件存储为关系数据库中的BLOB对象的能力。也许您的存储系统不需要“从头开始”。它可以是SQLs XML存储功能的混合体。

答案 3 :(得分:2)

这一切都取决于您正在构建的应用程序。

例如,如果你的应用只需要坚持几百件物品并以一些方式切断它们,并且不关心物品是否会偶尔腐烂。您可能只需使用LINQ查询List并暂时将List保留到磁盘。

如果您需要具有神奇ACID属性的任何东西,那么它将需要大量的工作。

如果你需要一些支持交易的东西,它将需要大量的工作。

如果你需要了解ANSI-SQL的东西,你将不得不编写一个解析器,这是很多工作。

在着手编写任何类型的数据库之前,我认为你应该理解很多数据库理论,get a book,阅读它。

答案 4 :(得分:2)

看看Prevayler家伙所做的工作。他们观察到如果你可以在ram中拟合数据,那么大多数使用场景都会显示出更好的性能,并且在没有RDBMS的情况下编写更少的代码。另一方面,谷歌,亚马逊的家伙表示,对于大量数据,你不想使用RDBMS。当我们转向使用大量内存的64位操作系统和PC时,RDBMS位于摇滚和硬盘之间。

答案 5 :(得分:1)

虽然这是一个迟到的回应。即使您事先了解dbo及其引擎的工作原理,在执行此操作之前还需要考虑一些基本方案。 1.是否需要大量储存? 如果是这样,那么您需要对页面进行微调并处理文件格式,这需要花费很多时间来加载和检索。

  1. 是否需要处理多个连接? 页面也很重要,但您可能还需要为服务或基于应用程序的实例创建引擎,以便在幕后工作。

  2. 是应用程序使用还是网络使用? 如果是网络,那么真的使用MySql或MSSQL。

  3. 不要选择内联内存作为数据库存储,因为这会使数据库的目的无效。创建数据库,以便您可以释放内存并在将内存返回系统一段时间后释放表对象。如果是为了轻量使用,请创建一个简单的XML /自定义文件数据库系统,因为您不是一次保存或更改大量数据。更好的是,使用非常适合此目的的SQLite。如果是开源或商业用途,请不要使用内联内存,因为你不要强迫某人满足高内存要求,内存成本高昂,而且有些人仍在运行32位操作系统。