Leveldb与Redis或Riak或东京暴君相比如何?
Leveldb似乎是Google的一个新的有趣的持久性关键价值商店。 Leveldb与Redis或Riak或东京暴君有什么不同? 在哪个具体的用例中比另一个好?
虽然他指出的leveldb和Redis之间的差异是现货,但我发现我对colum的标准有点不同意。
你需要并发吗? 我会和Redis一起去的。 我这么说是因为Redis已经有了编写代码来处理它。 任何时候我都可以使用精心编写的“其他人的代码”来处理并发,所以更好。 我不是简单的指multithreading应用程序,而是在其中包含多个进程的概念 – 不pipe它们是否在同一个系统上。 即使这样,在multithreading应用程序中不需要编写和debugginglocking,在我眼中也有很大的优势。
你想在应用程序中完全独立吗? 像leveldb一样,因为它是一个图书馆。 需要或不仅仅需要ak / v? 去Redis吧。
我只对leveldb或Redis方面发表评论,因为我认为自己在Riak或TT方面不够stream利,不能评论他们更好的服装。
总之,如果你正在寻找的是在单线程应用程序中的持久性键值存储,那么leveldb是在你的列表中select的选项(另一个将是东京内阁或良好的BerkleyDB甚至sqlite)。 但是,如果你想要比这更多,select其他人之一。
[编辑:更新解释wrt。 并发]
我只是补充一点,因为在前面的两个答案中,我没有看到这个(重要的)区分。
- Redis:是一个数据库服务器。 您可以通过自定义二进制协议与其通信(通常通过客户端库)。
- LevelDB:是一个实现键值存储的库。 通过直接调用C ++ API与它进行通信。
如果您熟悉SQLite,并且它已经成为客户端应用程序的embedded式数据库(我相信Android和iOS都会发布它),那么您将看到像LevelDB这样的内容。
想象一下,你正在编写一个复杂的PIM应用程序,也许一些企业通讯录pipe理器意在安装在办公室的个人电脑上。 您不希望将所有数据存储在您的应用程序中自己编写/分析的XML或JSON中,如果可以的话,则宁愿将其存储在数据库中以使访问模式更简单。
但是,您也不希望运输和安装Redis的本地副本,在某个随机端口上运行,以便连接到它…您需要一个数据库,您可以直接从您的应用程序直接调用,而不是担心“通过线路”通信…你需要一个数据库的原始胆量,而不需要在客户端应用程序中不需要的任何networking连接。
这是LevelDB的位置。
这是一个不同的工作不同的工具。
区别:
- Redis是一个服务器,而Leveldb是“一个实现快速持久键值存储的库”。 因此,使用Redis,您必须轮询服务器。 使用Leveldb,数据库存储在磁盘上,比存储在内存中的Redis慢很多。
- Leveldb只提供钥匙/商店。 Redis也有这个function,而且function也很多
相似点:
- 他们都有钥匙/存储方法
select一个在另一个的理由
如果你正在制作一个C / C ++应用程序,那么leveldb就是要走的路,只要你需要一个不像mysql那样资源丰富的数据库。 Leveldb提供代码级访问,而使用redis则需要一个必须与服务器通信的接口。 在任何其他应用程序中,Redis是要走的路。 你不仅可以得到一个实际的服务器,多个应用程序可以访问,但你得到其他function,如写入磁盘,设置,列表,散列,并继续。