【问题标题】:Writing your own storage-system: where to start?编写自己的存储系统:从哪里开始?
【发布时间】:2010-11-07 19:11:07
【问题描述】:
阅读有关 NoSQL (http://nosql.eventbrite.com/) 的信息,该运动旨在鼓励放弃传统的关系数据库,转而支持定制的、适合应用程序的存储系统。
对尝试编写一个小型个人存储系统(用于 .net 框架)作为学习宠物项目的想法很感兴趣,您有什么建议或有用的链接?从哪儿开始?如何平衡硬盘上的内容和内存中的内容?
我认为这可能是一个了解数据库内部工作的有趣机会,但我真的缺乏它最基本的理论。
谢谢。
【问题讨论】:
标签:
c#
database
database-design
【解决方案2】:
在开始之前,我建议您研究一下 SQL Server 将 XML 文件作为 BLOB 对象存储在关系数据库中的能力。也许您的存储系统不需要“从头开始”。它可以是 SQL XML 存储功能之上的混合体。
【解决方案3】:
这一切都取决于您正在构建的应用程序。
例如,如果您的应用只需要保留几百个对象并以几种方式切穿它们,而不关心内容是否偶尔会损坏。您可能只使用 LINQ 来查询列表并偶尔将列表保存到磁盘。
如果您需要任何具有神奇 ACID 属性的东西,那么它需要大量的工作。
如果您需要支持事务的东西,那将需要大量工作。
如果您需要了解 ANSI-SQL 的东西,您将不得不编写一个解析器,这需要大量工作。
在开始编写任何类型的数据库之前,我认为您应该了解很多数据库理论,get a book,请阅读它。
【解决方案5】:
看看 Prevayler 人所做的工作。他们观察到,如果您可以将数据放入 ram 中,大多数使用场景会显示出更好的性能,并且在没有 RDBMS 的情况下编写的代码也更少。另一方面,谷歌、亚马逊的人表明,对于大量数据,您不想使用 RDBMS。随着我们转向 64 位操作系统和具有大量内存的 pc,RDBMS 介于两难之间。
【解决方案6】:
虽然这是迟到的回应。在执行此操作之前,您需要考虑一些基本场景,即使您事先了解 dbo 及其引擎的工作原理。
1. 是为了重仓吗?
如果是这样,那么您需要微调页面并处理一种文件格式,该格式确实需要花费大量时间来加载和检索。
是否需要处理多个连接?
同样,页面很重要,但您可能还需要为服务或基于应用的实例创建引擎。
是用于应用程序还是用于 Web?
如果是web,那就真的用MySql或者MSSQL吧。
不要选择内联内存作为数据库存储,因为这会使数据库的用途无效。创建数据库是为了让您可以在一段时间后释放内存并释放表对象,将内存返回给系统。如果是为了轻度使用,请创建一个简单的 XML/自定义文件数据库系统,因为您不是一次保存或更改大量数据。比这更好的是,使用非常适合该目的的 SQLite。如果是用于开源或商业用途,请不要使用内联内存,因为您不会强迫某人满足高内存要求,内存要花钱,而且有些人仍在运行 32 位操作系统。