分库分表是解决大流量、大数据量系统数据库层面的优化。
分为两种类型
Client :Sharding-jdbc
Server:Mycat、sharding-proxy
带来的问题
深度分页、查询性能低下(多表,甚至跨库):使用ES的宽表、通过 ETL 将数据清洗到 ES
数据倾斜:跟分表分库策略有关系。超级用户
分布式事务:例 使用消息中间件保证最终一致性
深分页问题:。。
如何平缓迁移老系统的数据?
目前大多数公司的数据库方案都不是一来就上分库分表(当然如果能够预料到数据体量,一开始就设计好这样最好,但是新业务的不确定性还是很大),因此存在老数据往新的分库分表数据库迁移的情况。
方案:双写不中断迁移
历史数据量大,肯定不能停机迁移。
方案1:
线上系统里所有写库的地方,增删改操作,除了对老库增删改,都加上对新库的增删改,使用方
系统部署以后,还需要跑程序读老库数据写新库,写的时候需要判断updateTime
循环执行,直至两个库的数据完全一致,最后重新部署分库分表的代码就行了
方案2:
新老服务均支持运行:
流量染色灰度发布,区分新、老服务。数据同步:定时同步、实时异步同步。稳定后网关将流量切换到新服务。
如何扩容?
2*n 参考 hashmap 的扩容机制