还是不着急上手,先介绍一下分库分表架构实现过程中会接触到的一些常用概念。了解这些概念可以帮助你了解市面上其他分库分表工具。虽然它们的实现方法可能存在差异,但总体思路基本相同。 因此,在开始实际操作之前,我们有必要掌握这些通用概念,以便更好地理解和应用分片技术。
我们结合具体业务场景,以t_order表为例,对架构进行了优化。由于数据量已经达到亿级别,查询性能严重下降,所以我们采用了分库分表技术来处理这个问题。具体来说,我们将原来的单一数据库分为两个数据库,分别是DB_1和DB_2,并在每个数据库中再次进行分表,生成两个表t_order_1和t_order_2实现订单表的分库分表处理。
t_order
DB_1
DB_2
两个表t_order_1
t_order_2
平时我们讲分库分表,大多是基于水平分片模式(水平分片、分表)来谈的。数据分片会将数据量较大的表进行拆分。 t_order 拆分生成多个小数据表(拆分表),表结构完全相同 t_order_0、t_order_1 、···、 t_order_n,每个表只存储原大表的部分数据。
t_order_0
t_order_1
t_order_n
数据节点是数据分片中不可再细分的最小单位(表)。由数据源名称和数据表组成,如上图中的DB_1.t_order_1、DB_2。 t_order_2表示数据节点。
DB_1.t_order_1
DB_2。 t_order_2
逻辑表是指具有相同结构的水平分割表的逻辑名称。
,例如,我们将订单表T_Order分为10个表,例如T_Order_0··t_order_9等等。数据库中不再存在 t_order 这个表,被几个 t_order_n 表取代。
T_Order
T_Order_0
t_order_9
分库分表通常对业务代码无侵入。开发人员只关注业务逻辑SQL编码。我们还是按照 t_order 在代码中编写 SQL,并在执行逻辑 SQL 之前将其解析为相应数据库执行的实际 SQL。此时t_order就是这些分表的逻辑表。
SQL
逻辑表
业务逻辑 SQL
选择 * 来自 t_order 其中 order_no='A11111'
SQL的真正执行
真实表是数据库中实际存在的物理表DB_1.t_order_n。
DB_1.t_order_n
广播表是一种特殊类型的表,其表结构和数据在所有分片数据源中完全一致。与分割表相比,广播表的数据量更小,更新频率更低。通常用于字典表或者配置表等场景。由于它在所有节点上都有副本,因此可以大大减少JOIN关联查询的网络开销,提高查询效率。
JOIN
需要注意的是,广播表的修改操作需要保证同步,以保证所有节点上的数据一致。
广播桌的特点:
广播表中的数据在所有分片数据源中完全一致。因此,对广播表的操作(如插入、更新、删除)都是在每个分片数据源中实时进行,以保证数据的一致性。
对于广播表的查询操作,只需要在任何分片数据源中执行一次即可。
与任何其他表进行 JOIN 操作都是可行的,因为广播表的数据在所有节点上都是一致的,因此任何节点上的相同数据都可以访问。