2

目前我有一个完全基于 Solr 的系统。这意味着,我将所有数据存储在 Solr(使用 SolrJ)中,不涉及其他数据存储。现在的问题是,我遇到了一些性能问题。我认为,将数据存储在 MySQL 中然后使用例如DataImportHandler将数据与 Solr 同步可能是有意义的。这样我就有了对 Solr 索引的读取操作和 MySQL 中的主要写入操作,然后有时在与 Solr 同步时只有 Solr-Writing 操作。

问题是我预计应该存储数亿个文档,如果 MySQL/Solr 有意义,我现在真的不知道。

还有其他更好的解决方案吗?也许 Master-Solr 用于写作和 Solr-slave 用于阅读?

更新:我忘了说的是,在 schema.xml 更改的情况下,我认为“在 MySQL 中存储数据”解决方案可能很有用,因为这样我就可以重新提交所有数据而无需关心 Solr 的自我- 存储的数据。

4

2 回答 2

6

使用相同的 Solr 实例进行读取和写入是不可取的,因为在写入期间 Solr 上的活动(带有提交和优化)会严重影响读取操作。

主 - 从配置将是更好的方法,主主要用于写入,从属用于只读目的。
从站定期刷新主站的内容。(所以会有一些延迟)
您总是可以通过添加多个从站来扩展。

使用 MySQL 作为 Master-Slave Solr 的持久存储将是最好的方法。
MySQL 提供了一个稳定的数据存储,并且可以保护您免受索引损坏或其他一些会导致数据丢失的问题。
使用 dataimport 处理程序,您可以通过增量更新轻松完成,但最新数据出现在从站上会有更多时间标签。
有了这个,您还可以使用索引交换进行完全刷新。

如果索引变得可维护并且对性能有影响,您可能需要检查 solr 分片。

于 2011-10-04T14:27:20.640 回答
4

我也想过同样的问题:将所有内容存储在 solr 或 stor 中的 mySql 中,并将索引存储在 Solr 中。

我决定采用第二种方式:在 solr 中存储 MySQL 和索引。

原因:MySql 对数据的处理(读写数据)比 Solr 好很多。许多开箱即用的工具也支持/可能从/向 MySql 导入/导出数据。下一点:备份。备份 MySql DB 的方法比 Solr 索引要多得多。

当然,对于全文搜索,Solr 比 MySql 好得多。所以我决定,每个人都应该在他最了解的地方工作。供您参考:我说的是中等索引:数百万个文档的 4GB。

//编辑:不要忘记,Lucene 中的某些功能需要盯着数据(不仅是索引),比如突出显示。如果需要,必须将文档存储在 solr(附加)中。另一种方法是在客户端实现这些功能。(我是这样做的)

于 2011-10-04T16:07:11.417 回答