从文档中,我看到我们可以使用partitioning_func
定义一个自定义的空间分区函数。然而,我没有找到任何关于如何定义分区函数以及它应该返回什么的实际例子。
我读到的是,默认情况下它使用INT 32_MAX(哈希表中的键范围),例如,如果我们给予number_partitions=2
,那么数值<INT 32_MAX/2将落入第一个分区,其余值将落入第二个分区。
在我的例子中,假设我在空间分区列中有很少的不同值,那么根据默认的哈希函数,很明显所有的值都落在第一个分区中。但是,我希望每个不同的值都在不同的分区中。
3条答案
按热度按时间lsmd5eda1#
您可以使用
add_dimension
向TimescaleDB Hypertable添加多个维度。空间分区的主要目的是在同一时间间隔内实现跨多个数据节点(在分布式超表的情况下)或跨多个磁盘的并行化。
有一些警告,包括:
add_dimension
的用例/需求相对有限在文档中有更多关于用法的细节,但这可能是你要找的。
yks3o0rb2#
我想出了一个解决方案,如果我在空间分区列中有2个不同的值,我想把每个值放在一个单独的分区中(这意味着我有2个分区)。
正如我在我的问题中提到的,timescale似乎在c语言中使用
INT32_MAX
。其中INT32_MAX
的值是2147483647
,所以我将其除以2,以指导timescale根据我的空间分区值(1或2)使用2个不同的分区。下面的代码对我来说很有效。我使用的是Postgres 12和TimeScale 2.3.1
字符串
我不确定这是否是一个好的方法,让我知道你是否有更好的方法。
chy5wohz3#
我相信这可能会起作用:
如果你想让我们说100租户/分区,并使用smallint从0到99计数。因为2147483647/100 = 21474836,函数看起来像这样:
字符串