数据库分库分表

一张表数据在 500 - 1000W 之间就需要进行分库分表操作。
分库分表之后比如订单表的订单id不会再用数据库表的自增id,而是采用比如雪花算法生成订单id。

数据库的垂直拆分和水平拆分是两种不同的数据分布策略,它们分别用于解决不同类型的数据增长问题。下面我将详细介绍这两种拆分方式的概念、应用场景及其优缺点。

垂直拆分

概念:
垂直拆分(Vertical Partitioning),也被称为纵向拆分,是指按照业务功能模块将表中的列进行分类,并将其拆分到不同的表中,或者将一组相关的表迁移到新的数据库实例中。例如,在电子商务系统中,可以将用户信息相关的表放在一个数据库中,而商品信息相关的表放在另一个数据库中。

应用场景:

  • 当一张表中有大量不常用的字段时,可以考虑将这些字段拆分出去。
  • 当不同业务模块之间的数据访问模式差异较大时,可以通过垂直拆分来优化性能。
  • 在微服务架构下,每个服务通常会有自己的数据库,这实际上也是一种垂直拆分的形式。

优点:

  • 业务逻辑更加清晰,易于维护和扩展。
  • 数据库表结构简化,单个查询可能涉及的IO操作减少,提高查询效率。
  • 可以针对不同的业务需求对各个数据库进行独立优化。

缺点:

  • 跨库事务处理变得更加复杂。
  • 对于一些需要跨多个子集进行联合查询的操作,实现起来较为困难。
  • 如果拆分不当,可能导致某些表之间无法直接JOIN,增加了开发复杂度。

水平拆分

概念:
水平拆分(Horizontal Partitioning),又称为横向拆分或分片(Sharding),指的是根据某种规则(如哈希值、范围等)将同一张表的数据分散存储到多个数据库实例中。每个数据库实例都包含相同结构的表,但存储的是不同的数据行。

应用场景:

  • 当单个数据库实例中的某个表的数据量过大,影响了读写性能时,可以采用水平拆分。
  • 面对高并发请求场景,通过增加数据库实例的数量来分散负载压力。

优点:

  • 可以有效避免单点瓶颈,支持大规模数据和高并发访问。
  • 各个分片的数据相对独立,便于局部优化和管理。
  • 理论上可以无限扩展,只要增加更多的数据库节点即可。

缺点:

  • 数据分片规则的设计难度较大,需充分考虑到未来扩展性。
  • 分布式事务的一致性和完整性难以保证。
  • 查询复杂度增加,特别是涉及到跨分片的聚合操作时。

无论是垂直拆分还是水平拆分,都是为了解决随着业务发展带来的数据规模膨胀问题,选择哪种方式取决于具体的应用场景和技术要求。实践中往往需要结合两者的优势,合理规划数据库架构。在实际应用中,还应该注意拆分后的数据库管理和维护工作,确保系统的稳定性和可扩展性。

hash分表

存在的问题:
比如4张表扩展为8张,算法发生变更,需要把历史数据按照新算法重新迁移一遍。

range 分表

ShardingSphere 分库分表

电商分库分表案例:

关联查询:可以将订单所关联的表比如订单详情表,物流表,都按照同一套算法插入到同一个库中,此时管理查询不再跨库

ShardingSphere

Apache ShardingSphere 是一个开源的分布式数据库生态系统,它提供了增强现有数据库的能力,使其能够支持大规模数据存储和高并发访问。ShardingSphere 由 ShardingSphere-JDBC、ShardingSphere-Proxy 和 ShardingSphere-Sidecar(规划中)这三款相互独立但可以混合部署的产品组成,它们共同构成了一个完整的分布式数据库解决方案。

核心功能

  1. 数据分片:ShardingSphere 支持基于垂直拆分和水平拆分的数据分片策略,可以帮助用户将单个数据库表的数据分布到多个数据库实例上,从而实现数据的横向扩展。

  2. 读写分离:通过智能路由机制,ShardingSphere 能够自动将读操作分配给从库,而写操作则指向主库,以此来分散负载并提高系统的读取性能。

  3. 分布式事务:提供对跨数据源的分布式事务的支持,确保在分布式环境下数据的一致性和完整性。

  4. 数据加密:ShardingSphere 提供了一套透明化的数据加密方案,可以在不修改业务代码的情况下保护敏感数据的安全。

  5. 影子库:用于全链路压测场景下,ShardingSphere 可以配置影子库来隔离测试数据,避免污染生产环境中的真实数据。

  6. 联邦查询:支持跨不同数据源进行复杂查询分析,使得用户可以从多个异构数据库中获取所需信息,并进行聚合和关联。

架构设计

ShardingSphere 的架构采用了微内核+可插拔的设计理念,这意味着其核心功能被抽象成一个个独立的模块,用户可以根据需要灵活组合这些模块来构建符合自身需求的系统。此外,这种设计还允许第三方开发者为 ShardingSphere 开发新的插件,进一步扩展其功能集。

部署形态

  • ShardingSphere-JDBC:作为一个轻量级的 Java 框架,它直接嵌入到应用程序中,通过 JDBC 接口提供服务,无需额外的服务器部署。
  • ShardingSphere-Proxy:作为一款透明的数据库代理,它可以接收任何遵循 MySQL/PostgreSQL 协议的应用请求,因此适用于多语言环境下的应用。

社区和支持

自成为 Apache 软件基金会的顶级项目以来,ShardingSphere 已经积累了大量的关注者和贡献者,形成了一个活跃的社区。官方文档齐全,并且有大量的示例代码可供学习参考,帮助新手快速入门。

总之,Apache ShardingSphere 为应对现代应用面临的海量数据处理挑战提供了一个强大而灵活的工具包,无论是对于初创企业还是大型组织而言,都是一个值得考虑的选择。

posted @   chuangzhou  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2024-02-03 JAVA8 - 异步编程
2023-02-03 sublime - pretty json
2022-02-03 bytes()
2022-02-03 对象表示形式
2022-02-03 f-string
点击右上角即可分享
微信分享提示