【问题标题】:Best way to index database table data in Solr?在 Solr 中索引数据库表数据的最佳方法?
【发布时间】:2012-02-28 01:07:15
【问题描述】:

目前我有一张大约有 100,000 行的表格。我想在 Solr 索引中对该表中的数据进行索引。

所以天真的方法是:

  • 获取所有行
  • 对于每一行:转换为 SolrDocument 并将每个文档添加到请求中
  • 转换所有行后,发布请求

我能想到的这种方法的一些问题是:

  • 将太多数据(整个表的内容)加载到内存中
  • 发布一个大请求

不过,也有一些优点:

  • 对数据库只有一个请求
  • 只有一个向 Solr 发出的 POST 请求

该方法不可扩展,我发现随着表的增长,内存需求和 POST 请求的大小也会随之增长。我可能需要获取n 的行数,处理它们,然后获取下一个n

我想知道是否有人对如何最好地实现这一点有任何建议?

(ps。我确实搜索了该网站,但没有找到任何与此类似的问题。)

谢谢。

【问题讨论】:

  • 我读到过,但这不是直接的 column-to-indexField 映射,应用了一些转换,因此想在代码中执行此操作。
  • DIH 确实支持许多transformers。你也可以写custom transformers。如果可能,我会推荐使用 DIH - 我认为它需要最少的编码,并且比 POST 文档更快。
  • 您的客户端平台是什么?爪哇?

标签: database solr indexing batch-processing


【解决方案1】:

如果您想在一次 POST 所有文档和对每个文档执行一次 POST 之间取得平衡,您可以使用队列来收集文档并运行一个单独的线程,一旦收集到足够的文档就发送文档。这样您就可以管理内存与请求时间的问题。

【讨论】:

    【解决方案2】:

    我使用了 nikhil500 的建议:

    DIH 确实支持许多转换器。您还可以编写自定义转换器。如果可能的话,我会推荐使用 DIH——我认为它需要最少的编码,并且比 POST 文档更快。 – nikhil500 2 月 6 日 17:42

    【讨论】:

      【解决方案3】:

      我曾经不得不将大约 3000 行(每个 5 个字段)从 DB 上传到 Solr。我分别上传了每个文档并进行了一次提交。整个操作只用了几秒钟,但有些上传(3000 次中的 8 次)失败了。

      完美的做法是在提交之前分批上传 50 个。 50可能已经很低了。在进行提交之前,您可以上传多少个文档,有一些建议的限制。这取决于文档的大小。


      但是,这是一次性操作,您可以使用被黑脚本进行监督。 后续操作会让您一次索引 100,000 行吗?或者您可以避免每次操作仅索引几百个更新的文档吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-08
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多