2017-09-07 247 views
2

我有一個沒有連接的表與MySQL數據庫〜100百萬行。這些項目可以更新或刪除,也可以將新記錄定期保存到MySQL DB中。每一分鐘。我怎樣才能達到Elasticsearch當數據更新,添加或刪除時,如何使用ES + Logstash + MySQL實現實時索引更新?

更新索引

when data is updated/changed/deleted in MySQL DB?

Actualizing數據是必須爲我保持最新與MySQL這是非常重要的。可能嗎?謝謝。

另外我試過解決方案schedule => "* * * * *" and updated_at > :sql_last_value但它是非常緩慢的。

+0

這個答案可能會幫助:https://stackoverflow.com/questions/34477095/elasticsearch-replication-of-other-system-data/34477639#34477639 – Val

+0

對於您提到的大小的表格,將時間框架放在「最新」規格的範圍內會很有幫助。你能指定這個嗎? ElasticSearch在MySQL之後很少會超過60秒,並且永遠不會超過300秒?如果你有這樣的規格,你可以實施和測試它。 –

+0

@ O.Jones在「最新」我的意思是儘可能快,趨於零。一次可以更新約50k行。我想在理想情況下實時,但我知道這是不可能的。我想盡可能保持我的數據在Elastic中相關。我用'updated_at>:sql_last_value'嘗試了這個解決方案,但是即使MySQL中的索引有updated_at,它也很慢。 – Rammgarot

回答

2

感謝所有人的回覆,我已經找到了解決方案,感謝Aaron Mildenstein在discuss.elastic.co上的幫助。 See the thread here.

答案:

爲了實現這一點,你需要一個單獨的進程,監視二進制日誌記錄,並啓動更新的東西Elasticsearch結束。 Elastic目前沒有提供任何工具來完成這個工作,所以你必須找到一個人開源,或者自己寫。

爲了解析binlogs我用這個LIB:https://github.com/siddontang/go-mysql-elasticsearch

3

不知道「非常慢」是什麼意思,但是如果是關於採樣頻率,那麼表達式:schedule => "/2 * * * * *"例如將每兩秒鐘執行一次在.config文件中的語句變量中定義的查詢。

+0

這正是我一直在尋找的! –