【发布时间】:2018-03-18 16:04:46
【问题描述】:
我有一个所有用户都可以插入的 MySQL 表。表中的一个字段是该行匹配的 solr 文档总数,称之为total results。
在 REST api 代码中,在插入时,我使用 solr 客户端来查找新行匹配的文档总数。我更新该字段,然后返回已完成的资源。很简单,虽然我更喜欢通过 MySQL 自动触发此更新。
更大的问题是,在将新文档插入或从 solr 中删除旧文档时,我现在没有比执行与 REST api 代码具有相同逻辑的 shell 脚本并运行 total results 更新更好的计划了在每一行。
在我看来,我的选择是:
1.) 将data_import 之后的所有行一一更新为 solr。此表大约有 150 万行,因此需要一些时间。
2.) 完全放弃数据库中的字段,并在每次检索资源时从 solr 获取每个 total results 总和。 (在我的情况下这是一个非常糟糕的主意,因为用户在登录时使用 GET /api/resource 作为列表从该表中检索 20k 行)
3.) 找到一种方法来确定新的 solr 文档将影响哪些特定的 MySQL 表行,并将更新限制为这些行。这基本上将涉及逆转搜索过程。
解决方案 1 和 3 基本上要求我编写一个脚本,将 solr data_import 和 MySQL 行的 total results 字段更新作为单个进程进行管理。我可以做到这一点,但我可以利用一些见解来了解如何最好地管理这些问题。
那么,您将如何保持一致性?
【问题讨论】:
-
看看Alfresco是如何处理问题的,“最终”和“事务”的一致性,也许会对你有所帮助。
标签: mysql database search solr