2015-08-21 39 views
0

问题:如何使用Apache SOLR获得“保证提交”,将数据保存到磁盘和可见性都同等重要?什么是保证Apache SOLR提交的最佳方法?

背景:我们有一个网站,它需要机器学习的高端搜索功能,并且还需要保证提交金融交易。我们只想将SOLR作为我们唯一的数据存储来保持简单,并且不要想要使用另一个数据库。

我似乎无法找到这个问题的任何答案。对于金融交易来说,最简单的解决方案似乎是在记录被持续后定期查询SOLR,但这可能会有更长的等待时间,或者有更好的解决方案吗?

任何人都可以请建议一个解决方案,以实现与SOLR“保证承诺”?

回答

3

正如您在邮件列表中所告知的,Solr没有交易。如果您从十几个客户端进行索引,并且某个地方发生提交(autoSoftCommit,udpate请求上的commitWithin或来自其中一个客户端的明确提交),则会显示所有由这十几个客户端索引的文档给所有的搜索者。

对于事务数据库,发送更新的十几个客户端中的每一个都必须发出提交,这只会使该特定客户端所做的更改可见。

Solr通常不会对提交进行任何保证。如果您并行发出10个提交,那很可能会超过maxWarmingSearchers配置(通常设置为2)。这10个提交中的大多数实际上并不会创建新的搜索器,这使得新文档可见。

如果以手动方式提交,以至于您永远不会超过maxWarmingSearchers,那么当提交完成时没有错误,您可以将其作为所有更改现在都可见的标志。

0

Solr提供了两种类型的提交来保存solr中的数据。

  • 软提交:软提交保持成Solr数据结构。 Solr在每次软提交后保证文档的可见性。它实际上并不将数据存储到磁盘中。因此,如果Solr实例失败,则无法恢复此信息。
  • 硬提交:每次应用程序索引要solr的数据时,它都可以执行数据的硬提交。硬提交会将数据保存到磁盘中,即使实例出现故障,也可以恢复数据。频繁硬提交的缺点是,solr必须经常执行段合并,这是CPU密集型的。

您可以根据需要在solrconfig.xml中配置autoCommit选项。

<autoCommit> 
    <maxDocs>10000</maxDocs> 
    <maxTime>1000</maxTime> 
    <openSearcher>false</openSearcher> 
</autoCommit> 

每种方法都有优点和缺点。你可以找到Apache Wiki Commits多的信息从LucidWorks在提交的CloudSolr Understanding Transaction Logs, Soft Commit and Commit in SolrCloud

+0

是的我理解软和硬提交之间的区别,但是这不能回答我如何在应用层级保证提交的问题。就像我们将如何处理与SOLR的财务交易。我希望得到一个人用来实现MongoDB中的两阶段提交的模式。 – hajime

2

文章的答案是,Solr的是设计为主要数据存储。其数据结构和为其他用例设计的索引/检索,即使它们看起来都像表面上的CRUD一样。你应该把你的数据保存到其他地方,然后在Solr中进行索引 - 以便于查找的方式 - 稍后。与Elasticsearch和其他面向搜索的软件一样。

如果您绝对必须将这些东西结合起来,请查看包含Cassandra或其他类似数据库之上的Solr的商业产品。

+0

我的问题是如何保证SOLR中的提交,而不是SOLR是否适用于初级。 MongoDB也不保证提交,但可以使用两阶段提交和mongos日志文件来保证提交。 SOLR可以完全用作主数据存储... Guardian.uk将其用作主数据库。如果您看到SOLR创始人的一些演示文稿。您可以看到他们推荐将SOLR用作竞争NoSql数据库的数据存储。 – hajime

+0

这里是演示文稿的链接https://www.youtube.com/watch?v=WYVM6Wz-XTw – hajime

+0

我认为“推荐”在这里太强大了。人们普遍认为,Solr *将*用于某些NoSQL数据需求......但正如人们一直告诉你的,它的核心是搜索引擎,而不是数据库。 Solr无法为金融交易提供所需的担保。 – elyograg

相关问题