2015-03-31 55 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