我和我的团队想在我们的项目中使用弹性搜索,但是我们有一个要求我们不想为每个节点使用mysql的本地实例。我们希望使用mysql数据的远程服务器来存储弹性搜索服务正在查询的数据。
所以这个想法是每次在ES服务器上添加一个新项目本地不是添加到本地实例而是添加到mysql的远程服务器上(我们认为在amazon RDS上)。对于任何索引的搜索查询,我们希望ES节点查询远程数据库(在RDS实例上)。
我们尝试使用带有两种风格的river-jbdc(用于提取数据的河)和馈线(用于在RDS实例上放置数据)。但是我们无法使用river-jdbc。
有人试过类似的东西吗?或者任何人都可以链接到一个博客吗?
我感谢任何帮助
提前致谢
答案 0 :(得分:1)
我们使用类似的方法。我们使用Oracle数据库作为主数据存储区。
我们使用PLSQL来压缩/转换数据。对于初始加载,我们将数据(记录)添加到" oneshot"表。数据的更新将被展平/转换,并在"更新"表。 oneshot和update表将映射到Elasticsearch中的单个索引。
ES的初始加载:
[Oracle DB] --->展平数据(pl sql) - > [记录到animal_oneshot_river表,记录到user_oneshot_river表]
数据将在河边拉到例如http://localhost/9200/zoo/animal和http://localhost/9200/zoo/user)
更新
[软件] ----&gt;更改数据---&gt; [Oracle DB] ---&gt;展平数据(pl sql) - &gt; [记录到animal_update_river表,记录到user_update_river表] < / p>
更新表还包含一种更改(插入,更新或删除)。
the river将轮询update_river表以获取更新并改变Elasticsearch中的数据(我们使用pull)。记录将在河流处理后删除。
Elasticsearch的数据更改不会发送给Oracle。主数据存储区上的所有更改都将由我们自己的业务逻辑软件完成。
我们还将数据写入_spare表(animal_oneshot_river_spare),因为这样可以在不停机和没有同步问题的情况下重新加载Elasticsearch(我们在重新加载Elasticsearch后切换别名)。