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

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

我们尝试使用具有两种风格的river-jbdc(用于提取数据的河流)和供料器(用于将数据放在RDS实例上)。但是我们无法使其与river-jdbc一起使用。

有人尝试类似的东西吗?还是任何人都可以链接到创建此博客的一个博客?

感谢您的帮助

提前致谢

最佳答案

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

我们使用PLSQL来展平/转换数据。对于初始加载,我们将数据(记录)添加到“oneshot”表中。数据更新将被展平/转换,并在“更新”表中产生记录。 oneshot和更新表将映射到Elasticsearch中的单个索引。

ES的初始负载:

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

数据将被河流拉到http://localhost/9200/zoo/animalhttp://localhost/9200/zoo/user)

更新

[软件] ---->更改数据---> [Oracle DB] --->展平数据(pl sql)-> [记录到animal_update_river表,记录到user_update_river表]

更新表还包含一种更改类型(插入,更新或删除)。

河将轮询update_river表以获取更新,并在Elasticsearch中对数据进行突变(我们使用拉)。记录将在河流处理后被删除。

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

我们还将数据写入_spare表(animal_oneshot_river_spare),因为这样可以重新加载Elasticsearch而不会造成停机和同步问题(在重新加载Elasticsearch之后切换别名)。

关于mysql - 使用river-jdbc进行 Elasticsearch 以与远程mysql服务器同步数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29371955/

10-12 14:36
查看更多