2012-11-20 89 views
3

我正在为我的项目之一(医疗保健语义搜索引擎)使用三重商店数据库,它工作得很好。我正考虑通过在三重商店之上使用一层关键值存储来提高性能。自从我们进行深度语义处理以来,三重查询查询速度较慢。决定合适的键值存储:Voldemort vs Cassandra vs Memcached vs Redis

这是我正在计划以提高性能:

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

我打算保存的键值对是一个“String”到“POJO映射列表”。我可以将它保存为BLOB。

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

如果我错了,请纠正我。我假设memcached,并且Redis将会更快,因为它在内存中。但我不知道Redis(Jredis)或memchaced(Spymemcached)的任何Java客户端是否支持故障切换。我不确定是在内存还是在持久存储中。我也在考虑Voldemort,Cassandra和HBase。总体关键值将大约为2GB至4GB。任何指针都会很有帮助。

我对nosql和关键价值商店很新。如果您需要更多详细信息,请告诉我。

+0

除了复制和失败处理外,'Voldemort'允许您使用Hadoop(只读存储器)创建存储,所以您可以将步骤1)和2)合并为 。要查看的值的大小也是需要考虑的因素,请查看:https://groups.google.com/forum/?fromgroups=#!topic/project-voldemort/ZUHE06ksZ58 –

回答

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

对于我的企业级故障切换/跨数据中心复制支持mcached你应该使用提供这些功能的Couchbase。该产品已从memcached基础发展而来。

0

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

+0

感谢您的回复。对,这是迄今为止的计划。但我正在查看一个支持故障转移和复制的关键值存储。即如果关键值存储服务器关闭,那么该映射的所有关键值应该在其他服务器之间进行分配(如此)。我的应用程序支持故障转移,但我也在缓存级别查看故障转移。我知道Hbase支持复制和故障转移,但我正在寻找像memcached或redis这样简单的东西。但我不知道他们是否支持复制和故障转移。我在教程中找不到很多信息。 – CRS

+0

使用支持一致哈希的memcached客户端(很多),如果其中一个服务器无法访问,将会重新分配键。 –

0

我们通过谷歌应用程序引擎提供的memcache使用三重存储和缓存数据,它工作正常。它减少了三重存储上sparql查询的开销。

0

既然你面前想只是缓存数据你的三重商店,基于磁盘或复制/分布式键值存储似乎毫无意义。您所需要的仅仅是在查询完成的机器上将数据缓存在查询前面。没有“键值存储”,只有香草Java缓存解决方案。

2016年,Java的最佳缓存是Caffeine