将数据从Oracle /关系表索引到弹性搜索的更好方法是什么?

时间:2014-12-15 14:20:41

标签: java oracle elasticsearch relational-database elasticsearch-plugin

有哪些选项可以将大数据从Oracle数据库索引到弹性搜索群集?要求是将一次300Million记录索引到多个索引中,并且每天还有大约1百万次更改的增量更新。

我已尝试过弹性搜索 river / feeder 的JDBC插件,两者似乎都在内部运行或需要在本地运行弹性搜索实例。如果有更好的选择将弹性搜索索引器作为独立作业(可能是基于java的)运行,请告诉我。任何建议都会非常有帮助。 感谢。

2 个答案:

答案 0 :(得分:9)

我们使用ES作为报告数据库,当新记录写入SQL时,我们采取以下操作将它们引入ES:

  1. 将主键写入队列(我们使用rabbitMQ)
  2. Rabbit获取主键(有时间)并查询关系数据库以获取所需信息,然后将数据写入ES
  3. 此过程非常有效,因为它可以处理新数据和旧数据。对于旧数据,只需编写一个快速脚本,将300M主键写入兔子,然后就完成了!

答案 1 :(得分:5)

有很多集成选项 - 我已经列出了一些可以提供一些想法的解决方案,但解决方案实际上将取决于您的具体资源和要求。

  1. Oracle Golden Gate将查看Oracle数据库事务日志并将其实时提供给ES。
  2. ETL例如Oracle Data Integrator可以按计划运行并从数据库中提取数据,转换并发送给ES。
  3. 在Oracle DB中创建触发器,以便可以使用存储过程将数据更新写入ES。或者使用触发器将标志写入"更改"表,某些外部进程(例如Java应用程序)监视并使用它从Oracle DB中提取数据。
  4. 获取写入Oracle DB的应用程序也可以提供ES。理想情况下,您的应用程序和Oracle数据库应该松散耦合 - 您是否有可以将消息提供给ES和Oracle的集成平台?