首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SOLR中的动态数据(如计数,视图计数等)- NRT vs Redis?

SOLR中的动态数据(如计数,视图计数等)- NRT vs Redis?
EN

Stack Overflow用户
提问于 2015-12-11 18:38:16
回答 2查看 291关注 0票数 0

我们正在创建一个web应用程序,其中将包含帖子(类似于FB或Youtube)。对于数据的稳定部分(i.e.the方面、搜索结果及其内容),我们计划使用SOLR。

我们应该使用什么来处理数据的不稳定部分(即动态和不稳定的内容,如Like计数、评论计数、视图计数)?

选项1) Redis

如何将“动态”数据存储在不同的数据存储中(如Redis)?因此,每次刷新计数时,我根本不需要将数据重新索引到SOLR中。因此,SOLR索引只有在新帖子添加到站点时才会触发,而不会触发用户在帖子上的任何活动。

附注:-我还查看了https://github.com/sematext/solr-redis上的SOLR-Redis插件

该插件看起来不错,但不确定该插件是否可以用于获取存储在Redis中的数据,作为solr结果集的一部分,即在文档中。这个描述看起来更像是Redis的数据可以用在函数查询中,用于boosting,排序等。有谁有经验吗?

选项2)使用软提交的SOLR NRT

我们将依赖于内置的NRT功能。假设我们每秒钟软提交一次,每10秒硬提交一次。假设在网站上创建了数以百计的动态数据,例如10000个帖子中的100000个赞。因此,这将意味着每秒对10000行进行软提交。然后每10秒硬提交一次这些行。这是不是太夸张了?

哪个选项是首选的?在可扩展性、维护性、可行性、最佳实践等方面,您如何比较这两个选项?有任何现实生活中的经验或文章链接吗?

非常感谢!

附注:EFF (外部文件字段)不是一个选项,因为我读到该文件中的数据只能用于函数查询,不能作为文档的一部分返回。

EN

回答 2

Stack Overflow用户

发布于 2015-12-14 08:52:43

我建议您使用redis来处理频繁变化的数据。关于Solr软提交需要记住的一件事是,它们会使一些缓存数据失效,如果你有很多缓存数据,打开一个新的搜索器并构建新的缓存可能会比你喜欢的更耗时。

Solr非常适合全文搜索和遍历需要标记化的数据。它也很快;但是我不认为它是适合这项工作的工具。

您还可以查看此博客文章,了解有关Solr提交的更多信息。https://lucidworks.com/blog/2013/08/23/understanding-transaction-logs-softcommit-and-commit-in-sorlcloud/

根据这篇文章:

软提交关乎可见性,硬提交关乎持久性。关于软提交,最需要理解的一点是,它们将使文档可见,但要付出一些代价。尤其是“顶级”缓存,包括您在solrconfig.xml中配置的内容(filterCache、queryResultCache等)将会失效!自动保护将在您的顶级缓存(例如filterCache、queryResultCache)上执行,并且将执行任何newSearcher查询。此外,FieldValueCache是无效的,因此facet查询将不得不等待,直到刷新缓存。对于非常频繁的软提交,通常情况下,您的顶级缓存很少使用,在某些情况下,可能会被删除。然而,包括函数查询、排序缓存等在内的“段级别缓存”是“按段”的,因此在软提交时不会失效。

票数 1
EN

Stack Overflow用户

发布于 2021-04-27 13:12:15

  1. Redis =>尚未探索过此选项

使用软提交的

  1. SOLR NRT =>它有一种过度杀伤力和低效,因为它将更新整个文档,尽管每次只更新文档的一部分。处理这种情况的更有效的方法是将这些动态字段(如count、view count等)放在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.如果我没记错,你希望在搜索响应中包含这些动态字段的相应值。我们可以通过在fl参数中使用field(exteranl_field_name)来实现。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34221511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档