理论知识:
1.垂直分片
按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散到不同的数据库。
垂直分片方法真正的解决单点瓶颈。垂直拆分可以缓解数据量和访问量带来的问题,但无法根治。如果垂直拆分之后,表中的数据量依然超过单节点所能承载的阈值,则需要水平分片来进一步处理。
2.水平分片
水平分片称为横向拆分。相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或 某几个字段),根据某种规则将数据分散多个库或表中,每个分仅包含数据的部分。例如:根据主键分,偶数主键的记录放入 0 库(或表),奇数主键的记录放1库(或表)。
水平分片从理论上突破了单机数据量处理的瓶颈,并且扩展相对自由,是分库分表的标准解决方案。
分库分表后需要解决的问题:
1. 应用开发工程师和数据库管理员对数据库的操作变得异常繁重就是其中的重要挑战之一。他们需要知道数据需要从哪个具体的数据库的分表中获取。
解决方案:待续
2.能够正确的运行在单节点数据库中的 SQL,在分片之后的数据库中并不一定能够正确运行。
2.1分页
解决方案:待续
2.2 排序
解决方案:待续
2.3聚合分组
解决方案:待续
2.4 其它
3.分布式事务(跨库事务)
解决方案:
a1.合理采用分表,可以在降低单表数据量的情况下,尽量使用本地事务,善于使用同库不同表可有效避免分布式事务带来的麻烦。
a2.在不能避免跨库事务的场景,有些业务仍然需要保持事务的致性。而基于 XA 的分布式事务由于在并发度高的场景中性能无法满足需要,并未被互联网巨头大规模使用,他们大多采用最终一致性的柔性事务代替强一致事务。
(未完待续)
转载:https://shardingsphere.apache.org/document/current/cn/features/sharding/
|