Solr 可以用作缓存的替代品吗?
Can Solr be used as an alternative to cache?
我们使用 Postgresql 进行持久化,使用 ehcache 作为我们的缓存。我们最近引入了 Solr 以实现更快的搜索(用于模糊和精确搜索)。
所以我的问题是:是否可以将 Solr 调整为可以替代 ehcache 的方式? (比如 运行 在云模式下)
只是为问题添加一些上下文:
我们有一堆表来存储联系信息。 Ehcache 当前用于获取给定 ID 的这些联系人。 Solr 将广泛用于搜索相关操作。由于 Solr 已经在进行搜索...为什么不替换 Ehcache(在某种程度上就像:使用给定的 ID 进行搜索),前提是性能不会受到影响。
我会试一试,但不太可能有人对这样一个模糊的问题有明确的答案。 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 特别感兴趣。
简单的答案是:否
原因:
cache
在内存中,但是solr的索引在磁盘上(缓存的部分除外)
读取内存比读取磁盘快数千倍。
因此,solr 不能用作 一般 目的缓存,在那种情况下 ehcache
或 memcached
或 redis
会是更好的选择。
solr擅长的是它的搜索能力,analyzer & tokenizer & filter
,而不是缓存。
除了 否 会成为答案的其他原因外,还有更改的粒度。 Lucene(底层库)以只读形式存储数据。 Solr 在此基础上添加了可更新的文档,但使它们可见仍然是一项繁重的操作。最新版本的 Solr 使软提交变得更容易和更快,但使更改可见的代价仍然不小。
因此,它确实没有针对 updating/caching 单个值进行优化。数据结构针对多文档更新进行了优化,然后通过缓存临时只读状态进行快速搜索。
我们使用 Postgresql 进行持久化,使用 ehcache 作为我们的缓存。我们最近引入了 Solr 以实现更快的搜索(用于模糊和精确搜索)。
所以我的问题是:是否可以将 Solr 调整为可以替代 ehcache 的方式? (比如 运行 在云模式下)
只是为问题添加一些上下文:
我们有一堆表来存储联系信息。 Ehcache 当前用于获取给定 ID 的这些联系人。 Solr 将广泛用于搜索相关操作。由于 Solr 已经在进行搜索...为什么不替换 Ehcache(在某种程度上就像:使用给定的 ID 进行搜索),前提是性能不会受到影响。
我会试一试,但不太可能有人对这样一个模糊的问题有明确的答案。 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 特别感兴趣。
简单的答案是:否
原因:
cache
在内存中,但是solr的索引在磁盘上(缓存的部分除外)
读取内存比读取磁盘快数千倍。
因此,solr 不能用作 一般 目的缓存,在那种情况下 ehcache
或 memcached
或 redis
会是更好的选择。
solr擅长的是它的搜索能力,analyzer & tokenizer & filter
,而不是缓存。
除了 否 会成为答案的其他原因外,还有更改的粒度。 Lucene(底层库)以只读形式存储数据。 Solr 在此基础上添加了可更新的文档,但使它们可见仍然是一项繁重的操作。最新版本的 Solr 使软提交变得更容易和更快,但使更改可见的代价仍然不小。
因此,它确实没有针对 updating/caching 单个值进行优化。数据结构针对多文档更新进行了优化,然后通过缓存临时只读状态进行快速搜索。