分布式查询处理优化之数据分片

server/2024/11/27 15:52:44/

基本的数据分布策略

数据分片

分片是将分布式数据库的全局数据逻辑划分为关系片段并且进行实际的物理分配的过程。不同的分布式系统有着不同的分片策略。

  • 关系数据库主要通过数据分片技术对全局数据进行逻辑划分和实际的物理分配。考虑的主要因素:数据的模式特征、查询负载特征、数据量特征
  • 分布式文件系统中,文件被分成固定大小的块,由分布式文件系统负责数据块的分布式存储和复制,为用户提供具有高容错性、高伸缩性的海量数据分布式存储
    在这里插入图片描述

这张图展示了分布式数据库中三个关系表(SUPPLIER、LINEITEM 和 PART)的数据分片与复制策略。具体说明如下:

  1. 关系表

    • SUPPLIER
    • LINEITEM
    • PART
  2. 分片与复制策略

    • 数据被分布到三个节点(节点 1、节点 2、节点 3)上。
    • 每个节点存储不同的数据组合,通过分片和复制来提高数据的可用性和查询性能。
  3. 各节点数据分布

    • 节点 1:包含 L1(LINEITEM 表的记录)、S1(SUPPLIER的记录)和 P1(PART 表的记录)。
    • 节点 2:包含 L2S1(SUPPLIER 表的副本)以及 P1P2(PART 表的记录)。
    • 节点 3:包含 L3S1(SUPPLIER 表的副本)和 P2
  4. 分片策略

    • LINEITEM 表进行了分片处理,不同的记录分布在不同节点上:L1 在节点 1,L2 在节点 2,L3 在节点 3。
    • PART 表也进行了分片处理,P1 分布在节点 1 和节点 2,而 P2 分布在节点 2 和节点 3。
  5. 复制策略

    • SUPPLIER 表的 S1 记录在三个节点上都有副本,这样可以提高数据的可用性和读取效率。

策略解读

  • 数据分片:通过将不同记录分布到不同的节点,实现了水平分片。这种方式可以分散查询负载,减少单节点的压力。
  • 数据复制:包括关键数据(如 SUPPLIER 表的 S1 记录)在多个节点上有副本,以及PART表分片进行了部分复制以增强数据的容错性和可用性。这样即使某个节点故障,数据仍可从其他节点获取。
  • 性能优化:这种组合的分片和复制策略有助于在分布式环境中实现高可用性和负载均衡,从而提升查询性能和系统可靠性。
分片的好处
  • 支持了数据库存的可扩展性
  • 不同场地的数据库分片支持并行查询处理
  • 优化的分片策略可以提高节点上查询处理的局部性(譬如之前Supplier表每个节点都有一个副本)降低网络通信延迟
  • 分片的副本机制提高了可靠性和容错能力

分布式查询处理

在这里插入图片描述

代价模型: C T o t a l = C C P U + C I / O + C C O M C_{Total}=C_{CPU}+C_{I/O}+C_{COM} CTotal=CCPU+CI/O+CCOM
即计算成本+输入输出成本+分布式节点通讯成本
其中通讯成本 C C O M ( X ) = C L a t e n c y + X / C I / O b a n d w i d t h C_{COM}(X)=C_{Latency}+X/C_{I/Obandwidth} CCOMX=CLatency+X/CI/Obandwidth
X X X是传输数据量,后一个表达式是数据量/带宽

分布式查询优化

  • 选择、投影等一元操作:主要采取集中式数据库相同的存取访问优化技术;
  • 连接操作:涉及跨节点数据访问,比较复杂。面向分布式系统的连接操作查询优化方法大致分为:基于连接的优化和基于直接连接的优化。

面向关系型数据的分布式查询处理

分片策略

水平分片

原理:通过选定一个分片键(通常是主键或具有较高查询频率的字段),根据该键的值将数据分配到不同的分片中。例如,可以按照用户 ID 或订单 ID 的范围进行分片。

基本水平分片

定义
基本水平分片是直接按照一个主表的分片键(通常是主键或某个高频查询字段)对数据进行分割,将数据行均匀地分配到不同的分片中。

特点

  • 分片依据:根据主表的某个字段(如主键或其他唯一标识)直接进行分片。
  • 分片范围:各个分片之间通常是独立的,每个分片只存储一部分数据行。
  • 实现方式:可以通过范围分片(如 ID 的范围)或哈希分片(如 ID 哈希值)来决定每行数据应该放置在哪个分片中。
  • 示例:一个 User 表可以按用户 ID 的范围分成 User_1User_2User_3 三个分片,分别存储不同范围的用户数据行(例如:ID 1-1000、1001-2000 等)。

使用场景
适用于主表需要进行高频查询的情况,查询可以直接定位到某个分片,从而减少查询的范围,提升查询效率。

导出水平分片

定义
导出式水平分片是基于基本水平分片的结果,对其他关联表进行分片的一种方式。即,导出式水平分片依赖于主表的分片规则来决定关联表的分片方式。

特点

  • 分片依据:从属于主表的分片规则。导出表的分片规则基于主表的分片键(通常是外键)来确定。
  • 分片范围:导出表的分片方式与主表保持一致,以便实现局部性查询(即分片后的关联数据可以在同一分片上完成查询)。
  • 实现方式:导出表按照主表的分片方式进行同样的水平分片,这样在执行关联查询时,可以避免跨分片查询。
  • 示例:假设 Order 表(订单表)与 User 表(用户表)有一对多关系,且 User 表按 ID 水平分片。导出式分片将 Order 表也按照 User 表的分片规则进行分片(即基于 UserID 进行水平分片)。这样,属于同一个用户的订单数据将分配到与该用户数据同一分片中。

使用场景
适用于关联表之间存在较强的关联关系,且需要频繁进行联合查询的情况。通过导出式分片,可以将关联数据放在相同的分片中,避免跨分片访问,从而提升查询性能。

区别总结
特性基本水平分片导出式水平分片
分片依据主表的某个分片键(主键或高频字段)基于主表的分片规则,使用主表的外键
分片对象单表主表及其关联的从表
实现方式按主表的分片键直接进行分片依赖主表的分片规则对从表进行分片
应用场景单表查询或高频查询的主表需要联合查询的关联表,避免跨分片查询
优点简单直接,适用于单表高频查询数据局部化,减少跨分片访问,提高性能
垂直分片
  • 定义:垂直分片(也称为列分片或导出分片)是将一个关系表按列划分成不同部分,将不同部分存储在不同的节点上。
  • 原理:根据表的列以及无损分解算法,将表拆分为多个子表,确保每个分片只包含该表的部分列。例如,一个用户表可能会被拆分成两个分片,一个包含用户的基本信息(ID、姓名),另一个包含用户的详细信息(ID、地址、电话)(表与表之间的交集属性是主码)。
  • 优点:适合在不同子表之间分布不同的查询负载。例如,有些查询只需要读取用户的基本信息,而不需要详细信息。
  • 缺点:当查询需要多个列的联合信息时,可能需要跨分片进行连接操作,从而增加了系统开销。
混合分片
  • 定义:混合分片是水平分片和垂直分片的组合,适用于需要更细粒度控制的复杂场景。
  • 优点:混合分片可以同时满足多个分片需求,适应性更强。适用于某些表结构复杂,数据量较大且查询模式多样化的系统。
  • 缺点:实现和维护相对复杂,因为需要管理不同类型的分片逻辑和跨分片的查询。
分片树

在这里插入图片描述

水平分片用集合并操作,垂直分片是关系连接操作。构建分片数步骤如下

  • 将整个关系作为分片树的根节点,确定分配策略
  • 将分配策略应用于数据,构建不同的分片
  • 根据数据的复杂度和应用需求递归地构建深层次分片树,直到每个分片都分配到具体的物理节点
  • 根据“水平分片用集合并操作,垂直分片是关系连接操作”,把关系的恢复方式记录下来

http://www.ppmy.cn/server/145365.html

相关文章

一篇文章读懂 Prettier CLI 命令:从基础到进阶 (3)

Prettier 命令行工具 Prettier 提供了一个强大的命令行界面 (CLI),允许用户通过命令行来格式化代码。在 package.json 中,你可以配置一个脚本来运行 Prettier,例如: "scripts": {"format": "prettier …

构建与优化数据仓库-实践指南

数仓构建流程 下图为MaxCompute数据仓库构建的整体流程。 基本概念 在正式学习本教程之前,您需要首先理解以下基本概念: 业务板块:比数据域更高维度的业务划分方法,适用于庞大的业务系统。 维度:维度建模由Ralph Ki…

【人工智能基础】自然语言处理基础

文章目录 一. 语言模型基本概念1. n-gram模型2. 评价指标2.1. 困惑度2.2. 交叉熵 3. 训练中的特殊字符3.1. OOV问题:处理模型未见过的字符3.2. 起始字符:起始出现概率的处理 4. 字模型与词模型5. 中英文差别 二. 向量语义1. 词向量1.1. 相似度&#xff1…

热门金融大模型整理

FinRobot (开源) FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models FinRobot,一个支持多种金融专用 AI 代理的开源平台,每个代理均由 LLM 驱动。平台架构包括:金…

C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)

目录 题目: 无重复字符的最长子串 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口(同向双指针) 3. 代码实现 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口 题目: 无重复字符的最长子串 1. 题目解析 题目截图: 此题所说的…

调大Vscode资源管理器字体

对于调整资源管理器字体大小(也就是下图红框),查找了网上很多方法。要么介绍的方法是调整了代码字体,要么是调节了终端字体,要么是通过整体放缩实现的调整,总之都不合适。 唯一的调整方法是在几篇CSDN里看到…

【计算机网络】C/C++实现解析Wireshark离线数据包,附源码

直接先上demo 以下是一个完整的示例代码&#xff0c;演示如何使用 pcap_open_offline 函数打开一个捕获文件并读取数据包。 #include <stdio.h> #include <pcap.h>int main(int argc, char **argv) {if (argc ! 2) {fprintf(stderr, "Usage: %s <capture…

c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享

在嵌入式系统中&#xff0c;有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器&#xff0c;通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片&#xff0c;驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…