2

我需要开发一个系统来存储大量(10 到 100 的数千个)对象。每个对象都类似于电子邮件 - 有一个主要文本正文和几个有限大小的辅助文本字段。正文的大小从几个字节到几个 KB。

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

仅当向其中添加对象时才会写入存储。会经常阅读。删除将是罕见的。数据几乎都是人类可读的文本,因此很容易压缩。

一个让我发出 I/O 并管理内存和缓存的系统将是理想的。

我将把索引保存在内存中,使用它将索引映射到对象的单个(和主)键。获得密钥后,我将从磁盘或缓存中加载它。

数据管理系统需要成为我的应用程序的一部分——我不想依赖操作系统服务。或单独安装的软件包。本机 (C++) 最好,但管理 (C#) 就可以了。

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

(注意,这与我的工作无关——这是一个个人项目。)

根据您的经验,传统关系数据库的可行替代方案是什么?或者数据库会为此工作吗?

4

7 回答 7

2

我会尝试 PFS:http: //blog.sensenet.hu/post/2008/05/Portal-File-System- (PFS)-an-open-source-content-repository-for-Net.aspx

太糟糕了,你在 c/.Net 上,因为 Jackrabbit 本来是一个完美的选择。

于 2008-11-04T07:54:40.653 回答
2

查看SQLite,它具有许多可用编程语言和环境的绑定,并且与Berkeley DB一样,是磁盘上的数据库,无需安装数据库引擎。

如果您只是添加正确的索引,查找将非常快,并且由于它本质上是一个基于集合的数据库,您仍然可以进行批量查询和类似的查询。

于 2008-11-04T08:14:45.450 回答
1

您并没有真正说明您将如何搜索这些数据。我已经对一些文本挖掘应用程序进行了一些类似的工作,其中主要数据存储在 MySQL 中,但我在 Ferret 中维护了一个文本搜索索引(该项目在 Ruby 中),以根据关键字搜索在消息表中找到适当的行。我认为这种混合方法也适用于您。SQLServer 和 Lucene.Net 在 C# 环境中可能很适合您。我敢肯定,如果您环顾四周,您可以在 C++ 领域找到类似的解决方案。

我不推荐使用 SQLServer 全文搜索——Lucene 及其衍生产品似乎是一个更好的选择。

我认为与基于文件的解决方案相比,几乎任何数据库解决方案都会让您有更好的运气。几乎任何现代数据库都应该能够处理您的数据需求,至少在空间方面是这样。在您的大字段上构建索引是另一回事,这就是为什么如果您需要搜索它,我会推荐一种文本挖掘方法。

于 2008-11-04T04:55:01.330 回答
0

听起来就像 Berkeley DB 的设计目的。不过我没用过。

于 2008-11-04T05:05:22.073 回答
0

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

通过这种方式,您可以将自己的开发保持在最低限度,并从一系列强大的功能开始。

于 2008-11-04T05:15:52.830 回答
0

你看过db4oKarvonite吗?

于 2009-08-11T13:28:20.713 回答
-1

看看一瞥

于 2008-11-04T08:00:30.707 回答