该文档很好地描述了如何准备范围分区数据以插入目标分片。如果我知道确切的散列函数,我可以类似地准备数据以插入散列分布表。
Citus 在哪里确定在分片修剪期间使用的哈希函数?
该文档很好地描述了如何准备范围分区数据以插入目标分片。如果我知道确切的散列函数,我可以类似地准备数据以插入散列分布表。
Citus 在哪里确定在分片修剪期间使用的哈希函数?
来自metdos 的答案有助于解决潜在问题(缓慢的数据迁移),但看起来您仍然希望对“Citus 是否公开它使用的散列函数?”的原始问题有明确的答案。
这个问题的答案是“不,不是直接的,但它确实公开了每个分布式表的缓存信息,你可以使用它来发现你只需要调用的散列函数”。以下是如何做到这一点的草图......</p>
该函数DistributedTableCacheEntry
将表的标识符作为其输入,并返回一个struct
填充有哈希函数的值,该函数将用于该表。
它是一个公共函数,并且由 Citus 安装的标头公开,因此您应该能够链接它以编写一个 C 级 PostgreSQL 函数来散列给定它所属的表的分区值。请参阅FastShardPruning
如何使用它。
签名可能看起来像:CREATE FUNCTION citus_hash(distrel regclass, anyelement partitionval) RETURNS integer
. 伪代码:
DistributedTableCacheEntry
作为distrel
参数调用partitionval
是预期的类型partitionval
并返回结果请参阅 PostgreSQL自己的文档以了解如何编写这样的函数。