栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

数据分片相关的表

数据分片相关的表

表是透明化数据分片的关键概念。

逻辑表

相同结构的水平拆分数据库(表)的逻辑名称,是 SQL 中表的逻辑标识。 例:订单数据根据主键尾数拆分为 10 张表,分别是 t_order_0 到 t_order_9,他们的逻辑表名为 t_order。

真实表

在水平拆分的数据库中真实存在的物理表。 即上个示例中的 t_order_0 到 t_order_9。

绑定表

指分片规则一致的主表和子表。 使用绑定表进行多表关联查询时,必须使用分片键进行关联,否则会出现笛卡尔积关联或跨库关联,从而影响查询效率。 例如:t_order 表和 t_order_item 表,均按照 order_id 分片,并且使用 order_id 进行关联,则此两张表互为绑定表关系。 绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。 举例说明,如果 SQL 为:

SELECt i.* FROM t_order o JOIN t_order_item i ON o.order_id=i.order_id WHERe o.order_id in (10, 11);

在不配置绑定表关系时,假设分片键 order_id 将数值 10 路由至第 0 片,将数值 11 路由至第 1 片,那么路由后的 SQL 应该为 4 条,它们呈现为笛卡尔积:

SELECt i.* FROM t_order_0 o JOIN t_order_item_0 i ON o.order_id=i.order_id WHERe o.order_id in (10, 11);

SELECt i.* FROM t_order_0 o JOIN t_order_item_1 i ON o.order_id=i.order_id WHERe o.order_id in (10, 11);

SELECt i.* FROM t_order_1 o JOIN t_order_item_0 i ON o.order_id=i.order_id WHERe o.order_id in (10, 11);

SELECt i.* FROM t_order_1 o JOIN t_order_item_1 i ON o.order_id=i.order_id WHERe o.order_id in (10, 11);

在配置绑定表关系,并且使用 order_id 进行关联后,路由的 SQL 应该为 2 条:

SELECt i.* FROM t_order_0 o JOIN t_order_item_0 i ON o.order_id=i.order_id WHERe o.order_id in (10, 11);

SELECt i.* FROM t_order_1 o JOIN t_order_item_1 i ON o.order_id=i.order_id WHERe o.order_id in (10, 11);

其中 t_order 在 FROM 的最左侧,ShardingSphere 将会以它作为整个绑定表的主表。 所有路由计算将会只使用主表的策略,那么 t_order_item 表的分片计算将会使用 t_order 的条件。 因此,绑定表间的分区键需要完全相同。

广播表

指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。 适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。

单表

指所有的分片数据源中仅唯一存在的表。 适用于数据量不大且无需分片的表。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/747035.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号