Leveldb似乎是来自 Google 的一个新的有趣的持久键值存储。Leveldb 与 Redis 或 Riak 或 Tokyo Tyrant 有何不同?在哪些特定用例中,一种比另一种更好?
3 回答
我只添加这个是因为在之前的两个答案中我都没有看到这个(重要的)区别......
- Redis:是一个数据库服务器。您通过自定义二进制协议(通常通过客户端库)与它进行通信。
- LevelDB:是一个实现键值存储的库。您可以通过直接调用C++ API与它进行通信。
如果你熟悉 SQLite 以及它作为客户端应用程序的嵌入式数据库变得多么流行(我相信 Android 和 iOS 都提供它),那么你就会看到像 LevelDB 这样的东西适合的地方。
想象一下,您正在编写一个复杂的 PIM 应用程序,也许是一些打算安装在办公室的个人计算机上的企业通讯簿管理器。您不希望将您自己在应用程序中编写/解析的所有数据存储在 XML 或 JSON 中——如果可以的话,您更愿意将其存储在数据库中以便于访问模式。
但是您也不想运送和安装 Redis 的本地副本,在某个随机端口上运行,以便您可以连接到它……您想要一个可以直接从您的应用程序本地调用的数据库,而不是担心“有线”通信......您想要数据库的原始内容,而不需要任何您在仅客户端应用程序中不需要的网络内容。
这就是 LevelDB 所在的位置。
它是针对不同工作的不同工具。
我发现我有点不同意 colum 的标准,尽管他指出的 leveldb 和 Redis 之间的差异很明显。
你需要并发吗?我会选择Redis。我这样说是因为 Redis 已经编写了处理它的代码。任何时候我都可以使用编写良好的其他人的代码来处理并发,那就更好了。我不仅仅指多线程应用程序,还包括多进程的概念——无论它们是否在同一个系统上。即便如此,在我看来,不需要在多线程应用程序中编写和调试锁定具有很大的优势。
您希望它在应用程序中完全独立吗?使用 leveldb,因为它是一个库。需要或想要的不仅仅是 ak/v?使用 Redis。
我只评论 leveldb 或 Redis 方面,因为我认为自己在 Riak 或 TT 方面还不够流利,无法评论他们更好的套装。
简而言之,如果您正在寻找的只是单线程应用程序中的持久键值存储,那么 leveldb 是您的列表中的选择(另一个是 Tokyo cabinet 或好的 ole BerkleyDB 甚至 sqlite)。但是,如果您想要更多,请选择其他之一。
[编辑:更新的解释wrt。并发]
差异:
- Redis 是一个服务器,而 Leveldb 是“一个实现快速持久键值存储的库”。因此,使用 Redis,您必须轮询服务器。使用 Leveldb,数据库存储在磁盘上,这比存储在内存中的 Redis 慢很多。
- Leveldb 仅提供密钥/存储。Redis 也有这个,但也有更多的功能和特性
相似之处:
- 他们都有 Key/Store 方法
选择一个而不是另一个的原因
如果您正在制作 C/C++ 应用程序,那么 leveldb 是您的最佳选择,前提是您只需要一个不像 mysql 那样资源繁重的数据库。Leveldb 提供代码级访问,而使用 redis,您需要一个必须与服务器通信的接口。在任何其他应用程序中,Redis 都是必经之路。您不仅可以获得一个实际的服务器,多个应用程序都可以访问它,而且您还可以获得其他功能,例如写入磁盘、集合、列表、散列等等。