当数据不适合内存时,适用于Erlang应用程序的数据存储后端

我正在研究如何为Erlang应用程序组织数据存储的可能选项。它应该使用的数据基本上是由短字符串id索引的大量二进制blob集合。每个斑点都在10 Kb以下,但其中有很多。我希望它们的总体尺寸可达200​​ Gb,所以很明显它无法适应内存。对此数据的典型操作是通过其id读取blob或通过其id更新blob或添加新的blob。在每个给定的时段,仅使用一部分ID,因此数据存储访问性能可能受益于内存缓存。谈到性能 - 这非常关键。目标是在商用硬件上(例如在EC2 VM上)每秒进行大约500次读取和500次更新。 有什么建议可以在这里使用吗?据我所知,dets是不可能的,因为它仅限于2G(或者它是4G?)。 Mnesia也可能毫无疑问;我的印象是它主要是为数据适合内存的情况而设计的。我正在考虑尝试使用EDTK的Berkeley DB驱动程序。它会在上述情况下起作用吗?有没有人在类似条件下的生产中使用它的经验?     
已邀请:
tcerl面临相同的大小限制。这些天我没有使用Erlang,但这听起来像你正在寻找的。     
你看过CouchDB在做什么吗?作为产品的下降,它可能不是你所追求的,但是存在大量用于存储数据的erlang代码。还有一些关于提供本机erlang接口而不是REST api的讨论。     
是否有任何理由不能只使用文件系统,将文件名视为字符串ID并将文件内容视为二进制blob?您可以选择一个(文件系统),以满足您的性能要求,您应该基本上免费获得缓存,由您的操作系统提供。     
Mnesia可以将数据存储在磁盘上。还有dets(基于磁盘的术语存储),它大致类似于Berkeley DB。它位于标准库中:http://www.erlang.org/doc/apps/stdlib/index.html     
我推荐Apache CouchDB。 它非常适合Erlang,从它的声音(你提到基于ID的blob,并没有提到任何关系要求),你正在寻找一个面向文档的数据库。 由于接口是REST,因此如果需要缓存,可以非常简单地在其前面添加商品HTTP缓存。 CouchDB的文档质量非常高。 它还内置了Map-Reduce :)     

要回复问题请先登录注册