elasticsearch,data-synchronization,Java,Database,Oracle,elasticsearch,Data Synchronization" /> elasticsearch,data-synchronization,Java,Database,Oracle,elasticsearch,Data Synchronization" />

Java 使Oracle数据与ElasticSearch群集保持同步

Java 使Oracle数据与ElasticSearch群集保持同步,java,database,oracle,elasticsearch,data-synchronization,Java,Database,Oracle,elasticsearch,Data Synchronization,我将Oracle数据(由各种系统更新)同步到ElasticSearch的解决方案是在数据库表中使用触发器(插入/更新),并将事件条目[表名和主键]插入事件表 监听器获取事件,锁定事件,从Oracle数据库获取数据到索引,然后准备JSON文档索引到elasticsearch,并使用批量API对其进行索引 我被要求重新设计它,如下所示 侦听事件(Oracle中的插入/更新) 将事件发布到SQS SQS侦听器使用web服务从Oracle数据库获取记录 Web服务应该有API来返回给定主键的记录,并对

我将Oracle数据(由各种系统更新)同步到ElasticSearch的解决方案是在数据库表中使用触发器(插入/更新),并将事件条目[表名和主键]插入事件表

监听器获取事件,锁定事件,从Oracle数据库获取数据到索引,然后准备JSON文档索引到elasticsearch,并使用批量API对其进行索引

我被要求重新设计它,如下所示

  • 侦听事件(Oracle中的插入/更新)
  • 将事件发布到SQS
  • SQS侦听器使用web服务从Oracle数据库获取记录
  • Web服务应该有API来返回给定主键的记录,并对没有主键的查询提供批处理支持(从相关表中获取记录-准备嵌套文档)
  • SQS listener在获取给定事件的所有必要记录后,准备JSON文档进行索引,并使用批量API在elasticsearch中对其进行索引

我不认为第二种方法是适用于近实时应用程序的正确解决方案,请帮助我了解这种方法的好处。

我将研究如何在ES中使用批量操作。也就是说,等待一段时间(例如30秒),从Oracle收集所有事件,创建一个或多个批,并通过批量发送到ES。但我认为这要视情况而定。您最初的方法提到“锁定它”,因此存在与事务相关的问题……是的,索引将通过批量API进行。锁定(使用单独的列)事件以防止其他侦听器处理同一事件。