【问题标题】:Solr Data Import Handler (DIH) - MySQL Import PerformanceSolr 数据导入处理程序 (DIH) - MySQL 导入性能
【发布时间】:2016-02-17 05:50:17
【问题描述】:

我有一个包含 400 万个产品的 MySQL 数据库,我使用 DIH 将其导入到 Solr 中,以便我可以执行详细的搜索。然而数据关系意味着我实际上请求了超过 400 万条记录(例如,一种产品可能有多种颜色等),并且构建索引需要 8 多个小时。

有没有办法在不使用增量查询的情况下提高索引性能?例如,性能瓶颈是由于我使用的多个“加入”条件造成的吗?我可以看到 Solr 中没有可用的索引性能统计信息,因此很难诊断性能瓶颈在哪里。

这是我的 data-config.xml 文件:

谢谢,

<document>
    <entity name="A" pk="id" query="SELECT id AS id_productByStore, id_product, id_store, ... FROM A">
        <entity name="B" pk="id" query="SELECT id, cleanTitle, id_brand, ... FROM B WHERE id='${A.id_product}'">
            <entity name="C" pk="id" query="SELECT name, alias FROM C WHERE id ='${B.id_brand}'"></entity>
            <entity name="D" pk="id" query="SELECT name FROM D WHERE id ='${B.id_category}'"></entity>
            <entity name="E" pk="id" query="SELECT gender FROM E WHERE id='${B.id_gender}'" > </entity>
            <entity name="F" pk="id" query="SELECT id_colour FROM F WHERE id_colourSet='${B.id_colourSet}'">
                <entity name="G" pk="id" query="SELECT title FROM G WHERE id='${F.id_colour}'" > </entity>
            </entity>
        </entity>
        <entity name="H" pk="id" query="SELECT name FROM H WHERE id = '${A.id_store}'"></entity>
    </entity>
</document>

【问题讨论】:

    标签: mysql performance solr


    【解决方案1】:

    如果您的 MySQL 数据库和 Solr 服务器不在同一台机器上,您可能会遇到网络问题。我店里的 DB 和 Solr 服务器不在同一台机器上,有时导入速度会慢很多,具体取决于当天发生的情况。

    可能是您最大的贡献者是您的嵌套实体。当 Solr 导入文档时,看起来 Solr 的行为就像嵌套实体是嵌套循环一样。如果您可以使用一系列内连接或右连接在一个查询中将您的列组合在一起,您可能会好多

    我们曾经在我工作的地方使用嵌套实体,而导入可能需要几个小时。我们能够编写一个相当复杂的 MySQL 连接来替换那些嵌套实体。我们的完整导入通常在 10 到 15 分钟的范围内,我们正在提取大约 3 或 400 万条记录。增量在 5 - 10 分钟范围内。即使您不能连接所有列,连接尽可能多的列并在其余部分使用嵌套实体也应该有助于缩短索引时间。

    【讨论】:

    • 感谢您的建议。如果我在我的场景中使用连接,它是一对多的关系,我自然会有重复的数据 - Solr 能够处理这个吗?
    • 只要每个文档的唯一键(在您的 schema.xml 中定义)是真正唯一的,就不会成为问题。我不得不在模式中使用自动生成的 UUID,因为我有重复的 id。如果 id 是重复的,那么具有这些 id 的文档将不会被添加到索引中。它们将在 Solr 管理 UI 上列为“已删除”。
    • 谢谢,我们已经从 8 小时缩短到 30 分钟。杰出的!然而,我们似乎确实对一对多关系存在问题。对于每条记录,我们只得到“多”中的一行。
    • 这可能是我之前提到的重复 id 问题。您可能需要使用复合 id 或 uuid 作为文档的 uniqueKey。如果在完全导入时,Solr 正在处理您期望它处理的所有文档,但并非所有文档都添加到索引中,请检查您的核心的概述页面以查看是否有已删除的文档。如果是这样,您将需要找到另一个 uniqueKey。
    • 您应该考虑使用视图以及视图恰好是嵌套实体的一个不错的替代方案。由于效率低下,DIH 的嵌套实体功能目前几乎无法使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多