在 Solr 中索引数据库表数据的最佳方法?
Posted
技术标签:
【中文标题】在 Solr 中索引数据库表数据的最佳方法?【英文标题】:Best way to index database table data in Solr? 【发布时间】:2012-02-28 01:07:15 【问题描述】:目前我有一张大约有 100,000 行的表格。我想在 Solr 索引中对该表中的数据进行索引。
所以天真的方法是:
获取所有行 对于每一行:转换为 SolrDocument 并将每个文档添加到请求中 转换所有行后,发布请求我能想到的这种方法的一些问题是:
将太多数据(整个表的内容)加载到内存中 发布一个大请求不过,也有一些优点:
对数据库只有一个请求 只有一个向 Solr 发出的 POST 请求该方法不可扩展,我发现随着表的增长,内存需求和 POST 请求的大小也会随之增长。我可能需要获取n
的行数,处理它们,然后获取下一个n
?
我想知道是否有人对如何最好地实现这一点有任何建议?
(ps。我确实搜索了该网站,但没有找到任何与此类似的问题。)
谢谢。
【问题讨论】:
DataImportHandler ? 我读到过,但这不是直接的 column-to-indexField 映射,应用了一些转换,因此想在代码中执行此操作。 DIH 确实支持许多transformers。你也可以写custom transformers。如果可能,我会推荐使用 DIH - 我认为它需要最少的编码,并且比 POST 文档更快。 您的客户端平台是什么?爪哇? 【参考方案1】:如果您想在一次 POST 所有文档和对每个文档执行一次 POST 之间取得平衡,您可以使用队列来收集文档并运行一个单独的线程,一旦收集到足够的文档就发送文档。这样您就可以管理内存与请求时间的问题。
【讨论】:
【参考方案2】:我使用了 nikhil500 的建议:
DIH 确实支持许多转换器。您还可以编写自定义转换器。如果可能的话,我会推荐使用 DIH——我认为它需要最少的编码,并且比 POST 文档更快。 – nikhil500 2 月 6 日 17:42
【讨论】:
【参考方案3】:我曾经不得不将大约 3000 行(每个 5 个字段)从 DB 上传到 Solr。我分别上传了每个文档并进行了一次提交。整个操作只用了几秒钟,但有些上传(3000 次中的 8 次)失败了。
完美的做法是在提交之前分批上传 50 个。 50可能已经很低了。在进行提交之前,您可以上传多少个文档,有一些建议的限制。这取决于文档的大小。
但是,这是一次性操作,您可以使用被黑脚本进行监督。 后续操作会让您一次索引 100,000 行吗?或者您可以避免每次操作仅索引几百个更新的文档吗?
【讨论】:
以上是关于在 Solr 中索引数据库表数据的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章