有没有适用于Ruby的可嵌入键值存储库?

9
我需要快速可靠的Ruby键值存储。是否已经有类似的东西了?
要求它在Ruby进程内完全运行,不需要任何外部进程。 它可能是内存中的,具有显式的磁盘刷新。 它需要具有最小的值对键检索时间,写入时间可能不太好。 存储的数据量不会很大,大约有几十万个键,每个键带有~1kb文本值。

3
基本哈希表是否足够好?http://www.ruby-doc.org/core-1.9.3/Hash.html - Ian Armit
尝试过了,但不幸的是速度太慢了。也许我使用了不好的序列化技术,但使用普通的yaml序列化器将这样的哈希反序列化到内存中需要大约15秒钟。 - Cyryl Płotnicki
7个回答

5
你也可以尝试使用Moneta,它允许你在 Ruby 进程中构建自己的键/值存储。

5

结果证明,对我来说最好的选择是使用普通的Hash和Marshal将其序列化到磁盘上。
YAML明显对于这么多对象来说太慢了。
感谢@ian-armit加强了我对核心Ruby库的信任。


2

喜欢DBM吗?http://www.ruby-doc.org/stdlib-1.9.3/libdoc/dbm/rdoc/DBM.html

(用于防垃圾邮件的占位符)

DBM类提供了对Unix-style dbm或Database Manager库的包装。

Dbm数据库没有表格或列;它们是简单的键值数据存储,类似于Ruby哈希,但不驻留在RAM中。键和值必须是字符串。


我会尝试一下,看起来描述很合适,谢谢。不过我想知道它是否兼容Windows系统。 - Cyryl Płotnicki

1
你可以尝试使用Oria: https://github.com/intridea/oria Oria(oh-rye-uh)是一种基于Ruby的内存型零配置键值存储。它旨在快速轻松地处理适量数据,而不会引起部署问题或服务器头疼。它使用EventMachine提供网络接口到半持久存储,并异步将内存中的数据写入YAML文件。

听起来很有趣,我会尝试并与Hash+Marshal解决方案进行比较,谢谢! - Cyryl Płotnicki

0

看看PStore。不确定它是否足够快。


0

0

Daybreak 是一个不错的新选项。数据存储在内存表中,因此可以使用 Ruby 功能(如 each、filter、map、reduce 等),并且似乎比 pstore 或 dbm 更快。

有关更多信息,请参阅 此博客文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接