2016-05-17 45 views
1

我们使用Postgresql作为持久性,ehcache作为我们的缓存。我们最近推出了Solr,可以加快搜索速度(用于模糊搜索和精确搜索)。可以将Solr用作缓存的替代方法吗?

所以我的问题是:Solr可以调整,以便它可以取代ehcache? (在云模式下运行还是这么说)

只是一些上下文到一个问题:

我们有一大堆的表来存储联系人信息。 Ehcache目前正用于为给定ID获取这些联系人。 Solr将广泛用于搜索相关操作。由于Solr已经在执行搜索......为什么不用Ehcache替换(如某种方式,它类似于:使用给定ID进行搜索),前提是性能不受影响。

回答

1

除了其他原因为什么将是一个答案,也是变化的粒度。 Lucene(底层库)以只读形式存储数据。 Solr在其上添加了可更新的文档,但使其可见仍然是一项沉重的操作。 Solr的最新版本使软提交变得更容易和更快速,但是使变更可见的代价仍然不是微不足道的。

因此,它并没有针对更新/缓存单个值进行优化。数据结构针对多文档更新进行优化,然后通过缓存在该临时只读状态下进行快速搜索。

+0

我不同意你的结论,因为我不喜欢使用Solr作为文档存储(相对于搜索索引),但如果用例是“通过id编写文档的最新版本”,那么这就是Realtime Get的用途:https ://cwiki.apache.org/confluence/display/solr/RealTime+Get – randomstatistic

+0

当然,实时获取提高了访问速度,但是在搜索功能丢失的情况下,它仍然没有针对它进行优化。所以,可能的,但不建议从专门为此类操作设计的东西切换。 –

1

我会试一试,但不太可能有人对这样一个模糊的问题有明确的答案。 https://lucidworks.com/blog/2012/07/23/sizing-hardware-in-the-abstract-why-we-dont-have-a-definitive-answer/现在已经四岁了,但仍然相关。答案完全取决于你需要做什么。

所以,一些通用的声明:

  • SolrCloud与否不太可能是影响你的决定的问题。如果您希望Solr处理复制和索引管理,请使用它。不要,如果你想自己做。
  • Solr速度很快,(给出足够的内存)所以它肯定是可能你可以摆脱一个缓存层。只有你知道你的要求。
  • 通过https://wiki.apache.org/solr/SolrCaching阅读,特别是您可能会对QueryResultCache感兴趣。
+0

首先感谢您的好解释。我编辑了这个问题来提供一些背景。请让我知道你的意见。 – iwekesi

+0

好吧,所以Solr对于两件事情特别有用,模糊搜索特性和基于相关性的排序。在Solr IS中查找ID的速度相当快,但正如其他答案中指出的那样,即使您的整个solr索引缓存在内存中,也很难击败内存中的缓存。这是一种非常常见的模式,只有使用Solr才能获得匹配的有序id的列表,并使用它从持久存储(如postgres)获取实际文档内容。如果你已经在postgres前面有一个用于加速的缓存,我没有看到改变它的很多理由。 – randomstatistic

1

简单的答案是:没有

原因

cache是在内存中,但Solr的指数是在磁盘上(除了部分被缓存)。

读取内存比读取磁盘快数千倍以上。

所以,Solr的不能用作一般目的缓存,在这种情况下ehcachememcachedredis会是一个更好的选择。

什么是最好的搜索能力,analyzer & tokenizer & filter,但不缓存。

相关问题