0

我正在尝试对 citus(postgres 的扩展)进行一些测量。对于那个任务,我正在 citus 上运行 tpc-ds 查询。我正在使用的 citus 是从这里获取的 master、workers 和 manager 的容器:https ://github.com/citusdata/docker 我可以通过添加他们的容器来添加workers。到目前为止一切顺利,但我在进行测量时遇到了麻烦,需要一些答案:

  1. 要使用所有工作人员,我需要运行 select_distributed_table/select_reference _table。是否将所有数据复制给所有工作人员(例如,16 名工作人员的 1TB 数据变成了 16 TB)?
  2. 如果我不使用 select_distributed_table 但添加工作人员,该操作有什么好处吗?
  3. 如果我已经运行了 select_distributed_table 并且后来添加了 worker,它是否会分发数据或者我需要再次运行 select_distributed_table?
4

1 回答 1

1
  1. 要使用所有工作人员,我需要运行 select_distributed_table/select_reference _table。是否将所有数据复制给所有工作人员(例如,16 名工作人员的 1TB 数据变成了 16 TB)?

引用表在整个集群中复制,分布式表在工作节点之间分片。

如果您在具有 16 个工作人员的 Citus 集群上针对具有 16 GB 数据的表运行以下查询

SELECT create_reference_table('ref_table');
SELECT create_distributed_table('dist_table','partition_column_name');

然后,每个工作节点将总共有 ~1 GB 的数据dist_table和整个 16 GB 的ref_table.

  1. 如果我不使用 select_distributed_table 但添加工作人员,该操作有什么好处吗?

如果您不执行重新平衡操作,或手动将分片移动到新节点,则添加新节点通常对您没有帮助。新节点将包含集群中的所有分布式对象(用户、函数、模式、类型等)和引用表的副本。唯一会命中这些新工作节点的查询将是那些仅访问引用表的查询。

  1. 如果我已经运行了 select_distributed_table 并且后来添加了 worker,它是否会分发数据或者我需要再次运行 select_distributed_table?

如果您运行SELECT create_distributed_table('events','id'),您将在当前工作节点上创建分片。events如果您稍后添加一些新节点,除非您进行重新平衡,否则您将看不到任何表分片。

但是,如果您运行,您将看到集群中所有节点中SELECT create_reference_table('customers')所有数据的副本。customers

于 2021-08-13T17:21:15.100 回答