Greenplum hash分布算法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介:

标签

PostgreSQL , hash , cdbhash , 一致性hash算法


背景

Greenplum,如果从master节点写入数据的话,写入性能实际上是比较差的,但是我们可以直接连数据节点来写入:

《让greenplum的oltp性能飞起来》

这种用法需要客户端从master获取gp_segment_configuration,同时需要获取表的分布键,同时需要使用cdbhash算法算出记录应该写入哪个segment节点,这种方法不保证全局一致性,建议选择场景使用。

hash算法

src/backend/cdb/cdbhash.c

算出的值对应gp_segment_configuration.content.

获取GPDB集群配置

postgres=# select * from gp_segment_configuration ;
 dbid | content | role | preferred_role | mode | status | port  |     hostname      |  address  | replication_port | san_mounts 
------+---------+------+----------------+------+--------+-------+-------------------+-----------+------------------+------------
    1 |      -1 | p    | p              | s    | u      | 15432 | .sqa.tbc | localhost |                  | 
    2 |       0 | p    | p              | s    | u      | 25432 | .sqa.tbc | localhost |                  | 
    3 |       1 | p    | p              | s    | u      | 25433 | .sqa.tbc | localhost |                  | 
    4 |       2 | p    | p              | s    | u      | 25434 | .sqa.tbc | localhost |                  | 
    5 |       3 | p    | p              | s    | u      | 25435 | .sqa.tbc | localhost |                  | 
    6 |       4 | p    | p              | s    | u      | 25436 | .sqa.tbc | localhost |                  | 
    7 |       5 | p    | p              | s    | u      | 25437 | .sqa.tbc | localhost |                  | 
    8 |       6 | p    | p              | s    | u      | 25438 | .sqa.tbc | localhost |                  | 
    9 |       7 | p    | p              | s    | u      | 25439 | .sqa.tbc | localhost |                  | 

content就是hash value,注意-1表示master,0开始表示segment,如果有mirror的话,content会重复,每个content id都有两条,分别表示primary 和 mirror。

通过role判断当前属于什么角色,选择primary写入。

注意有MIRROR时,如果PRIMARY挂了会自动切换到MIRROR,所以建议写入时,如果发现失败,再从master获取新的gp_segment_configuration,找到对应content id的当前role=p的连接。

hostname, port表示节点的真实连接断开和主机名。

获取分布键

********* QUERY **********
SELECT attrnums
FROM pg_catalog.gp_distribution_policy t
WHERE localoid = '721689' 
**************************

********* QUERY **********
SELECT attname FROM pg_attribute 
WHERE attrelid = '721689' 
AND attnum = '1' 
**************************

如果gp_distribution_policy获取到的attrnums是空,表示随机分布。

目录
相关文章
|
7月前
|
存储 缓存 负载均衡
一致性 Hash 算法 Hash 环发生偏移怎么解决
一致性 Hash 算法 Hash 环发生偏移怎么解决
149 1
|
6月前
|
机器学习/深度学习 算法 测试技术
如何应对缺失值带来的分布变化?探索填充缺失值的最佳插补算法
该文探讨了缺失值插补的不同方法,比较了它们恢复数据真实分布的效果。文章指出,处理插补尤其在小样本或复杂数据时是个挑战,需要选择能适应数据分布变化的方法。文中介绍了完全随机缺失(MCAR)、随机缺失(MAR)和非随机缺失(MNAR)三种机制,并以一个简单的例子展示了数据分布变化。文章通过比较均值插补、回归插补和高斯插补,强调了高斯插补在重现数据分布方面更优。评估插补方法时,不应仅依赖于RMSE,而应关注分布预测,使用如能量距离这样的指标。此外,即使在随机缺失情况下,数据分布也可能因模式变化而变化,需要考虑适应这些变化的插补方法。
188 2
|
6月前
|
算法 Java
Java中常用hash算法总结
Java中常用hash算法总结
52 0
|
7月前
|
算法 数据可视化 数据处理
Algorithms_算法专项_Hash算法的原理&哈希冲突的解决办法
Algorithms_算法专项_Hash算法的原理&哈希冲突的解决办法
54 0
|
7月前
|
存储 算法 索引
Python 数据结构和算法:什么是散列表(Hash Table)?在 Python 中如何实现?
Python 数据结构和算法:什么是散列表(Hash Table)?在 Python 中如何实现?
78 0
|
算法
29MyCat - 分片规则(固定分片hash算法)
29MyCat - 分片规则(固定分片hash算法)
55 0
|
存储 缓存 算法
数据结构与算法第十六讲:分布式算法之一致性Hash算法
数据结构与算法第十六讲:分布式算法之一致性Hash算法
132 0
|
存储 负载均衡 算法
一致性hash算法深入探究
一致性hash算法深入探究
78 0
|
算法 C# 流计算
MD5、SHA256等Hash算法的实时计算
MD5、SHA256等Hash算法的实时计算
|
算法 Unix 数据安全/隐私保护
常见的hash算法及其原理?
常见的hash算法及其原理?
111 0