基于nodejs将mongodb的数据实时同步到elasticsearch

2020-05-29 00:00:00 数据 安装 配置文件 同步 值为

一、前言

因公司需要选用elasticsearch做全文检索,持久化存储选用的是mongodb,但是希望mongodb里面的数据发生改变可以实时同步到elasticsearch上,一开始主要使用elasticsearch v1.7.2的版本,mongo-river可以搞定这个问题。随着elasticsearch的升级,发现elasticsearch已经放弃了mongo-river,咋整......Google之后发现一神器mongo-connector,国外大神用python写的工具而且MongoDB官网也极力推荐使用。But,我们需要把文档中的附件信息也同步到elasticsearch上,mongo-connector对附件同步支持的不是很好。能不能有个nodejs版本的数据同步?GitHub上发现一个大神写的node-elasticsearch-sync很好用,但是功能太简单了,不支持复杂的数据筛选,也不支持附件同步。活人不能被尿憋死,参考node-elasticsearch-sync自己写了一个同步工具node-mongodb-es-connector。

二、准备工作

2.1 安装mongodb

安装mongodb可以去官网下载:MongoDB for GIANT Ideas

PS:关于如何搭建mongodb replica集群:

MongoDB 搭建副本集 - 悦光阴 - 博客园

2.2 安装elasticsearch

安装elasticsearch可以去官网下载:The Elastic Stack Download · Get Started in Minutes

PS:关于elasticsearch-head、kibana、logstash等相关安装请自己google吧

2.3 安装nodejs

安装nodejs可以去官网下载:Node.js 中文网

PS:别忘记安装npm,如何安装请自己google吧

以上是使用node-mongodb-es-connector的前提

2.4 node-mongodb-es-connector下载地址

github: zhr85210078/node-mongodb-es-connector

npm: es-mongodb-sync


三、文件结构

├── crawlerDataConfig    项目构建配置(这里添加你要同步数据的配置)
│       ├── mycarts.json  一个index一个配置文件(需要自己增加或者修改的配置文件,这个文件只是提供了一个例子,不用可以删除)    
│       └── ……    
├── lib  
│   ├── pool
│   │   ├──  elasticsearchPool.js  elasticsearch连接池
│   │   ├──  mongoDBPool.js      mongodb连接池
│   ├── promise
│   │   ├──  elasticsearchPromise.js elasticsearch方法类(增删改查)  
│   │   ├──  mongoPromise.js      mongodb方法类(增删改查)
│   ├── util
│   │   ├──  fsWatcher.js        配置文件监控类(主要监控crawlerDataConfig目录里面的配置文件)
│   │   ├──  logger.js          日志类
│   │   ├──  oplogFactory.js      mongo-oplog触发事件之后的执行方法(增删改)
│   │   ├──  tail.js           监听mongodb数据是否发生变化 
│   │   ├──  util.js                  工具类
│   ├── main.js                        主方法(主要是次启动立刻同步mongodb里面的数据到elasticsearch)
├── logs
│       ├── logger-2018-03-23.log     同步数据打印日志
│       └── ……    
├── test
│   ├── img
│   │    ├── elasticsearch.jpg      图片不解释
│   │    ├── mongoDB.jpg        图片不解释
│   │    └── structure.jpg        图片不解释
│   └── test.js              测试类(啥也没写)
├── app.js       启动文件               
├── index.js      接口文件(只提供配置文件的增删改)
├── package-lock.json 
├── package.json
├── ReadMe.md      英文文档(markdown)
├── README.zh-CN.md  中文文档(markdown)
└── LICENSE

相关文章