3

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

这就是我计划提高性能的方式:

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

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

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

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

我对 nosql 和键值存储非常陌生。如果您需要更多详细信息,请告诉我。

4

5 回答 5

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 基础演变而来的。

于 2012-11-20T20:39:13.153 回答
0

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

编写重的、复制的、大于内存的键值存储

于 2012-11-28T23:40:30.517 回答
0

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

于 2012-11-20T22:27:47.503 回答
0

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

于 2012-11-22T14:12:44.190 回答
0

由于您只想在三重存储前缓存数据,因此使用基于磁盘或复制/分布式键值存储似乎毫无意义。本质上,您所需要的只是将查询前的数据缓存在完成这些查询的机器上。没有“键值存储”,只有普通的 Java 缓存解决方案。

2016 年最好的 Java 缓存是Caffeine

于 2016-07-08T16:25:55.227 回答