问题:我如何获得"保证提交"使用Apache SOLR,将数据保存到磁盘和可见性同样重要吗?
背景:我们的网站需要高端搜索功能才能进行机器学习,并且还要求保证提交金融交易。我们只想将SOLR作为我们唯一的数据存储区来保持简单,不想要使用另一个数据库。
我似乎无法找到这个问题的任何答案。金融交易的最简单的解决方案似乎是在持久化之后定期查询SOLR以获取记录,但这可能有更长的等待时间或是否有更好的解决方案?
任何人都可以建议一个实现"保证提交的解决方案"与SOLR?
答案 0 :(得分:4)
正如您在邮件列表中被告知的那样,Solr没有交易。如果您从十几个客户端编制索引,并且某个地方发生了提交(autoSoftCommit,对udpate请求的commitWithin,或者来自其中一个客户端的显式提交),那些所有文档的索引所有搜索者都可以看到十几个客户。
使用事务数据库,发送更新的十几个客户端中的每一个都必须发出提交,这只会使该特定客户端所做的更改可见。
Solr通常不会对提交做出任何保证。如果您并行发出10个提交,那么很可能会超过maxWarmingSearchers配置,通常设置为2.这10个提交中的大多数实际上都不会创建新的搜索器,这使得新文档可见。
如果您以永远不会超过maxWarmingSearchers的方式进行手动提交,那么当该提交完成且没有错误时,您可以将其视为所有更改现在都可见的标志。
答案 1 :(得分:3)
答案是Solr 不设计为主数据存储。它的数据结构和索引/检索设计用于其他用例,即使它们表面上看起来都像CRUD。您应该将数据保存在其他位置,然后在Solr中编入索引 - 以便于以后查找的方式。与Elasticsearch和其他面向搜索的软件相同。
如果您必须将这些内容结合起来,请查看在Cassandra或其他类似数据库之上包含Solr的商业产品。
答案 2 :(得分:1)
Solr提供两种类型的提交来保存solr中的数据。
您可以根据需要在solrconfig.xml中配置autoCommit选项。
<autoCommit>
<maxDocs>10000</maxDocs>
<maxTime>1000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
每种方法都有优点和缺点。你可以在Apache Wiki Commits找到更多关于Understanding Transaction Logs, Soft Commit and Commit in SolrCloud的信息,以及关于CloudSolr norm提交的LucidWorks的文章