4

我正在研究如何为 Erlang 应用程序组织数据存储的可能选项。它应该使用的数据基本上是由短字符串 id 索引的大量二进制 blob 集合。每个 blob 小于 10 Kb,但其中有很多。我希望它们的总大小可达 200 Gb,因此显然它无法装入内存。对该数据的典型操作是通过其 id 读取 blob 或通过其 id 更新 blob 或添加新的 blob。在一天中的每个给定时间段,只有一个 id 子集被使用,因此数据存储访问性能可能会受益于内存缓存。谈到性能 - 这是非常关键的。目标是在商用硬件(比如 EC2 VM)上每秒进行大约 500 次读取和 500 次更新。

有什么建议在这里使用吗?据我了解,dets 是毫无疑问的,因为它仅限于 2G(或者是 4G?)。Mnesia 也可能没有问题;我的印象是它主要是为数据适合内存的情况设计的。我正在考虑尝试 EDTK 的 Berkeley DB 驱动程序来完成这项任务。它会在上述情况下工作吗?有没有人有在类似条件下在生产中使用它的经验?

4

5 回答 5

5

tcerl面临相同的大小限制。这些天我没有使用 Erlang,但这听起来像你在找的东西。

于 2008-11-25T17:22:00.340 回答
1

你看过 CouchDB 在做什么吗?它可能不是您所追求的产品,但其中有很多用于存储数据的 erlang 代码。还有一些关于提供本机 erlang 接口而不是 REST api 的讨论。

于 2008-11-25T16:58:57.453 回答
1

有什么理由不能只使用文件系统,将文件名视为字符串 id,将文件内容视为二进制 blob?您可以选择一个适合您的性能要求的(文件系统),并且您应该基本上免费获得由您的操作系统提供的缓存。

于 2008-11-25T20:31:49.647 回答
0

Mnesia 可以很好地将数据存储在磁盘上。还有大致类似于 Berkeley DB 的 dets(基于磁盘的术语存储)。它在标准库中:http ://www.erlang.org/doc/apps/stdlib/index.html

于 2008-11-17T18:34:57.060 回答
0

我会推荐 Apache CouchDB。

它非常适合 Erlang,并且从它的声音(您提到基于 ID 的 blob 并且没有提及任何关系要求)来看,您正在寻找一个面向文档的数据库。

由于接口是 REST,如果需要缓存,您可以非常简单地在其前面添加商品 HTTP 缓存。

CouchDB 的文档质量非常高。

它还具有内置的 Map-Reduce :)

于 2009-01-07T16:42:55.923 回答