Citus PostgresQL需要注意哪些设置

Citus PostgresQL需要注意哪些设置,postgresql,citus,Postgresql,Citus,我们正在研究使用CITUDB。在阅读了所有的文档之后,我们对一些基本原理还不清楚。希望有人能指点方向 在Citus中,您可以指定shard_count和shard_max_size,这些设置是根据文档在协调器上设置的(但奇怪的是,也可以在节点上设置) 当您指定1000个碎片并将10个表与100个客户端一起分发时会发生什么 它是否为每个表(users_1、users_2、shops_1等)创建一个碎片(因此有效地使用了所有1000个碎片) 如果再增加100个客户机,我们已经达到了1000个限制,

我们正在研究使用CITUDB。在阅读了所有的文档之后,我们对一些基本原理还不清楚。希望有人能指点方向

在Citus中,您可以指定
shard_count
shard_max_size
,这些设置是根据文档在协调器上设置的(但奇怪的是,也可以在节点上设置)

当您指定1000个碎片并将10个表与100个客户端一起分发时会发生什么

  • 它是否为每个表(users_1、users_2、shops_1等)创建一个碎片(因此有效地使用了所有1000个碎片)

  • 如果再增加100个客户机,我们已经达到了1000个限制,那么这些表是如何分区的

  • shard_max_size
    默认为1Gb。如果一个shard大于1Gb,则会创建一个新的shard,但是当已经达到shard_计数时会发生什么情况

  • 最后,是否建议购买3000个碎片?我们在文档中读到128是针对saas的。但是如果您有100个客户机*10个表,这一比例就会很低。(我知道这取决于..但是..)


  • 前Citus/现任微软员工在这里,提出一些建议

    Citus碎片基于分发密钥的整数散列范围。插入行时,分发密钥的值将被散列,计划者将查找分配给哪个碎片的散列值范围,然后查找碎片所在的工作进程,然后在该工作进程上运行insert。这意味着Tomer以一种大致均匀的方式被划分为多个碎片,当您添加一个新客户时,它只会进入一个现有的碎片

    非常重要的一点是,您希望彼此连接的所有分布式表都具有相同数量的碎片,并且它们的分发列具有相同的类型。这让我们可以完全在worker上执行连接,这对于性能来说非常棒

    如果你有一个超级大客户(100倍于普通客户的数据是一个不错的启发),我会提前使用租户隔离功能为他们提供自己的碎片。如果你决定这样做,这将使他们更容易移动到专用硬件

    shard\u max\u size
    设置对散列分布表没有影响。随着不断插入数据,碎片将无限增长,散列分布表在正常操作下永远不会增加其碎片数。此设置仅适用于追加分布,这在现在很少使用(我能想到一两家公司在使用它,但仅此而已)


    <>我强烈建议不要改变你所描述的用例的Studio.SaldyCo计数。64或128可能是正确的,如果你看的是100TB的数据,我会考虑256。如果你最终有数千个分布式表,每个都有128个碎片,这是非常好的,但是最好保留每个表的碎片数量。e合理。

    令人惊讶的详细答案!有关更多信息,请访问slack.citudata.com