清苑区建设网站找那家公司,本地wordpress 上传,郑州做网站公司天强科技,百度关键词搜索量查询分库#xff0c;分表#xff0c;分库分表
“只分库“#xff0c;“只分表“#xff0c;“既分库又分表
何时分库
在面对高并发的情况下#xff0c;数据库连接成为性能瓶颈。当数据QPS过高导致数据库连接数不足时#xff0c;考虑分库。在读多写少的场景下#x…分库分表分库分表
“只分库““只分表““既分库又分表
何时分库
在面对高并发的情况下数据库连接成为性能瓶颈。当数据QPS过高导致数据库连接数不足时考虑分库。在读多写少的场景下增加多个从库或使用分库方法实现数据库的高可用。
避免大量数据集中访问在单台机器上对磁盘IO、CPU负载造成过大压力影响性能。
分库与添加Slave机器的关系 添加Slave机器 读写分离通过添加Slave机器实现主从复制将读操作分散到多个机器上减轻主库的读压力。提高查询性能Slave机器可处理大量只读查询。异步复制主库执行后数据会异步复制到Slave机器上可能导致一定延迟。 分库 水平扩展分库可将数据划分到不同数据库实例中每个实例负责一部分数据可通过在同一服务器实例中运行不同数据库实例或在不同服务器上运行不同db实例实现。
如进行微服务拆分,把单一数据库拆到不同的数据库当中
什么时候分表
分表解决数据量大的情况。当单表数据量非常大、并发量不高、数据连接足够但存储和查询遇到瓶颈时需减少单表数据量提高速度。通常在单表行数超过500万行或单表容量超过2GB后考虑分库分表。 何时既分库又分表
解决并发量和数据量都很大的情况。通常高并发和大数据量同时发生因此经常遇到分库分表的情况。当数据库连接不足、同时单表数据量很大、查询速度很慢时需要进行分库分表。
水平拆分和垂直拆分
垂直拆分 将表中某记录的多个字段拆分到多个表中。水平拆分 将一张表中不同记录分别放到不同表中减少单表数据。
水平拆分。把不同的用户的订单分表拆分到不同的表中每个表中维护一些记录
垂直拆分减少字段数使每个单表数据存储减少水平拆分将不同用户的订单分表每表维护一些记录。
分表的字段选择
分表的字段决定了数据如何在不同的分表中的划分和存储比如按用户分表按时间分表按地区分表这里面的用户时间地区就是分表的字段 需要注意的是按照买家进行分表是把所有相同的买家信息放在同一张表中而不是一个买家一个表
用户ID按照用户ID分表将同一个用户的数据分到同一个分表便于按用户进行查询这样方便避免热点数据的数据倾斜同时方便进行水品扩张将新的买家的数据分布到新的分表中不影响已有的分表时间按照时间进行分表按照年月日等使用在按时间范围查询场景方便后期的数据清理地区按照地区分表适用于有地域数据的数据
卖家查询怎么办
我们一般都是使用买家ID来实现分表避免某些大卖家的大量数据导致数据倾斜的问题 但是买家查询很方便那么卖家如何查询呢
由于卖家可能会涉及到多个买家的表如果直接在分表中查询就会涉及到跨表查询影响性能为了解决这个问题就提出了同步一张卖家维度的表这张表只用来查询而不涉及写操作卖家ID同样可以可以定位到这个卖家维度的表
我们可以使用binlog 或者Flink等同步方案将写入买家的数据同步到卖家维度的表中直接在这个卖家维度的表中查询而不需要进行跨表查询
由于卖家表只用来查询所以可以使用一些高性能db如HBasePolarDB满足大查询量的需求
全局ID的生成
涉及到分库分表就会引申出分布式系统的唯一主键ID的生成问题因为在单表中我们可以使用数据库主键来做唯一的ID但是做了分库分表多张单表中的自增主键就一定会冲突就不具有唯一性了
雪花算法
雪花算法具有全局唯一、递增、高可用的特点 1位符号位 表示正负通常这个位没有特殊用途。 41位时间戳位 精确到毫秒可以容纳约69年的时间。表示当前时间戳通常为当前值减去一个固定的起始时间戳。 10位机器ID 高5位是数据中心ID低5位是工作节点ID最多可以容纳1024个节点确保在同一个时间戳内不同的机器生成不同的ID。 12位序列号位 表示在同一时间戳和机器ID下的序列号每个节点每毫秒从0开始不断累加递增到4095。因此雪花算法在同一毫秒内最多生成1024 * 4096个唯一的ID。