暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Vast+产品展厅 | Vastbase数据库分区表应用

海量数据 2024-01-26
1146



在数据库中,当表中的数据量不断地增加,维护表的成本就变得越来越高,处理表数据的效率也会降低。在Vastbase数据库中,通过分区表来解决这个问题。



分区表的思路,就是把数据按照一定的规则划分成多份,每一份可以单独存储和管理,划分的每一份这里称为分区。与普通表相比,分区表支持普通表的所有操作,在此基础上新增了特定的分区相关功能,以改善可用性和可管理性,同时也可以达到性能提升的目的。


Vastbase G100中分区表支持4种分区规则:范围分区Range、列表分区List、散列分区Hash和系统分区System。分区规则的选择可以根据具体业务来定,最常用的是范围分区。


为了把数据划分的更细,Vastbase G100还支持对分区再次分区,称为二级分区。二级分区表的一级和二级分区规则目前只支持Range、List和Hash。



Part 01

范围分区Range


范围分区是将数据按范围进行划分,保存到不同的分区中,每个分区对应一个数据范围,分区间数据不能重叠(即数据范围不能冲突)。范围分区最常用在时间类型的字段上,把表数据根据时间进行分区。比如存储天气温度变化的数据表,可以按月把数据分区,在查询2023年3月的温度数据时可以根据分区范围确定所需查询的分区,只需扫描一个分区即可得到结果数据,减少了磁盘的读取,查询性能得到提升。


Vastbase G100中范围分区的定义语法规则有两种:


VALUES LESS THAN语法

对每个分区指定范围上限,分区的范围下限由前一个分区的范围上限来决定,第一个分区的范围下限为无穷小,所以分区之间的范围是连续的。分区的范围区间是一个上开下闭区间,即分区中的数据包含下限值,不包含上限值。


在分区定义中可以用关键字MAXVALUE来表示无穷大值,比任何一个值都大,包括NULL值。


START ... END ... EVERY语法

相比上一种语法多了一些灵活性,相应也多了一些限制。


当只使用其中END部分语法时,则与上一种语法效果一样。


START部分语法主要体现在第一个分区中,如果指定了START语法,则语法上指定的第一个分区会拆成两个分区,START值作为一个分区的上限值,END作为另一个分区的上限值;在后续分区定义中START的值必须为上一个分区的上限值。


该分区定义语法灵活性主要体现在EVERY语法中,先通过START和END指定一个范围,然后根据EVERY指定的间隔值,把指定的范围划分成N份,每一份对应一个分区。该语法对于要定义大量相同间隔分区的时候非常简单方便。不过该语法有所限制,只能用在只有一个分区键,并且分区键类型为数值类型或时间类型的范围分区表定义中。指定EVERY子句时END中不能指定MAXVALUE值。


“Interval”分区表,是范围分区表的衍生,范围分区的规则定义中可以通过指定INTERVAL子句,使得分区表具有自动增加分区的能力。在常规分区表中,当插入的数据不符合已有的分区的范围时,就会报错;而在“Interval”分区表中,则会根据INTERVAL子句中指定的间隔值,自动新增分区,把数据插入到新分区中。


“Interval”分区表的分区键,只支持有一个,并且字段类型只能是NUMERIC类型、NUMBER类型或时间类型。


范围分区的分区键最多支持16个。


Part 02

列表分区List


列表分区使用场景主要是分区键的列中的值只有有限的几个,可以把特定的一个或多个列值的数据保存在同一个分区中。列表分区定义时可以指定关键字DEFAULT,表示其他任意值。当插入的数据值不属于其他分区的范围值时,则把数据插入到DEFAULT分区中。


列表分区的分区键最多支持16个。


Part 03

散列分区Hash


散列分区是通过对键值使用散列算法计算出hash值,再根据hash值确定将数据放入哪个分区。实现思路跟Hash表类似,使用散列分区可以把数据相对均匀地划分到不同的分区中。


散列分区只支持1个分区键,分区定义语法简单,无需指定分区范围。可以通过PARTITIONS num语法来快速定义hash分区,通过该语法定义的分区名是自动生成的。


目前Vastbase中,散列分区不支持新增删除分区,所以在创建散列分区表时要合理指定分区的个数。



Part 04

系统分区System


系统分区比较特殊,它没有分区键,也没有分区范围,在使用上也与其他分区类型有一些差别。当向系统分区表插入数据时,必须指定插入的分区,因为系统分区表的特殊性,如果不指定分区,数据库没有规则可依据,无法确定插入的目标分区。所以系统分区的分区规则完全由使用者来确定。



Part 05

二级区分表


Vastbase中二级分区表不支持System分区,可以支持Range、List和Hash之间的任意组合。针对“Interval”类型的分区,目前只允许出现在一级,二级不支持。


在定义二级分区表时,可以不显式定义二级分区,这时候数据库会在一级分区下创建一个默认的二级分区。


在定义二级分区类型的时候,可以通过SUBPARTITION TEMPLATE语句定义二级分区模板。当定义了二级分区模板,在定义一级分区时没有定义二级分区,则直接应用二级分区模板来创建二级分区。对于“Interval”二级分区表,自增的一级分区下的二级分区也可以根据二级分区模板来创建。



Part 06

分区管理


分区的管理分3种情况,不涉及数据、涉及数据分布和涉及数据变化。通过Vastbase数据库提供的分区管理功能,可以很方便地对分区或分区数据进行操作。


新增分区

对分区表新增分区,定义中给出的分区规则必须与分区表的分区类型相匹配。

针对范围分区,新增分区的范围值必须大于现有分区的最大范围值。

针对列表分区,如果存在DEFAULT分区,则不能新增分区。

针对散列分区,目前不支持新增分区。

“Interval”分区表不支持手动新增分区。


删除分区

对分区表删除分区,可以直接指定要删除的分区名或二级分区名,因为分区名和二级分区名在当前分区表中是唯一的。

不能删除最后一个分区或二级分区。

针对散列分区,目前不支持删除分区。


截断分区

删除分区数据,最快捷的一种方法,与截断普通表的思路一样。截断后的分区可以重新插入数据。


合并分区

把多个分区合并成一个分区,目前只支持范围分区合并。

被合并的分区的分区范围必须是连续的,合并后分区的范围上限为被合并分区的最大上限值。

二级分区表不支持合并分区。


拆分分区

把一个分区拆分成多个分区,目前只支持范围分区拆分。

拆分后的分区的分区范围必须是连续的,并且与原分区的范围完全相同。

二级分区表不支持合并分区。

“Interval”分区表不支持拆分分区。


重命名分区

修改分区名。

二级分区表的二级分区不支持重命名。


交换分区

把分区或二级分区的数据与普通表的数据进行交换。普通表的结构必须与分区表结构一致。

在交换过程中,可以指定是否需要校验数据是否符合分区范围,如果校验不通过该怎么处理。一般应该指定WITH VALIDATION VERBOSE,交换时校验数据;其中VERBOSE表示当有数据不符合交换分区的范围时,把该数据插入到符合的分区中。

WITHOUT VALIDATION的子句不推荐使用,除非你明确知道自己在做什么,否则可能会导致分区表的数据不一致。

二级分区表的一级分区不能交换。


移动分区

把分区数据从一个表空间移动到另一个表空间。可以把历史数据对应的分区移动到慢存储设备上,高速存储设备的空间可以用于存储热数据,提高存储设备使用效率。

二级分区表不支持移动分区。




• END •



关于海量数据


北京海量数据技术股份有限公司(股票代码:603138.SH)成立于2007年,是国内首家以数据库为主营业务的主板上市企业。公司十余年来秉承“专注做好数据库”的初心,始终致力于数据库产品的研发、销售和服务。核心产品海量数据库Vastbase系列、数据库一体机Vastcube系列、海量大数据Datalink系列,全栈国产化,应用满足度高,目前广泛应用于政务、制造、金融、通信、能源、交通等多个重点行业,已成为国产企业级数据库的首选之一。




文章转载自海量数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论