Leveldb与Redis或Riak或Tokyo Tyrant相比如何?

时间:2011-05-23 18:38:33

标签: nosql redis riak tokyo-tyrant leveldb

Leveldb似乎是来自Google的一个新的有趣的持久性键值商店。 Leveldb与Redis,Riak或Tokyo Tyrant有何不同?在哪些具体用例中哪一个比另一个好?

3 个答案:

答案 0 :(得分:42)

我只是添加了这个,因为在之前的两个答案中我都没有看到这个(重要的)区别......

  • Redis:是数据库服务器。您可以通过自定义二进制协议与其进行通信(通常通过客户端库)。
  • LevelDB:是一个实现键值存储的库。您通过拨打C++ API directly
  • 与之进行通信

如果您熟悉SQLite以及它作为客户端应用程序的嵌入式数据库的流行程度(我相信Android和iOS都可以发布它),那么您可以看到LevelDB适合的地方。

想象一下,您正在编写一个复杂的PIM应用程序,也许某些企业通讯录管理器意味着要安装在办公室的个人计算机上。您不希望将您在应用程序中自己编写/解析的所有数据存储在XML或JSON中 - 如果可以的话,您更愿意将其存储在数据库中,以便更轻松地访问模式。

但是你也不想运送和安装Redis的本地副本,只是在一些随机端口上运行,这样你就可以连接到它...你想要一个你可以直接和本地调用你的数据库应用程序,而不是担心“通过电线”通信......你想要一个数据库的原始内容,而不需要在客户端应用程序中不需要的任何网络内容。

这是LevelDB的所在。

这是另一种不同工作的工具。

答案 1 :(得分:29)

我发现我对colum的标准略有不同意见,尽管他指出的leveldb和Redis之间存在分歧。

你需要并发吗?我会和Redis一起去。我这样说是因为Redis已经编写了代码来处理它。任何时候我都可以使用写得很好的其他人的代码来处理并发性,那就更好了。我不仅仅意味着多线程应用程序,而是包含多个进程的概念 - 无论是否在同一系统上。即便如此,不需要在多线程应用程序中编写和调试锁定在我眼中也有很大优势。

你想在应用程序中完全自包含吗?和leveldb一起去,因为它是一个图书馆。是否需要或不仅仅需要一个k / v?和Redis一起去吧。

我只评论leveldb或Redis方面,因为我不认为自己在Riak或TT中能够流畅地评论他们更好的诉讼。

简而言之,如果您要查找的只是单线程应用程序中的持久键值存储,那么leveldb可以在您的列表中进行选择(另一个是东京内阁或好的BerkleyDB甚至是sqlite)。但如果您想要更多,请选择其中一个。

[编辑:更新说明wrt。并发]

答案 2 :(得分:11)

<强>差异:

  • Redis是一个服务器,而Leveldb是“一个实现快速持久键值存储的库”。因此,使用Redis,您必须轮询服务器。使用Leveldb,数据库存储在磁盘上,使其比Redis慢很多,Redis存储在内存中。
  • Leveldb只提供钥匙/商店。 Redis也有这个,但也有更多的功能和功能

<强>相似点:

  • 他们都有Key / Store方法

选择其中一个的原因

如果你正在制作一个C / C ++应用程序,那么leveldb就是你要走的路,只要你需要一个不像mysql那样资源丰富的数据库。 Leveldb提供代码级访问,而使用redis,您需要一个必须与服务器通信的接口。在任何其他应用程序中,Redis是最佳选择。您不仅可以获得多个应用程序可以访问的实际服务器,而且还可以获得其他功能,例如写入磁盘,集合,列表,哈希等等。