决定合适的键值商店:Voldemort vs Cassandra vs Memcached vs Redis

时间:2012-11-20 08:49:29

标签: memcached redis cassandra hbase voldemort

我正在为我的一个项目(医疗保健的语义搜索引擎)使用三重存储数据库,它工作得非常好。我正在考虑通过在三重商店之上使用一层键值存储来提升性能。由于我们进行深层语义处理,因此三重存储查询速度较慢。

这就是我计划提高绩效的方法:

1)通过查询三重商店,每天为所有查询字词运行Hadoop作业。 2)将这些结果缓存到集群中的键值存储中。 3)当用户搜索查询词时,不是搜索三元组,而是先搜索键值存储。只有在密钥值存储区中找不到查询字词时才会搜索三重存储。

我计划保存的键值对是“字符串”到“POJO映射列表”。我可以把它保存为BLOB。

我对使用哪个键值存储感到困惑。我主要寻找故障转移和负载平衡支持。我只需要一个简单的键值存储,它提供了上述功能。我不需要在值或任何其他功能中进行排序/搜索。

如果我错了,请纠正我。我假设memcached和Redis会更快,因为它在内存中。但我不知道Redis(Jredis)或memchaced(Spymemcached)的任何Java客户端是否支持故障转移。我不确定是在内存还是持久存储中使用。我也在考虑Voldemort,Cassandra和HBase。总体密钥值约为2GB至4GB。关于此的任何指示都会非常有用。

我是nosql和键值存储的新手。如果您需要更多详细信息,请与我们联系。

5 个答案:

答案 0 :(得分:1)

你有没有阅读memcached教程文章(他们解释了那里的负载平衡方面,因为memcached实例根据你的密钥哈希来平衡负载,还讨论了spymemcached如何处理连接失败):

使用Memcached实现Java企业性能,第1部分:体系结构和设置http://www.javaworld.com/javaworld/jw-04-2012/120418-memcached-for-java-enterprise-performance.html

使用Memcached实现Java企业性能,第2部分:数据库驱动的Web应用程序http://www.javaworld.com/javaworld/jw-05-2012/120515-memcached-for-java-enterprise-performance-2.html

对于memcached中的企业级故障转移/跨数据中心复制支持,您应该使用提供这些功能的Couchbase。该产品已从memcached base发展而来。

答案 1 :(得分:0)

在构建基础架构以加载缓存之前,您可能只是尝试在现有系统之上添加memcached。首先,要很好地衡量当前的表现。我建议使用JMeter或类似的工具。这是您的应用程序中的工作流程:检查memcached,如果它在那里,您就完成了。如果没有,请对三元组存储运行查询并将结果保存在memcached中。如果您有重复的查询,这将提高性能。 Memcached将使用您有效提供的内存,丢弃不经常使用的内容。故障转移由您的应用程序处理(如果它不在memcached中,您使用现有的基础结构)。

答案 2 :(得分:0)

我们在谷歌应用引擎提供的 memcache 中使用三重存储和缓存数据,它运行正常。它减少了sparql查询在三重存储上的开销。

答案 3 :(得分:0)

只有cassandra会提到功能和CQL完全支持,这有助于维护,否则你可能应该从另一个方向看:

Write heavy, replicated, bigger-than-memory key-value store

答案 4 :(得分:0)

由于您只想在三元组商店前面缓存数据,因此使用基于磁盘或复制/分布式键值存储似乎毫无意义。您所需要的只是在查询前面的查询前面缓存数据。没有"键值存储",只是vanilla Java缓存解决方案。

2016年,Java的最佳缓存为Caffeine