详解人大金仓数据库的垂直分区V3.0

1、概述

对一个大问题进行划分处理是计算机领域常见的手段。在数据库应用中,对于一个大表,既可以选择进行水平分区,也可以选择进行垂直分区。水平分区在主流的数据库产品中都得到了实现,垂直分区一般要靠数据库设计人员自行实现(将一个表划分为多个表)。金仓数据库V6在数据库内核中实现了表的垂直分区,它可以简化数据库设计人员的工作,并为应用程序提供透明的SQL访问。

使用垂直分区主要利用了应用对表中字段访问的如下特性:

(1)字段访问频率的不均匀性:即某些字段访问特别频繁,其他字段则访问的较少。可以参考80/20原则。

(2)应用对字段访问的聚集性:即应用中的查询倾向于一起访问某些字段,如a、b、c三列总是一起访问;d、e两列总是一起访问。可以参考局部性原理。

(3)字段访问顺序的依赖性:即应用中的查询按照某个特定的顺序访问字段,例如访问d、e字段前总是先访问a、b、c字段。

在应用对表的访问满足以上特性之一时,使用垂直分区可以使访问/修改这些列的查询不再需要访问/修改其他无关列,从而减少物理I/O。

本文给出了一种根据“应用的访问模式”确定如何对表进行垂直分区(即确定分区表中字段)的思路,并且以一个应用为例。

2、金仓数据库V6中垂直分区实现方法

金仓数据库V6支持基于主码连接的垂直分区,语法如下:

  1. CREATE TABLE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] [SchemaName.]TableName  
  2. (  
  3. { ColumnName <DataType> [IDENTITY [(Seed, Increment)]]  
  4.    [ DEFAULT { NULL | USER | <Expression> } ] [ <ColumnConstraint> ]  
  5.    | [ <TableConstraint> ]  
  6.  } [, ...n ]  
  7. ) [ <VerticalPartitions> ]  
  8. [TABLESPACE TablespaceName]  
  9.    
  10. <VerticalPartitions> ::= PARTITION BY COLUMN 
  11.               ( [PartitionName]  
  12.                ({ ColumnName [, ...n ])  
  13.                [TABLESPACE TablespaceName] ) [, ...n ] 

垂直分区是按列进行分区,即把一条记录分开多个地方保存,每个分区的行数相同,列顺序与PARTITION子句中的顺序。

包括存放没指定的列的分区,分区数目必须大于等于二,各分区表间允许字段重复,但不能完全重复。

垂直分区基表必须有主码字段,如果分区没有指定主码字段,将在分区中加入基表中的主码字段。

分区表不能有基表字段之外的字段,表中有但分区表没指定的字段默认放入一个新的分区表。

主码字段和重复字段不能指定为IDENTITY。

如果没有指定分区名,系统会自动建立分区名,分区的命名规则为基表名_VP_[1…N]。分区和基表在同一命名空间。

如果没有指定表空间,缺省存放到分区基表所在的表空间中。

不支持建立跨分区的表级约束。

例子: 

  1. CREATE TABLE base (  
  2. col1 INT, col2 INT, col3 INT, col4 INT, col5 CHAR(100),  
  3. PRIMARY KEY(col1, col2)  
  4. )  
  5. PARTITION BY COLUMN (P1(col1, col2, col3, col4), P2(col5)); 

将会创建名为BASE的基表和P1、P2两个分区表。P1和P2的结构如图所示,两个分区都包含元组控制信息(元组头)、各分区的分区列和作为连接索引的主码列col1和col2。

 

3、分区方案的选择

在决定如何分区选择时首先要了解应用的场景,然后考虑分区对I/O的影响:

了解应用场景(可以在应用开发过程中进行)

获得应用中包含的全部查询;

记录查询的顺序;

标记查询执行的次数(或者是百分比);

记录查询平均访问的元组数;

看是否有满足使用垂直分区的场景

将查询按照涉及的表分组(涉及多个表的出现在多个组中);

对每一组查询,做一个表格,表格的列是该组查询涉及的表的列和列长度,表格的行是查询;

对于该组每一个查询,标记该查询涉及的列;

结合查询的频率和访问元组数粗略查看是否有满足使用垂直分区的场景;

计算I/O量获得分区方法

在满足场景的组中选择几个分区方案,包括分区的类型和列的组合。

根据分区类型计算各分区的元组I/O量。

注意尽可能考虑访问模式,即查询执行顺序带来的物理I/O差别。可能带来的差别有:

1)去掉重复计算IO。例如一个涉及分区P1的查询后会接着执行一条更新该分区的语句,则更新语句的读就不会是物理读。

2)考虑命中率问题。不同分区的页面命中率需要根据分区的访问频率进行估计。

计算不分区方案和每个分区方案的I/O量,I/O量为查询数*元组数*该分区元组I/O量。

比较选择I/O量最小的方案。

验证分区带来的I/O减少

可能会有实际情况与计算不符的情况发生,因为计算中的I/O量是逻辑I/O量而不是准确的物理I/O,实际测试每种方案,收集统计信息(每张表的读写信息、页面的命中率),根据实际值调整方案。

4、实例:TPC-C的垂直分区选择

TPC-C是一个典型的OLTP类型的负载。TPC-C测试中共有9张表,包括c_warehouse、c_customer、c_district、c_stock、c_order、c_order_line、c_item、c_history和c_new_order;另外,共有5种事务场景:new order、payment、order-status、delivery和stock-level,其中order-status和stock-level是纯查询事务,其它是以更新为主的事务。

分析5种事务包含的查询,除去c_warehouse、c_distric表等小表,以及更新较多的大表,如c_order和c_order_line,我们可以知道在c_stock表和c_customer表上进行垂直划分可以带来较大效率的提升。我们可以根据实际待测试的环境,按照前面描述的原则进行垂直划分方案的设计、测试和验证。

【责任编辑:彭凡 TEL:(010)68476606】

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/241505.html<

(0)
运维的头像运维
上一篇2025-04-24 09:01
下一篇 2025-04-24 09:03

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注