网上都属elasticsearch-jdbc,可是,显然我的mysql与elasticsearch并不统一。
我是用python从mysql读出来,再处理过后,写入文件,然后用
curl -XPOST 'localhost:9200/_bulk?pretty' -H 'Content-Type: application/json' --data-binary @filename
导入es的。请问什么办法可以做到增量更新?
谢谢大家
我是用python从mysql读出来,再处理过后,写入文件,然后用
curl -XPOST 'localhost:9200/_bulk?pretty' -H 'Content-Type: application/json' --data-binary @filename
导入es的。请问什么办法可以做到增量更新?
谢谢大家
3 个回复
occultskyrong - 程序猿
赞同来自: jnuc093
增量需要具备两点:
1、一个能判断出某个记录被修改过的标记,version或者timestamp。
我是用的updatedAt,每次某条记录更新,这个updateAt会自动更新,记录更新时的时间戳。
2、完整的数据结构,你的每条数据都是完整的,不要用update,直接用bulk的 index方式,不判断此条记录是否存在,直接抹除已有数据。。。
其他的就是逻辑控制了。
我是在redis里面存储一个时间标记,然后代码全局执行两个定时任务,每30秒根据updatedAt查询下需要增量的数据,使用bulk向es里面刷数据。
中间有些复杂的判断,比如同步的时候要记录一个标记,下一次定时任务启动的时候查看是否已有标记。
同时增量的数据量过大,应该分拆bulk。。
还有个解决方案就是 kafka logstash
通过kafka收集数据,扔给logstash过滤处理,pipeline给elasticsearch。。
这个你自己搜下相关资料。。。
补充:现在用的是jdbc的方式,发现这个jdbc非常喝内存,而且莫名其妙崩溃。。。只能用shell脚本检查进程。。gg了重启。。。很蛋疼。。还是自己写逻辑靠谱。。因为SQL比较复杂。。。
luyee2010
赞同来自: occultskyrong
but,go-mysql-elasticsearch貌似必须有pk字段
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自: