2012-02-06 181 views
5

我現在有一張大約100,000行的表格。我想索引Solr索引中的表中的數據。Solr中索引數據庫表數據的最佳方法是什麼?

所以天真的方法是:

  • 獲取所有的行
  • 對於每一行:轉換爲SolrDocument每個文檔添加到一個請求
  • 一旦所有的行被轉換然後交請求

一些問題,這個方法,我能想到的是:

  • 加載太多的數據(整個表的內容)到內存中
  • 發佈一個大的要求

然而,一些優勢:

  • 只有一個請求到數據庫
  • Solr只有一個POST請求

該方法不可擴展,我看到自從隨着表的增長,內存要求和POST請求的大小也會增加。我需要或許採取n行數,處理它們,然後採取下一個n

我在想如果任何人有任何關於如何最好地實現這個建議?

(PS。我沒有搜索的網站,但我沒有發現類似於這樣的問題。)

感謝。

+0

[DataImportHandler](http://wiki.apache.org/solr/DataImportHandler)? – nikhil500 2012-02-06 15:25:14

+0

我讀到了這個,但它不是一個直接的列到indexField的映射,有一個應用的轉換,因此希望在代碼中做到這一點。 – C0deAttack 2012-02-06 17:34:54

+2

DIH支持許多[變形金剛](http://wiki.apache.org/solr/DataImportHandler#Transformer)。你也可以編寫[自定義轉換器](http://wiki.apache.org/solr/DIHCustomTransformer)。如果可能的話,我會推薦使用DIH - 我認爲它將需要最少量的編碼,並且比發佈文檔更快。 – nikhil500 2012-02-06 17:42:35

回答

1

我曾經建議從nikhil500:

諦也支持許多變壓器。您也可以編寫自定義變壓器。如果可能的話,我會推薦使用DIH - 我認爲它將需要最少量的編碼,並且比發佈文檔更快。 - nikhil500 Feb 6 at 17:42

1

如果你想一次發佈所有文檔,做每個文檔一個POST你可以使用一個隊列,收集文件和運行一個單獨的線程,一旦你收集到足夠的發送文檔之間進行平衡。這樣你可以管理內存與請求時間問題。

0

我曾經上傳〜從DB 3000行(各5場)到Solr。我跑了分開上傳每個文件,並做了一個提交。整個操作只花了幾秒鐘,但有些上傳(3000箇中的8個)失敗了。

什麼工作完全是在50批次commiting之前上傳。 50可能非常低。建議限制在提交之前可以上載​​多少文檔。這取決於文件的大小。


不過,這是一個一次性的操作,您可以使用腳本砍死監督。將一個隨後操作讓你的索引100,000行一次?或者,您是否可以在每次操作時只索引幾百個更新文檔?

相關問題