我有一个包含400万个产品的MySQL数据库,我使用DIH将其导入Solr,以便我可以执行精心搜索。然而,数据关系意味着我实际上要求超过四百万条记录(例如,一种产品可能有许多颜色等),构建索引需要8个多小时。
有没有办法在不使用delta-queries的情况下提高索引的性能?例如,由于多个"加入"而导致的性能瓶颈。我正在使用的条件? 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>
答案 0 :(得分:3)
如果您的MySQL数据库和Solr服务器不在同一台计算机上,您可能会遇到网络问题。我店里的DB和Solr服务器不在同一台机器上,有时导入的速度会慢很多,具体取决于当天的情况。
可能是你最大的贡献者是你的嵌套实体。当Solr导入文档时,似乎Solr的行为就像嵌套实体是嵌套循环一样。如果您可以使用一系列内部或右侧连接在一个查询中将列组合在一起,那么您可能会更好地 。
我们曾经在我工作的地方使用嵌套实体,导入可能需要数小时。我们能够编写一个相当复杂的MySQL连接来替换那些嵌套的实体。我们的全部进口通常在10到15分钟范围内,而我们正在拉动大约3到4百万条记录。 Deltas在5到10分钟范围内。即使您无法加入所有列,尽可能多地加入并使用嵌套实体来帮助您完成索引时间。