我们正在创建一个包含帖子的网络应用程序(比如FB或说Youtube)。对于稳定的数据部分(即方面,搜索结果及其内容),我们计划使用SOLR。
我们应该对数据的不稳定部分使用什么(即动态和易变的内容,如类似计数,评论计数,Viewcounts)?
选项1)Redis
如何存储"动态"不同数据存储中的数据(如Redis)?因此,每次刷新计数时,我都不必将数据重新索引到SOLR中。因此,仅当新帖子添加到站点时才会触发SOLR索引,并且永远不会触发用户对帖子的任何活动。
旁注: - 我还在https://github.com/sematext/solr-redis
查看了SOLR-Redis插件该插件看起来不错,但不确定该插件是否可用于获取存储在Redis中的数据作为solr结果集的一部分,即在docs中。描述看起来更像是Redis数据可以在函数查询中用于提升,排序等。任何人都有这方面的经验吗?
选项2)具有软提交的SOLR NRT
我们将依赖内置的NRT功能。我们假设我们每秒进行一次软提交,每10秒进行一次硬提交。假设在数百个帖子上在网站上创建了大量的动态数据,例如: 100000个喜欢10000个帖子。因此,这意味着每秒对10000行进行软提交。然后每隔10秒硬提交那么多行。这不是太过分了吗?
首选哪个选项?您如何在可扩展性,维护,可行性,最佳实践等方面比较两种选择?任何真实的经历或文章链接?
非常感谢!
P.S。 EFF(外部文件字段)不是一个选项,因为我读到该文件中的数据只能用于函数查询,不能作为文档的一部分返回。
答案 0 :(得分:1)
我建议您使用redis来获取经常更改的数据。关于Solr软件提交要记住的一件事是它们使一些缓存数据无效,如果你有很多缓存数据;打开一个新的搜索器并构建新的缓存可能会比你喜欢的时间更长。
Solr非常适合全文搜索和浏览需要标记化的数据。它也很快;但我不认为这是这项工作的正确工具。
您还可以查看此博客文章,了解有关Solr提交的更多信息。 https://lucidworks.com/blog/2013/08/23/understanding-transaction-logs-softcommit-and-commit-in-sorlcloud/
根据帖子:
软提交是关于可见性的,硬提交是关于耐久性的。 关于软提交最能理解的是他们会这样做 使文件可见,但需要付出一些代价。特别是“顶级 level“缓存,包括你在solrconfig.xml中配置的内容 (filterCache,queryResultCache等)将失效! Autowarming 将在您的顶级缓存上执行(例如filterCache, queryResultCache),将执行任何newSearcher查询。也, FieldValueCache无效,因此facet查询必须等待 直到缓存刷新。这是非常频繁的软提交 通常情况下,您的顶级缓存很少使用,可能会在 有些情况下,被淘汰。但是,“段级缓存”,其中 包括函数查询,排序缓存等是“每段”,所以 软提交时不会失效。
答案 1 :(得分:0)
Redis => 尚未探索此选项
SOLR NRT with Soft Commits => 这有点矫枉过正和效率低下,因为它会更新完整的文档,尽管每次只更新部分文档。处理此问题的更有效方法是将这些动态字段(如计数、查看计数等)保留在 Lucene 索引之外。有两种方法可以解决这个问题。
A.使用 EFF(外部文件字段)。您在帖子中提到:
EFF (external file fields) is not an option, as I read that the data in that file can only be used in function queries and cannot be returned as part of a document.
如果我没猜错的话,您希望在搜索响应中使用这些动态字段的相应值。我们可以通过在 field(exteranl_field_name)
参数中使用 fl
来获得它。
B.使用 docValues。DocValue fields are now column-oriented fields with a document-to-value mapping built at index time.
DocValues 不是 Lucene 索引的一部分。我们可以将这些字段定义为 docValue 并使用部分更新功能来更新这些字段。
DocValue => https://solr.apache.org/guide/8_0/docvalues.html
EFF => https://solr.apache.org/guide/8_0/working-with-external-files-and-processes.html
文档更新 => https://solr.apache.org/guide/6_6/updating-parts-of-documents.html