2017-04-03 45 views
0

我有數據源提供的文件的最新快照(而不是差異)。我希望同樣的快照能反映一下搜索的彈性搜索。我有以下選擇做同樣的:刷新數據:批量更新/去除VS索引從零開始別名爲

  1. 取一切從彈性(使用滾動),並計算內存和批量更新(索引行動大宗原料藥)同樣存在 - 將需要計劃舉行兩次儘可能多的內存來計算差異
  2. 批量更新(索引行動大宗原料藥)一切從快照,獲取該沒有更新爲彈性(與UID的過濾器和最近更新的搜索API)的一切,使軟另一批量請求刪除DIFF(與更新動作大宗原料藥) - 略好於1)我們並不需要從彈性下載大量的數據,只是DIFF
  3. 保持彈性兩個指標有一個別名,一個作爲當前「可搜索」副本,另一個作爲更新的備用。每當有新的快照進入時,我們可以使用備用的[delete all documents][1],將快照中的所有內容批量更新爲待機狀態,並翻轉別名(alias API - 原子性)以更新一個,以便最新的被搜索。

注:DIFF應該是非常小的。

怎樣的方法2在性能和成本的彈性空間效率方面的做法比較3?

+0

多少記錄/文件,我們談論關於? – Val

+0

大約有30萬條記錄,但我真的很想了解,如果數據按比例放大,比如說達到100k,性能會受到怎樣的影響。 – Tweety

回答

0

選項1顯然是至少高性能無論在存儲器要求和計算需求方面。您需要1)查詢主要數據源中的所有記錄,2)查詢Elasticsearch中的所有記錄,3)找出diff,4)批量更新Elasticsearch中的所有記錄。隨着時間的推移,您的主要數據源將始終包含大致相同數量的記錄,但ES中的記錄數量會增加,因爲您的快照中有新記錄不在Elasticsearch中,並且還需要從中刪除記錄Elasticsearch,這意味着上面的第2步每次都會檢索越來越多的文檔。

對於選項2,您需要1)查詢主數據源中的所有記錄,2)批量索引它們,3)然後查詢Elasticsearch以查找未更新的記錄,4)在Elasticsearch中批量更新它們再次。這不是我的偏好,其原因與選項1相同,即您的Elasticsearch索引將繼續增長。

在我看來,選項3是最接近理想的解決方案。我建議每次需要爲快照編制索引時,都要創建一個新索引,對快照數據進行批量索引,並在完成時將searchable別名翻轉到新索引。你也可以刪除舊的索引,因爲你不再使用它。無需執行任何差異,批量刪除或批量更新任何內容。1

  • 天:
    • 索引1(別名:searchable
  • 第2天:
    • 索引1(可以刪除)
    • 索引2(別名:searchable
  • 第3天:
    • 指數1(可以刪除)
    • 索引2(可以刪除)
    • INDEX3(別名:searchable
+0

數據的增長不應該發生,因爲我們可以指定用於覆蓋條目的uid。 – Tweety

+0

不過,我描述的選項應該提供最佳性能。 – Val

+0

每次刷新時都沒有創建新索引的缺點嗎? – Tweety