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

raf*_*ude 44 nosql tokyo-tyrant redis riak leveldb

Leveldb似乎是Google新推出的一款有趣的持久关键价值商店.Leveldb与Redis,Riak或Tokyo Tyrant有何不同?在哪些具体用例中哪一个比另一个好?

Riy*_*lla 43

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

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

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

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

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

这是LevelDB所在的位置.

对于不同的工作,它是一个不同的工具.

  • Redis可以在Unix域套接字上运行.我在嵌入式设备上完成了这项工作以加速启动(不需要网络来启动Redis). (2认同)

The*_*ill 29

我发现我对colum的标准略有不同意见,尽管他指出的leveldb和Redis之间的区别是现实的.

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

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

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

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

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

  • 不确定我是否同意您的分析.请参阅[黑客新闻主题](http://news.ycombinator.com/item?id=2526032).虽然我仍在寻找客观研究,但在并发性和速度方面,leveldb似乎都很优越. (3认同)

Col*_*lum 11

区别:

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

相似点:

  • 它们都有Key/Store方法

选择一个而不是另一个的原因

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

  • >*Redis,存储在内存中*注意读者,这有点误导.它保留在磁盘*和*内存中.存储在redis中的数据不是易失性的,与memcached不同. (3认同)
  • 说leveldb比redis慢是因为前者接触磁盘是错误的.这主要取决于服务器和客户端之间的网络延迟,以及它是否比磁盘访问更快或更慢.磁盘很可能是SSD,文件可能很好地存在于缓存中; 实际上,对于任何基于磁盘的数据库,通常建议将工作集放入缓存中.如果你这样做,你的单进程,单客户端leveldb将比redis更快! (3认同)