我正在为我的一个项目(医疗保健的语义搜索引擎)使用三重商店数据库,它工作得很好。我正在考虑通过使用高于三重存储的键值存储层来提高性能。三元组存储查询速度较慢,因为我们进行了深度语义处理。
这就是我计划如何提高性能:
1)通过查询三元组存储,每天为所有查询条件运行Hadoop作业。2)将这些结果缓存到集群中的键值存储中。3)当用户搜索查询词时,不搜索三元库,而是优先搜索键值存储。仅当在键值存储中未找到查询条件时,才会搜索三元组存储。
我计划保存的键值对是"String“到"List of POJO mapping”。我可以将它保存为BLOB。
我对使用哪个键值存储感到困惑。我主要寻找故障转移和负载平衡支持。所有我需要的是一个简单的键值存储,提供上述功能。我不需要在值或任何其他功能中进行排序/搜索。
如果我错了,请纠正我。我假设memcached和Redis会更快,因为它在内存中。但我不知道Redis(Jredis)或memchaced(Spymemcached)是否有Java客户端支持故障转移。我不确定是使用内存还是永久存储。我也在考虑伏地魔,卡桑德拉和HBase。整个密钥值大约为2 4GB到4 4GB大小。这方面的任何建议都会很有帮助。
我对nosql和键值存储非常陌生。如果你需要更多的细节,请告诉我。
发布于 2012-11-21 04:39:13
你读过memcached教程文章了吗(他们解释了负载平衡方面的问题,因为memcached实例基于你的密钥哈希来平衡负载,spymemcached还讨论了它如何处理连接故障):
使用Memcached for Java enterprise performance,第1部分:架构和设置http://www.javaworld.com/javaworld/jw-04-2012/120418-memcached-for-java-enterprise-performance.html
使用Memcached for Java企业性能,第2部分:数据库驱动的web应用程序http://www.javaworld.com/javaworld/jw-05-2012/120515-memcached-for-java-enterprise-performance-2.html
对于memcached中的企业级故障转移/跨数据中心复制支持,您应该使用提供这些特性的Couchbase。该产品是从memcached基础演变而来的。
发布于 2012-11-21 06:27:48
在构建加载缓存的基础设施之前,您可以尝试在现有系统之上添加memcached。首先,很好地衡量你目前的表现。我建议使用JMeter或类似的工具。下面是应用程序中的工作流程:检查memcached,如果存在,就完成了。如果没有,则对三元组存储运行查询并将结果保存在memcached中。如果您有重复的查询,这将提高性能。Memcached将有效地使用您分配给它的内存,丢弃不经常使用的内容。故障转移由您的应用程序处理(如果它不在memcached中,则使用现有的基础设施)。
发布于 2012-11-22 22:12:44
我们在 app engine提供的google memcache中使用了三元组存储和缓存数据,运行良好。它降低了sparql查询在三元组存储上的开销。
https://stackoverflow.com/questions/13469459
复制相似问题