
获得徽章 8
求助jym,mysql数据库中有一张,里面有将近1亿行数据。该表最重要的字段有三个:
id(主键),
status(状态),
date(日期)。
由于单表太大,想到了用sharding-jdbc分表。但是分表有几个原则:
1、最好根据实际业务场景选择分片键。
2、分片键选择好后不能更新,因为sharding无法处理跨片区的数据移动。
那我就为难了,我起初是想用id做分片键的,
最初的想法:比如用id%100,来把数据分散到100张表中,但我实际业务需要查询status和date,这样的查询会涉及到跨片区查,效率很慢。
后来的想法:后来想到用status和date来做复合分片,嗯这样查询速度果然快很多,但是 status这个状态是要更新的,比如从status=success更新到status=failed,更新时sharding显示报错,因为这涉及到了分片键的修改。
目前不知道如何下手了,jym大佬们 有思路吗
id(主键),
status(状态),
date(日期)。
由于单表太大,想到了用sharding-jdbc分表。但是分表有几个原则:
1、最好根据实际业务场景选择分片键。
2、分片键选择好后不能更新,因为sharding无法处理跨片区的数据移动。
那我就为难了,我起初是想用id做分片键的,
最初的想法:比如用id%100,来把数据分散到100张表中,但我实际业务需要查询status和date,这样的查询会涉及到跨片区查,效率很慢。
后来的想法:后来想到用status和date来做复合分片,嗯这样查询速度果然快很多,但是 status这个状态是要更新的,比如从status=success更新到status=failed,更新时sharding显示报错,因为这涉及到了分片键的修改。
目前不知道如何下手了,jym大佬们 有思路吗
![[红脸]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_63.c32f5b5.png)
展开
23
1
赞了这篇文章