1

文档很好地描述了如何准备范围分区数据以插入目标分片。如果我知道确切的散列函数,我可以类似地准备数据以插入散列分布表。

此处暗示了这样的功能,但我无法在源代码中的预期位置找到它。

Citus 在哪里确定在分片修剪期间使用的哈希函数?

4

2 回答 2

2

我们最近发布了 Citus 5.1。它COPY支持散列分区表,并且COPY至少比copy_to_distributed_table(现已弃用)快一个数量级。我们将很快更新我们的文档以阐明我们的COPY支持。

您可以从Red HatDebian PGDG 存储库安装 Citus 5.1。

于 2016-05-18T11:39:09.023 回答
1

来自metdos 的答案有助于解决潜在问题(缓慢的数据迁移),但看起来您仍然希望对“Citus 是否公开它使用的散列函数?”的原始问题有明确的答案。

这个问题的答案是“不,不是直接的,但它确实公开了每个分布式表的缓存信息,你可以使用它来发现你只需要调用的散列函数”。以下是如何做到这一点的草图......</p>

该函数DistributedTableCacheEntry将表的标识符作为其输入,并返回一个struct填充有哈希函数的值,该函数将用于该表。

它是一个公共函数,并且由 Citus 安装的标头公开,因此您应该能够链接它以编写一个 C 级 PostgreSQL 函数来散列给定它所属的表的分区值。请参阅FastShardPruning如何使用它。

签名可能看起来像:CREATE FUNCTION citus_hash(distrel regclass, anyelement partitionval) RETURNS integer. 伪代码:

  1. DistributedTableCacheEntry作为distrel参数调用
  2. 确保表是散列分区的
  3. 从缓存条目中获取哈希函数
  4. 确保partitionval是预期的类型
  5. 调用散列函数partitionval并返回结果

请参阅 PostgreSQL自己的文档以了解如何编写这样的函数。

于 2016-05-25T21:10:19.813 回答