【问题标题】:Can Solr be used as an alternative to cache?Solr 可以用作缓存的替代品吗?
【发布时间】:2016-09-13 01:37:17
【问题描述】:

我们使用 Postgresql 进行持久化,使用 ehcache 作为我们的缓存。我们最近引入了 Solr 以实现更快的搜索(用于模糊和精确搜索)。

所以我的问题是:Solr 可以调整为可以替代 ehcache 吗? (比如在云模式下运行)

只是为问题添加一些上下文:

我们有一堆表来存储联系信息。 Ehcache 当前用于获取给定 ID 的这些联系人。 Solr 将广泛用于搜索相关操作。既然 Solr 已经在进行搜索...为什么不替换 Ehcache(在某种程度上它就像:使用给定 ID 搜索),只要性能不受影响。

【问题讨论】:

    标签: postgresql caching solr ehcache


    【解决方案1】:

    除了 会成为答案的其他原因之外,还有变化的粒度。 Lucene(底层库)以只读形式存储数据。 Solr 在此之上添加了可更新的文档,但使它们可见仍然是一项繁重的操作。最新版本的 Solr 通过软提交使其变得更容易和更快,但让更改可见的代价仍然不小。

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

    【讨论】:

    • 我不同意您的结论,因为我不喜欢将 Solr 用作文档存储(相对于搜索索引),但如果用例是“按 id 的文档的最新版本”,那就是Realtime Get 的用途:cwiki.apache.org/confluence/display/solr/RealTime+Get
    • 当然,Real Time Get 提高了访问速度,但失去了搜索功能,并且仍未针对它进行优化。因此,可能,但不建议从专门为此类操作设计的东西切换。
    【解决方案2】:

    我会试一试,但对于这样一个模糊的问题,不太可能有人会给出明确的答案。 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 感兴趣。

    【讨论】:

    • 首先感谢您的精彩解释。我已经编辑了这个问题以提供一些背景信息。请让我知道你的看法。
    • 好的,所以 Solr 对两件事特别有用,模糊搜索特性和基于相关性的排序。 Solr 中的 ID 查找速度非常快,但正如其他答案中指出的那样,即使您的整个 solr 索引无论如何都缓存在内存中,也很难击败内存缓存。这是一种非常常见的模式,仅使用 Solr 来获取匹配的有序 id 列表,并使用它从持久性存储(如 postgres)中获取实际文档内容。如果您已经在 postgres 前面有一个缓存以提高速度,我认为没有太多理由改变它。
    【解决方案3】:

    简单的答案是:

    原因

    cache在内存中,但是solr的索引在磁盘上(除了被缓存的部分)。

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

    因此,solr 不能用作通用用途的缓存,在这种情况下ehcachememcachedredis 将是更好的选择。

    solr 擅长的是它的搜索能力,analyzer & tokenizer & filter,而不是缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-22
      • 2018-09-10
      • 2022-08-15
      • 2015-06-12
      • 1970-01-01
      • 2011-01-28
      • 2019-03-27
      • 2011-03-16
      相关资源
      最近更新 更多