基于nodejs将mongodb的数据实时同步到elasticsearch
一、前言
因公司需要选用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
相关文章