Elastic Search 使用 river-jdbc 与远程 mysql 服务器同步数据

Elastic Search using river-jdbc to sync data with remote mysql server

我和我的团队想在我们的项目中使用弹性搜索,但是我们有一个要求,我们不想为每个节点使用 mysql 的本地实例。我们想使用 mysql 数据的远程服务器来存储弹性搜索服务正在查询的数据。

所以这个想法是每次在本地 ES 服务器上添加新项目时,不是添加到本地实例,而是添加到 mysql 的远程服务器(我们认为是在亚马逊 RDS 上)。对于任何索引的搜索查询,我们希望 ES 节点查询远程数据库(在 RDS 实例上)。

我们尝试使用两种风格的 river-jbdc(用于提取数据的 river)和 feeder(用于将数据放在 RDS 实例上)。但是我们无法使用 river-jdbc 。

有人尝试过类似的东西吗?或者任何人都可以链接到制作此内容的博客吗?

感谢任何帮助

提前致谢

我们使用模拟方法。我们使用 Oracle 数据库作为主要数据存储。

我们使用 PLSQL 来 flatten/convert 数据。对于初始加载,我们将数据(记录)添加到 "oneshot" table。数据的更新将被 flatten/converted 并导致 "update" table 中的记录。 oneshot 和更新 table 将映射到 Elasticsearch 中的单个索引。

ES 的初始负载:

[Oracle DB]--->扁平化数据(pl sql)-->[记录到animal_oneshot_river table,记录到user_oneshot_river table]

数据会被河流拉到例如http://localhost/9200/zoo/animal and http://localhost/9200/zoo/user)

更新

[软件]---->更改数据--->[Oracle DB]--->扁平化数据(pl sql)-->[记录到animal_update_river table,记录到user_update_rivertable]

更新 tables 还包含一种更改(插入、更新或删除)。

The river 将轮询 update_river tables 以更新和改变 Elasticsearch 中的数据(我们使用拉取)。河道处理后记录将被删除

对 Elasticsearch 的数据更改不会发送到 Oracle。主数据存储上的所有更改都将由我们自己的业务逻辑软件完成。

我们还将数据写入 _spare tables (animal_oneshot_river_spare),因为这样可以在不停机且不存在同步问题的情况下重新加载 Elasticsearch(我们在重新加载 Elasticsearch 后切换别名)。