2015-03-31 54 views
0

我和我的團隊希望在我們的項目中使用彈性搜索,但是我們有一個要求,我們不希望爲每個節點使用mysql的本地實例。我們希望使用mysql數據的遠程服務器來存儲彈性搜索服務正在查詢的數據。彈性搜索使用river-jdbc與遠程mysql服務器同步數據

所以這個想法是每次在ES服務器上添加一個新項目本地不添加到本地實例,但在遠程服務器的MySQL(我們認爲在亞馬遜RDS)。對於任何索引的搜索查詢,我們希望ES節點查詢遠程數據庫(在RDS實例上)。

我們嘗試使用具有兩種風味(用於提取數據的河流)和饋線(用於將數據放在RDS實例上)的river-jbdc。但是我們無法使用river-jdbc進行這項工作。

任何人都嘗試類似的東西?或者任何人可以鏈接到一個博客,這是在哪裏做的?

我感謝所有幫助

在此先感謝

回答

1

我們使用simular方法。我們使用Oracle數據庫作爲主數據存儲。

我們使用PLSQL來壓扁/轉換數據。對於初始加載,我們將數據(記錄)添加到「oneshot」表中。數據的更新將被平整/轉換,並在「更新」表中生成記錄。 oneshot和update表將映射到Elasticsearch中的單個索引。

ES的

初始負載:

[Oracle數據庫] --->變平數據(PL-SQL) - > [記錄animal_oneshot_river表,記錄user_oneshot_river表]

的數據將被拉到河邊到例如http://localhost/9200/zoo/animalhttp://localhost/9200/zoo/user

更新

[軟件] ---->更改數據---> [Oracle數據庫] --->變平數據(PL-SQL) - > [記錄到animal_update_river表,記錄到user_upd ate_river表]

更新表還包含更改類型(插入,更新或刪除)。

河wil輪詢更新update_river表並更新Elasticsearch中的數據(我們使用拉)。記錄將在河流處理後被刪除。

Elasticsearch的數據更改不會發送給Oracle。主數據存儲區上的所有更改都將由我們自己的業務邏輯軟件完成。

我們還將數據寫入_spare表(animal_oneshot_river_spare),因爲這樣可以重新加載Elasticsearch而無需停機並且沒有同步問題(我們在重新加載Elasticsearch後切換別名)。

+0

感謝您的幫助@Jasper我們的主要目標是使用river-plugin將數據從elasticsearch索引移動到JDBC數據庫,我認爲這不可能與河流有關。所以我們需要創建一種用我們自己的代碼填充JDBC表的方法。他們使用河來填充elasticsearch的索引 – mastervv 2015-04-01 12:21:27