分库分表
主键生成 分库分表
雪花算法
哈希分库分表、范围分库分表和中间表分库分表。
分库分表中间件的形态:SDK、Proxy和 Sidecar。
其他维度查询(无主键)
司有实时数仓,对 TO B实时性要求不高的查询我们都会基于数仓做成宽表,再基于es提供查询。
买家商品基于业务(商品搜索ES)
订单分库分表(也可以基于ES提供关键搜索)
卖家维度(实时数据仓库(聚合、统计),es查询)
对于isv非强一致性保证
es提供列表搜索查询,Mongodb提供明细数据
同步等都通MQ(RocketMQ有重试机制,最终还有死信队列)
最好都是用java写,如果多语言情况下,有些中间件sdk支持不全面还是容易有问题,比如前后端全栈js,node有些不适当或者是框架本身不完善,出现异常问题就容易重启,重启挂掉就会对已经在运行的数据出现有损的情况,就要考虑对这些数据补偿
如果多次来回调用,同一个业务补偿的数据越来越多,有时数据都是中间态的数据,很难造出来再次补偿,如果都用mq来处理也不是不行,就是改造起来费劲费时间
很多业务细节,关键的地方就在于要从开发规范上规避,一个简单的功能来回抄很多遍,做大逻辑聚合(if else300+行)5年过去根本看不了
- 文档规范
- 代码规范
容量评估
对于写瓶颈来说,分区表可以缓解问题,而读写分离几乎没有效果,比如频繁地增删改操
作。
对于硬件瓶颈来说,读写分离、分区表基本上也解决不了,比如写操作引发的网络带宽问题。
一句话总结分库分表,那就是数据库本身出现了性能问题,而且这些性能问题已经没办法通过 SQL 优化、索引优化之类的手段来解决了。
通常在分库分表之前应该优先考虑分区表和读写分离,因为这两种方案和分库分表比起来都更简单、好维护。
数据库综合
Loading...