有一张用户标签表,一个用户一个标签一条数据,现在这张表超过 2 亿了,需要做分库分表,怎么分,既能满足用用户查询标签,也能用标签查询用户,以及数据结构、整体架构上能否优化,求助各位大佬。
![]() | 1 nine99 2018-08-07 16:10:28 +08:00 搞两份,一份按用户分,一份按标签分。或者看下你业务按哪个查比较多,就怎么分 |
2 alamaya OP @nine99 主要是存在一个数据量不均衡的问题,有的标签用户很多,有的标签又没啥用户,所以还是只能按用户分,随着数据量的增长,可能还是会存在单表过大的问题。 按用户分的话,分表的张数如何考虑,而且也确实有通过标签查用户的需求,虽然场景不多,这个查询怎么做好。 或者说有没有比现有一个用户一个标签一条数据这样的数据存储方式更优化的数据结构? |
![]() | 3 owenliang 2018-08-07 16:26:28 +08:00 按用户分 mysql。 然后数据打到 ES/Mongo 中做旁路。 |
![]() | 5 owenliang 2018-08-07 16:52:03 +08:00 via Android @alamaya 性能问题优先 redis 缓存热点,其次考虑 mysql 分表内走索引或者 mongodb 走索引,es 不适合那么高性能。 |
![]() | 6 unforgiven 2018-08-07 17:03:13 +08:00 mysql 吗?表分区做了吗 |
![]() | 9 abcbuzhiming 2018-08-07 23:40:13 +08:00 @unforgiven 尽量不要做表分区,mysql 的表分区一直不太稳定,业界反应 bug 挺多的 |
![]() | 10 jmone 2018-08-08 03:15:10 +08:00 |
11 sunsh2017 2018-08-08 09:02:13 +08:00 via Android 全部改用 redis, 结束。 |
![]() | 13 ghos 2018-08-08 09:57:39 +08:00 ![]() ![]() ![]() |
![]() | 14 zhengxiaowai 2018-08-08 10:35:58 +08:00 你先搜索一下,这个问题在 V 站讨论不下十几次了 |
![]() | 15 fireapp 2018-08-08 11:03:54 +08:00 via iPhone hbase 有点大炮打蚊子:数据存两套 一套 userId + tag 当 rowkey,专门给用户查询 tag 用 一套 tag + userId 当 rowkey, 给 tag 查用户用 数据就是增长到 200 亿都是亚秒级查询 |
![]() | 16 bapijun 2018-08-08 11:44:56 +08:00 高性能 mysql 上面有一整章说这件事情怎么办,你可以看看,我记得知乎以前也有说过,主要是垂直拆分和水平拆分两种 |