Leveldb似乎是来自谷歌的一个新的有趣的持久键值存储。Leveldb与Redis、Riak或东京暴君有什么不同?在哪些特定用例中,一种比另一种更好?
发布于 2011-05-24 06:24:50
我发现我有点不同意colum的标准,尽管leveldb和Redis之间的差异是显而易见的。
你需要并发吗?我会选瑞迪斯。我这么说是因为Redis已经编写了处理它的代码。任何时候我都可以使用别人写得很好的代码来处理并发,那就更好了。我不是简单地说多线程应用程序,而是在其中包含多进程的概念-无论它们是否在同一系统上。即使这样,在我看来,不需要在多线程应用程序中编写和调试锁定也是一个很大的优势。
你想让它在应用程序中完全独立吗?使用leveldb,因为它是一个库。是否需要或想要的不仅仅是k/v?和Redis一起去。
我只是在评论leveldb或Redis方面,因为我认为自己在Riak或TT方面还不够流利,无法评论他们更好的西装。
简而言之,如果你正在寻找的是在单线程应用中持久化的键值存储,那么leveldb是你列表中的一个选择(另一个选择是东京机柜或者good ole,BerkleyDB,甚至是sqlite)。但如果你想要更多,那就选择其他的吧。
编辑:更新说明wrt。并发性
发布于 2011-11-07 14:52:48
我之所以添加这一点,是因为在前面的两个答案中,我没有看到这个(重要的)区别……
与其进行通信
如果你熟悉SQLite,以及它作为客户端应用程序的嵌入式DB的流行程度(我相信Android和iOS都提供了它),那么你就会看到像LevelDB这样的东西适合在哪里。
想象一下,你正在编写一个复杂的PIM应用程序,也许某个企业地址簿管理器打算安装在办公室的个人计算机上。您不希望将自己在应用程序中编写/解析的所有数据都存储在XML或JSON中--如果可以,您更愿意将其存储在DB中,以获得更容易的访问模式。
但你也不希望不得不发布和安装Redis的本地副本,在某个随机端口上运行,这样你就可以连接到它了……你想要一个可以直接从你的应用程序本地调用的数据库,而不用担心“通过网络”的通信……你想要一个数据库的原始内脏,而不是任何你在客户端应用程序中不需要的网络相关的东西。
这就是LevelDB所处的位置。
对于不同的工作,它是一个不同的工具。
发布于 2011-05-23 22:28:33
差异:
相似性:
选择一个而不是另一个的理由
如果你正在开发一个C/C++应用,如果你只需要一个不像mysql那样占用大量资源的数据库,那么leveldb就是不错的选择。Leveldb提供代码级访问,而对于redis,您需要一个必须与服务器通信的接口。在任何其他应用程序中,Redis都是不错的选择。你不仅可以得到一个实际的服务器,一个以上的应用程序可以访问,你还可以获得其他功能,如写到磁盘,集,列表,散列,等等。
https://stackoverflow.com/questions/6101402
复制