共计 899 个字符,预计需要花费 3 分钟才能阅读完成。
程度拆分计划是 TDSQL MySQL 版 的根底原理,它的每个节点都参加计算和数据存储,且每个节点都仅计算和存储一部分数据。因而,无论业务的规模如何增长,咱们仅须要在分布式集群中一直的增加设施,用新设施去应答增长的计算和存储须要即可。
程度切分
程度切分(分表):是依照某种规定,将一个表的数据扩散到多个物理独立的数据库服务器中,造成“独立”的数据库“分片”。多个分片独特组成一个逻辑残缺的数据库实例。
惯例的单机数据库中,一张残缺的表仅在一个物理存储设备上读写。
分布式数据库中,依据在建表时设定的分表键,零碎将依据不同分表键主动散布到不同的物理分片中,但逻辑上依然是一张残缺的表。
在 TDSQL MySQL 版 中,数据的切分通常就须要找到一个分表键(shardkey)以确定拆分维度,再采纳某个字段求模(HASH)的计划进行分表,而计算 HASH 的某个字段就是 shardkey。HASH 算法可能根本保证数据绝对平均地扩散在不同的物理设施中。
写入数据(SQL 语句含有 shardkey)
业务写入一行数据。
网关通过对 shardkey 进行 hash。
不同的 hash 值范畴对应不同的分片(调度零碎事后分片的算法决定)。
数据依据分片算法,将数据存入理论对应的分片中。
数据聚合
数据聚合:如果一个查问 SQL 语句的数据波及到多个分表,此时 SQL 会被路由到多个分表执行,TDSQL MySQL 版 会将各个分表返回的数据依照原始 SQL 语义进行合并,并将最终后果返回给用户。
留神:
执行 SELECT 语句时,建议您在 where 条件带上 shardKey 字段,否则会导致数据须要全表扫描而后网关才对执行后果进行聚合。全表扫描响应较慢,对性能影响很大。
读取数据(有明确 shardkey 值)
业务发送 select 申请中含有 shardkey 时,网关通过对 shardkey 进行 hash。
不同的 hash 值范畴对应不同的分片。
数据依据分片算法,将数据从对应的分片中取出。
读取数据(无明确 shardkey 值)
业务发送 select 申请没有 shardkey 时,将申请发往所有分片。
各个分片查问本身内容,发回 Proxy。
Proxy 依据 SQL 规定,对数据进行聚合,再回答给网关。