由于实现系统中要增加搜索引擎,故此想到了用elasticsearch搜索服务框架来实现,但是对于系统中的业务要求,系统服务需要存入关系型数据库,且已经存储大量数据在数据库中,因此涉及到数据同步到elasticsearch(以下简称ES)。
ES是一套独立的restful搜索服务框架,所有搜索数据单独存储在ES中,并进行分词、索引等,所以需要单独的数据导入到ES系统中。
因此想到了一下数据同步的方案(说的不对,请指教):
首先数据同步就是将来源数据(数据库,文件,内存等等)进行备份(备份删除)到目标存储中。
1.数据源------管道(logstash)------- 目标存储
该方案通用型强,但是对于来源服务器会造成增加查询压力,耗费性能,另外数据的实时性备份难以保证
2.数据 双写: 在进行数据写入数据源时,同时写入备份库中
该方案耦合性较大,且所有涉及到新建和跟新数据的地方都需要执行双写程序,而且双写的成功性成为了该方案的限制。
3.通过数据源的跟新日志信息来实现同步备份。
该方案算是比较好的一种解决方案,通过统计日志来实现同步备份,既减少了来源服务的压力,也能较快的对更新数据做出响应。但是实现较为复杂。
4.通过监控数据源的增删改查(curd)来触发不同的动作,进行数据的备份。
该方案数据一种触发机制,但是对于该方案的具体实现,需要更加了解数据来源的的底层实现机制,不太适合为仅仅实现同步数据而去做另外一件事(有点背道而驰的感觉),另外监控和触动更需要队列来去维持该功能的实现,实现难度较大。
综上所述:
方案1和方案3的实施性存在可能,考虑各自优缺点进行方案的具体实施。