请教 Es 同步问题

256 天前
 findlisa
场景:菜鸡一枚,我有一个使用 es 的场景,是一个检索系统,检索的要求比较高,关系型数据库无法满足。数据源是外部的 xml 文件,数据量第一次 400w 左右,后续每天会几千的数据增量更新,增量数据也是来源 xml 文件。

我的想法有两个:
方式一,分两个阶段:目前是打算先将文件解析到数据库(已经实现解析到数据库,主表 400w ,关联表 1000w,400w,700w 不等),只同步关键索引字段,检索时拿到主键再通过主键查询从数据库组装数据做详情展示。通过定时任务 update_time 或者触发方式直接调用 es 的 api 将数据同步到 es
目前存在的问题:
1.数据不在一个表里,还需要做一些联表查询,数据处理,再同步到 es ,方便做检索,打算只做一个嵌套索引。系统会做一些更新操作也希望能同步到 es
2.数据一致性保难保证?

方式二,解析文件的时候,直接将数据双写,一边写 mysql ,一边组装后调 es api 写到 es
想到可能存在的问题:
1.如果解析过程其中一个发生异常,是不是得手动处理脏数据
2.这种方式是不是得引入消息 mq ?先写到 mq ,再消费 mq 处理数据后写到 es (我这个数据量这样有必要吗)
3.一次到位好像更方便,系统操作有更新还需要将更新同步到 es

哪个方式好点呢?也稍微了解过 flink ,canal ,但是感觉好像维护困难,我也不知道能不能满足我的需求,因为我们没有专业运维,整进来也是我自己维护,我该怎么办呢,迷茫了,就怕按自己想的方式做后面一堆坑,有没有前辈指导一下
1348 次点击
所在节点    程序员
14 条回复
chenshiforever
256 天前
所有表都丢进 es ,查询用 es 查
findlisa
255 天前
@chenshiforever 不只是单纯查询,还涉及修改呀,或者是涉及哪个字段什么时候更新了由什么更新成什么
julyclyde
255 天前
我觉得需要检讨一下需求和方案
单说技术方案,可能是跟随错误的需求做出来的错误方案

1 数据一致性当然难保证,你这都不是实时更新的
2 双写如果发生事务回滚你咋办?
findlisa
255 天前
@julyclyde 目前呢项目没有产品,我直接和需求对接的,不要求实时一致,但是要保持最终一致,数据对就行😂😂
julyclyde
255 天前
@findlisa 要不你试试,用 mysql slave 协议直接来读数据?
totoro52
255 天前
canal
totoro52
255 天前
我做过你这个需求,用的 canal ,也可以接入 mq ,保证消费
aaaaaaaaaaj
255 天前
@findlisa 我也做过类似的需求,我是先写库,然后再通过脚本,全量和增量写入 ES ,最终数据以数据库为准,数据库有插入或者更新或者删除,就在操作库成功之后再同样操作 ES 。实时性要求不高的话,就慢慢调 ES 接口往 ES 里刷就行,没有运维团队的话,额外引入的中间件越多,自己维护的越麻烦,系统写的也越复杂。
findlisa
255 天前
@totoro52 也是解析 xml 名单?
findlisa
255 天前
@julyclyde 好的这个考虑一下,感谢答复🙏
findlisa
255 天前
canal+mq 是不是一下就多个两个东西
findlisa
255 天前
@totoro52 canal+mq 是不是一下子引入了两个东西,你是先写库,然后再用 canal+mq 同步吗
chenshiforever
233 天前
@findlisa 你这个需求对于 es 来讲是轻量级,数据存到数据库,然后自动同步到 es ,增删改全都会自动同步(新增数据延时几秒钟),查询全用 es 查,所有查询基本 500ms 以内。
findlisa
223 天前
@totoro52 老哥能加个联系方式吗,咨询一些检索问题,可有偿

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1024126

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX