网站页面框架设计,收费的电影网站怎么做,佛山网站优化如何,网站 图标 素材1. 什么是分库分表#xff1f;
分库分表是一种数据库扩展技术#xff0c;通过将数据拆分到多个数据库#xff08;分库#xff09;或多个表#xff08;分表#xff09;中来解决单一数据库或表带来的性能瓶颈。分库分表可以有效提升系统的可扩展性、性能和高并发处理能力
分库分表是一种数据库扩展技术通过将数据拆分到多个数据库分库或多个表分表中来解决单一数据库或表带来的性能瓶颈。分库分表可以有效提升系统的可扩展性、性能和高并发处理能力避免单一数据库或表的负载过重。
1.1 什么是分库
分库指的是将数据分散到多个数据库实例中以减轻单一数据库的负载。分库可以有两种方式垂直分库和水平分库。 垂直分库 垂直分库是指根据业务模块的不同将不同模块的数据存储到不同的数据库中。例如将用户数据存储在 user_db 中将订单数据存储在 order_db 中将商品数据存储在 product_db 中。每个数据库只负责一部分业务数据。适用场景 适用于系统中各个模块的数据量差异很大或者需要对不同模块进行独立管理的场景。 水平分库 水平分库是指将同一业务的不同数据根据某些规则如时间、地域等拆分到多个数据库中。例如按照地区划分将美国的用户数据存储在 db_us 中将欧洲的用户数据存储在 db_eu 中或者按照时间将数据按年、月划分到不同的数据库中。适用场景 适用于数据量巨大且需要根据某些标准进行数据拆分的场景。
1.2 什么是分表
分表是指将同一张表中的数据拆分到多个表中以避免单个表过大而导致性能问题。分表也有两种方式垂直分表和水平分表。 垂直分表 垂直分表是指将一张表中的不同列分拆到多个表中。通常是将表中的列根据功能或访问频率进行划分。例如将一个包含用户详细信息的表按照访问频率将常用字段如用户名、密码等拆分成 user_basic 表而将不常用的字段如用户画像、日志等拆分成 user_extra 表。适用场景 适用于表中包含大量列但并非所有列都会频繁访问的场景。 水平分表 水平分表是指将表中的数据按照某些规则如ID范围、时间等拆分到多个表中。例如用户表的数据根据用户ID范围分拆成多个表如 user_1, user_2, user_3 等或者按时间拆分成 user_2023, user_2024 等。适用场景 适用于数据量过大导致单表查询性能低下的情况。
2. 分库分表场景
2.1 什么场景分表
分表适用于以下场景
单表数据量过大 当某个表的记录数达到千万级查询时可能会非常缓慢尤其是涉及全表扫描的操作分表可以有效提高查询效率。高并发读写 单表无法承载高并发的查询和写入请求时可以通过水平分表将压力分散到多个表上。单表的数据结构复杂且访问频繁的列较少 在这种情况下垂直分表可以将高频访问的列提取到单独的表中提高性能。
2.2 什么场景分库
分库适用于以下场景
数据库连接数不足 单个数据库的连接数上限如 MySQL 默认为 4000 个连接无法满足高并发的请求时可以通过分库将连接请求分散到多个数据库实例上。数据库资源瓶颈 当单个数据库的 CPU、内存、磁盘等资源无法满足需求时分库可以将数据分布到多个数据库实例上从而避免单点故障和资源瓶颈。高并发读写 当需要处理大量并发请求时单个数据库无法支撑需要通过分库将请求分散到多个数据库节点上。
2.3 什么场景分库分表
分库分表适用于以下场景
数据量巨大且访问量大 当数据量达到数千万甚至更大且访问量高时单库单表无法满足存储、查询和写入需求。此时分库分表能有效地提高查询性能和扩展系统能力。高并发写入和查询 在高并发的业务场景中单库单表的性能瓶颈可能导致系统无法处理所有请求。分库分表能够将数据分布在不同的物理节点上提高系统的并发处理能力。资源瓶颈和高可用性需求 当数据库实例的资源有限且为了保证高可用性必须将数据分散到多个数据库和表中避免单点故障和资源耗尽。
3. 什么是 ShardingSphere
ShardingSphere 是一个开源的分布式数据库中间件提供数据库分片、分库分表、数据路由、分布式事务、数据脱敏等功能。它可以在不修改应用代码的情况下为应用提供透明的分库分表支持简化了分布式数据库的管理和维护。
ShardingSphere 的主要特点包括
数据分片 支持灵活的分库分表策略可以根据用户需求定制分片规则。分布式事务 提供跨库跨表的分布式事务管理确保数据一致性。读写分离 提供读写分离功能将读请求路由到从库提高系统性能。弹性扩展 支持动态添加新的数据源帮助系统应对数据增长带来的压力。
4. 数据分片核心概念
4.1 表
逻辑表 应用层面上的虚拟表实际数据存储在多个物理表中。真实表 存储在数据库中的实际表数据按分片规则分布在不同的物理表中。绑定表 多个表之间具有外键关系或逻辑关联需要绑定在一起进行分片操作。广播表 一些小型表如配置表、字典表等将数据广播到所有数据库节点中不进行分片。单表 不需要分片的表数据存储在单个表中。
4.2 数据节点
均匀分布 数据均匀地分布到多个数据节点中。自定义分布 开发者可以定义特定的分布规则决定数据如何在不同的数据节点上分布。
4.3 分片
分片键 决定数据如何分配到不同分片的字段通常选择具有唯一性、分布均匀的数据字段作为分片键。分片算法 根据分片键和预定义的算法将数据分配到不同的分片上常见的算法有哈希分片、范围分片等。自动化分片算法 系统自动根据配置的分片规则选择合适的分片算法。自定义分片算法 开发者可以定义自己的分片算法以满足特定的业务需求。分片策略 定义了数据如何进行分片包括按ID、时间、范围等不同策略进行数据划分。强制分片路由 强制要求某些操作使用特定的分片策略进行路由通常用于特定业务需求。
4.4 行表达式
行表达式是指描述分片规则的表达式帮助系统决定某一行数据应该放入哪个分片。
4.5 分布式主键
分布式主键确保在多个数据库和表中生成全局唯一的主键避免出现主键冲突通常通过全局唯一ID生成策略来实现。