不知道大家如何应对运营以及营销同事的『临时』数据需求,在公司早期的时候,没有专门的BI工程师,其他工程师不够,开发任务紧。于是一次两次还好,多了之后,工程师会很烦,美女妹子的话,写个脚本导出个excel,其他随便给导出个CSV文件,然后没准同事用的是Windows,用Excel打开直接是乱码 😂
当然了,笑归笑,作为一个负责任的工程师 🌚 ,你必须得帮他们解决问题,也得意识到数据对于各个部门的决策的反馈是多么重要,有助于公司的加速成长。退一步说,之后几乎是不用帮着导数据了。(什么?不明白?那。。。解决问题之后就可以约营销妹子了,懂不?
由于这几天在搭日志系统,很自然想到ELK强大的功能,于是进一步想到,能不能把数据库的数据直接同步到elasticsearch,这样的话,他们可以直接到kibana导出数据,或者直接在上门配置好图表,这样就根本不用导出数据了。
由于在公司里面做的是node.js项目,为了同步mongo的数据到elaticssearch,做了几个尝试:
River elasticsearch
mongo-river-elaticsearch
作为elasticsearch的插件,看到很多文章都推荐它,细看了下,通过ES的API配置,还支持filter,但是它不支持最新的elasticsearch/2.3.1,所以直接跳过,如果你的项目中有的话,可以尝试
Mongoosastic
mongoosastic
作为一个mongoose的plugin,需要耦合到系统中去,也需要一些开发,但是可以精确到字段级别,配置更灵活,可以考虑;
Mongo connector
mongo-connector
试了下,配置什么的都挺灵活,关键不用耦合到项目中去,只是我们的mongo数据库中,类型不严格,同步时导致经常报错,主要是类型错误,如果能更灵活一点,到字段级别,就更好了 😎 ;
其实也可以考虑参考mongo connector自己造个轮子
配置参考
Mongo connector配置文件可以参考如下:
{
"mainAddress": "mongodb://localhost:27017/gleeman",
"continueOnError": false,
"oplogFile": "/var/log/mongo-connector/oplog.timestamp",
"noDump": false,
"batchSize": -1,
"verbosity": 0,
"logging": {
"type": "file",
"filename": "/var/log/mongo-connector/mongo-connector.log",
"__format": "%(asctime)s [%(levelname)s] %(name)s:%(lineno)d - %(message)s",
"__rotationWhen": "D",
"__rotationInterval": 1,
"__rotationBackups": 10,
"__type": "syslog",
"__host": "localhost:514"
},
"namespaces": {
"include": [
"db.source1",
"db.source2"
],
"__mapping": {
"db.source1": "db.dest1",
"db.source2": "db.dest2"
}
},
"docManagers": [{
"docManager": "elastic2_doc_manager",
"targetURL": "localhost:9200",
"__bulkSize": 1000,
"__uniqueKey": "_id",
"__autoCommitInterval": null
}]
}