1.项目中如何处理 es 和 mysql 之间的数据同步问题? 2.把数据都丢在 es 上的方案可不可行,不存入 db 中 3.数据涉及的多表 join 查询的关系,在 es 中要怎么体现
情况是单表,一天新增的数量大概是 30w 左右,放在 db 查询都变得挺卡的,或者有没有什么其他方案!!!
1
Hyseen 2020-10-14 09:48:59 +08:00
使用中间件自动从 MySQL 同步到 ES 中
|
2
ben1024 2020-10-14 09:49:07 +08:00
1.同步和异步
利用接口和 canal 2.可行 3.设计结构时直接一个片关联 30w 放 mongodb 也可以,做热切也行 |
3
yishengyongyi 2020-10-14 09:51:05 +08:00
中间件接收到数据操作记录后,同时操作 mysql 和 es,查询用 es,MySQL 、
做备份。数据设计多表 join 不适合 es |
4
ArJun 2020-10-14 09:58:55 +08:00
mysql 数据放到 es 主要还是为了性能吧
|
5
coderxy 2020-10-14 10:02:08 +08:00 1
|
6
Ministor 2020-10-14 10:14:56 +08:00
2l 正解,利用 canal 去发到消息,异步写入到 es/hbase 中
es 和 hbase 作为异构数据结构,本身就是准实时场景,做到强一致性不太可能 es 建议做一些业务展示,不做业务逻辑处理,做该做的搜索的事情 |
7
Morriaty 2020-10-14 10:18:33 +08:00
1. 队列多写
2. 不合适,es 不支持事务 3. 索引时就 join 好写入 es,不要把这种事放在搜索时,es 要的就是快快快! |
8
dong568789 2020-10-14 10:23:50 +08:00
1 、alibaba/canal 解析 mysql-bin
2 、数据可以存在 db 中,可做分表 3 、数据同步到 es,尽量冗余(涉及 join 的) |
9
laminux29 2020-10-14 10:44:50 +08:00
ES 的核心是 [分词] 与 [提前计算 + 流式计算] 建议先把这两个核心的基本概念与原理弄清楚,不然,很多朋友盲目上了 ES 后,发现搜不到东西,或者发现某些处理步骤的性能极差,那就尴尬了。
了解完这两个核心概念后, 1.ES 与 Mysql 如何同步 首先,你去谷歌里百度一下同步的具体实现方法。也就是能够搭建这套环境,并能实现通过配置、通过代码,完成它们之间的简单数据同步。 其次,选择同步策略,比如即时同步、大批量的缓冲式同步、不影响白天生产的晚上偷偷同步策略等等,这些策略的选择与组合,要根据你们的实际情况进行。 接着,看看性能能不能达标,不能的话,分析一下瓶颈在哪。有钱烧钱,没钱换人。 最后,安全与备份做一下。 2.数据能不能全丢在 ES 上,你首先得根据前文,了解 ES 那两个核心特性,再根据你们的业务,自己来做判断。举 3 个例子: 假设你们的业务,是让药店根据固定配方词汇,在药库进行药品查询,那么这种业务可以尝试把数据全丢在 ES 上。 但如果你们的业务,是要多维度、不同关键字、高实时性、完全匹配地对日志进行查询,那么根据 ES 的特性,你们就不能把数据全丢在 ES 上了。不然,mysql 这边数据更改后,发现 es 那边半天查不出新数据;或者就算数据同步到 es 后,根据新增关键词查不出新增数据,这种情况也不是大概不会没有可能会不发生的。 3.30w 数据就卡了,建议你们先对 db 、系统、硬件设备,做一个性能瓶颈分析。 |
10
xuanbg 2020-10-14 11:06:53 +08:00
双写,ES 用队列写。
|
11
haosamax 2020-10-14 11:09:03 +08:00
借楼,请教个问题,有没有 oracle 同步 ES 的方案
|
13
sadfQED2 2020-10-14 12:45:57 +08:00 via Android
1.代码层面双写,mysql binlog 同步
2.可行,但是很坑,es 查询有刷片时间 3.es 里面存成一份数据 目前我们 es 2 亿+数据,存的是全世界的 poi 数据,用 es 主要是为了全文索引,通过关键词搜索 |
14
goodboy95 2020-10-14 16:41:52 +08:00
1. 我用的 logstash 设置的定期同步,即时同步还没搞,查近期数据还是走 db 。
2. 应该可行吧,反正我 db 里的旧数据做了个备份之后就全删了。不过我这个是小规模,大规模的话不太确定。 3. 存到 es 的时候就按照连接之后的大表去存。 |
15
wangyzj 2020-10-14 18:27:51 +08:00
核心还得看你查询的逻辑是什么
复杂关系 join 放 es 也够呛 |
16
Jackeriss 2020-10-14 18:46:39 +08:00 via iPhone
实时性不高的话 es 也可以定时批量写,只要记录下上次写到哪了就行,队列也可以,还可以考虑用 set,这样可以去除重复操作。
|
17
Jackeriss 2020-10-14 18:50:10 +08:00 via iPhone
不能只用 es,es 和 MySQL 是互补的关系,就像 redis 和 MySQL 一样
|
18
biubiubiuao 2020-10-14 18:56:37 +08:00
kafka
|
19
yuudachiPoi 2020-10-14 19:34:31 +08:00
通过 canal 做 mysql 和 es 之间的增量同步。
数据放在 es 上不可行,这不是 es 该干的事情。 尽量使用宽表同步 es,es 上不要做类似 join 的工作。 |
20
huayumo 2020-10-14 21:43:09 +08:00
我自己的业务网站是 es 只拿来做搜索,因为都是文章这类的,比较好处理,首次上线,全量同步原有的数据,
之后的更新也是 mysql+es 同时更新.因为只做搜索功能,需求比较简单,搜索业务也不是很重要, 你说的涉及多表的话,业务数据不敏感的话,建议提取相关的字段直接存 es,要么提取多表关系,再进 mysql 查一遍,组合一下,只要 mysql 有索引,感觉问题不大. 其实我水平比较水,仅供参考,不用回复,谢谢 |
21
ofooo 2020-10-15 11:21:09 +08:00
我就单用 es 了,数据同步太麻烦也没必要。现在的业务必须有搜索功能,没有搜索就是废材。
而且 es 数据存储上限应该和 mysql 差不多吧,应该也没什么硬伤 不过我实际数据很少,仅供参考 |