首页 > 数据库 >vertica数据库的分区分布作用与区别

vertica数据库的分区分布作用与区别

时间:2024-02-27 10:55:40浏览次数:22  
标签:name 数据库 partition 节点 vertica table segment 分区

1.目的方面:

segmentation 解决各节点数据倾斜问题, 适用于木桶原理, 数据量大的那个节点将会拖慢整个查询.

partition 主要解决的是数据删除和空间回收问题. 列式数据库删除数据的代价较大. 相比一条一条记录的删除动作, 删除整一个partition 的代价要小得多(其实一个partition就是一个文件). 当然一般情况下,分区也会在一定程度上改善查询效率.

2.Data locality 方面:

segmentation 是指数据在集群中各个节点的分布, 理想状态应该是数据均匀分布到各个节点.

partition 是指数据在单个节点上的分布.

3.DDL方面:

segmentation 是可在create table 和 create projection 语句中指定的, superprojection的segment是在建表语句中指定.

partition只能在create table 语句中指定的.

========================

分区设计规则:

========================

  1. 按照 purge data的策略确定分区规则. 因为分区一个优势是快速回收空间, 所以可按照删除数据的方式确定如何分区, 比如将来是按月purge data,分区就选择月份; 如果将来可能按照年份purge data, 分区就选择年份. 而且, 建立分区的表达式应该和purge数据(即删除partition)的表达式一致.

  2. 确保这个表的分区数量不能超过1024个. Vertica 一个partition就是一个文件, Vertica要求Partition不能超过1024个, 所以一般情况下不推荐直接使用日期字段做分区, 推荐使用月份等较大的时间跨度. Partition 子句可以使用表达式.

========================

segment规则:

========================

  1. segment目的是要将数据在各个节点中平均分布, 所以最好是选择那些选择性好的字段或字段组合. 字段取值可以包含null, 但需注意null的记录将被分布到同一个节点, null值太多的话, 可能会引起数据倾斜问题.

  2. 在新建表的时候, 最好是指定 segment 策略. 如果建表时未指定segment策略的话, 表的superprojection会自动按照前32个字段作segemnt, 后果是: 一旦一个字段被包含到segment策略中, vertica将不允许alter该字段, 包括扩展长度.

segment子句的语法是:


SEGMENTED BY HASH(column_key) ALL NODES;

SEGMENTED BY HASH(column_key,column_data_01,column_data_02) ALL NODES;

其他一些相关的语句

========================

检查数据倾斜率的语句:

select /*+label(Source: www.dbjungle.com )*/ node_name , projection_name , row_count

from projection_storage

where anchor_table_name = 'my_table'

and anchor_table_schema = 'my_schema'

order by projection_name , node_name ;

查询所有分区表的清单


select table_schema, owner_name, table_name, partition_expression

from tables

where partition_expression<>'';

删除分区的语法:


SELECT DROP_PARTITION('some_table', partition_value);

标签:name,数据库,partition,节点,vertica,table,segment,分区
From: https://www.cnblogs.com/Zhao01/p/18036431

相关文章

  • sqlserver 数据库事务ACID和使用 数据库锁,悲观锁乐观锁死锁
    在SQLServer中,事务的ACID属性、数据库锁、悲观锁、乐观锁和死锁是数据库管理和设计中的重要概念。以下是对这些概念的详细解释以及如何在SQLServer中使用它们:1.ACID属性在SQLServer中,事务必须满足ACID属性,以确保数据的一致性和可靠性。原子性(Atomicity):......
  • C#和sqlserver 如何实现 事务ACID和使用 数据库锁,悲观锁乐观锁死锁
    在C#中使用SQLServer实现事务的ACID(原子性、一致性、隔离性、持久性)属性和使用数据库锁(悲观锁和乐观锁)时,你可以通过ADO.NET的SqlConnection和SqlTransaction类来实现。下面是一些示例和概念说明。实现ACID事务ACID属性是事务处理的四个基本特征,它们确保事务在数据库中的正确......
  • 无法在驱动器0的分区1上安装Windows
    在通过U盘或光盘安装Win10系统时,不少用户遇到无法安装的问题,提示“无法在驱动器0的分区1上安装Windows”,格式化分区1也不能解决,进而提示Windows无法安装到这个磁盘,选中的磁盘采用GPT/MBR分区形式,这是怎么回事呢?下面跟大家分析出现这个问题的原因以及解决方法。一、原因分析Win......
  • python3的json数据库-TinyDB
    无意间看到TinyDB这个词汇,就去查了一下,就发现了它的官方网站这里然后就是按照他说的步骤去做。第1步安装  pip3installtinydb 安装成功后,创建一个文件名字叫做 test.py,输入下面的代码:fromtinydbimportTinyDB,Query#创建数据库对象db=TinyDB('db.json')#......
  • .[[email protected]].mkp勒索加密数据库完美恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:.[[email protected]].mkp勒索加密数据库完美恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]有朋友oracle数据库所在机器被加密,扩展名为:.[[email protected]].mkp,数据文件类似:通......
  • Python Django适配dm8(达梦)数据库
    官方文档https://eco.dameng.com/document/dm/zh-cn/start/python-development.htmlDjango适配达梦https://blog.csdn.net/qq_35349982/article/details/132165581https://blog.csdn.net/weixin_61894388/article/details/126330168项目适配达梦升级或安装依赖Django==3......
  • 实例详解数据库的游标管理
    本文分享自华为云社区《GaussDB数据库SQL系列-游标管理》,作者:酷哥。一、前言在数据库中,游标(cursor)是一种非常重要的工具,用于在数据库查询结果集中进行定位和操作。游标提供了一种在多行数据结果集中逐行处理每一行的机制,允许开发人员对每一行的数据进行操作,如检索、过滤、修改等......
  • SpringBoot结合Liquibase实现数据库变更管理
    https://juejin.cn/post/7171232605478584328 https://juejin.cn/post/7170857098538909732  前言研发过程中经常涉及到数据库变更,对表结构的修复及对数据的修改,为了保证各环境都能正确的进行变更,我们可能需要维护一个数据库升级文档来保存这些记录,有需要升级的环境按......
  • Docker安装mariadb数据库与web管理工具phpmyadmin
    安装mariadb数据库获取指定版本的mariadb数据库docker镜像使用dockersearchmariadb搜索相关镜像;MacBook-Pro:~chenxiaolong$dockersearchmariadbNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDmar......
  • 数据库所在服务器磁盘满了怎么办?
    当数据库所在服务器的磁盘空间不足时,可能会引发一系列问题,如数据库性能下降、无法写入新数据等。因此,及时识别和处理磁盘空间不足的问题至关重要。本文将介绍一些解决数据库服务器磁盘空间不足的方法。1.识别磁盘空间使用情况首先,你需要确定哪些文件或目录占用了大量的磁盘空间......