2008-11-04 70 views
2

我需要开发一个用于存储大数目(10到100的数千个)对象的系统。每个对象都像电子邮件一样 - 有一个主体文本体,以及几个尺寸有限的辅助文本字段。一个主体将从几个字节到几KB的大小。在磁盘上存储大量不同大小的对象

每个项目都有一个唯一的ID(可能是一个GUID)来标识它。

只有当对象添加到商店时才会写入商店。它会经常阅读。删除将很少。这些数据几乎都是人类可读的文本,因此它可以很容易被压缩。

的系统,让我发出I/O和系统的存储和缓存将是理想的。

我要保存在内存中的索引,用它来映射指数为对象的单一(和初级)键。一旦我有了密钥,我就会从磁盘或缓存中加载它。

数据管理系统需要我的应用程序的一部分 - 我不希望依赖于OS的服务。或单独安装的软件包。本机(C++)将是最好的,但一个管理(C#)的事情会好的。

我相信,一个数据库是一个显而易见的选择,但是这必须是超快速的查找和加载到一个对象的内存。我对数据库技术没有经验,我担心一般的关系系统不会有效地处理所有这些可变大小的数据。

(注意,这无关我的工作 - 它的一个个人项目。)

在你的经验,有什么可行的替代传统的关系型数据库?或者数据库会为此工作好吗?

回答

2

看看SQLite,它具有许多可用编程语言和环境的绑定,就像Berkeley DB一样,磁盘上的数据库不需要安装数据库引擎。

如果你只需要添加正确的索引,查找会非常快,并且由于它是在心脏基于集合的数据库,你仍然可以做批量查询和类似。

1

你并没有真正指出你将如何搜索这些数据。我已经对一些文本挖掘应用程序做了一些类似的工作,其中主要数据存储在MySQL中,但我在Ferret中维护一个文本搜索索引(项目位于Ruby中),以根据关键字搜索在邮件表中找到相应的行。我认为这种混合方法也适用于你。 SQLServer和Lucene.Net可能在C#环境中适合您。我相信,如果你环顾四周,你可以在C++空间找到类似的解决方案。

我不推荐使用SQLServer的全文搜索 - Lucene和它的派生似乎是一个更好的选择。

我认为你将有更好的运气与几乎任何数据库解决方案在基于文件的解决方案。几乎任何现代数据库都应该能够处理您的数据需求,至少在空间方面。在大型领域构建索引是另一回事,因此如果您需要搜索文本挖掘方法,我会推荐它。

+0

嗨Tvanfosson,我会保存在内存中的索引,用它来索引映射为对象的单一(和初级)键。一旦我有了密钥,我就会从磁盘或缓存中加载它。 感谢您的意见:) – Foredecker 2008-11-04 04:57:42

0

听起来就像伯克利DB的设计。但是,我没有用过它。

0

也许你应该考虑一下像Apache + mod-dav这样的WebDav-Server。这会将内容和元数据存储在磁盘上。 对于搜索,您可以将现有的搜索引擎放置在此WebDav服务器的顶部,例如Lucene的。

通过这种方式,您可以保持自己的发展最低限度,并拥有一系列强大功能。

-1

看看Glimpse

+0

奇怪的人......如果您没有得到或喜欢这个想法,为什么投票呢?至少这应该解释我错了。 – Thevs 2008-11-05 21:55:04

相关问题