警告
TimescaleDB v2.13 是最后一个包含对 PostgreSQL 版本 13、14 和 15 的多节点支持的版本。
创建一个跨多节点环境分布的 TimescaleDB 超级表。
create_distributed_hypertable()
替换了 create_hypertable() (旧接口)
。分布式表使用旧的 API。新的通用 create_hypertable
API 在 TimescaleDB v2.13 中引入。
名称 | 类型 | 描述 |
---|---|---|
relation | REGCLASS | 您要转换为超级表的表的标识符。 |
time_column_name | TEXT | 包含时间值的列的名称,以及用于分区的首要列。 |
名称 | 类型 | 描述 |
---|---|---|
partitioning_column | TEXT | 要分区的附加列的名称。 |
number_partitions | INTEGER | 用于 partitioning_column 的哈希分区数。必须 > 0。默认为 data_nodes 的数量。 |
associated_schema_name | TEXT | 内部超级表表的模式名称。默认为 _timescaledb_internal 。 |
associated_table_prefix | TEXT | 内部超级表数据块名称的前缀。默认为 _hyper 。 |
chunk_time_interval | INTERVAL | 每个数据块覆盖的事件时间间隔。必须 > 0。默认为 7 天。 |
create_default_indexes | BOOLEAN | 是否在时间/分区列上创建默认索引的布尔值。默认为 TRUE。 |
if_not_exists | BOOLEAN | 如果表已转换为超级表,是否打印警告或引发异常的布尔值。默认为 FALSE。 |
partitioning_func | REGCLASS | 用于计算值的分区的函数。 |
migrate_data | BOOLEAN | 设置为 TRUE 以将任何现有数据从 relation 表迁移到新超级表中的数据块。如果表非空,则不使用此选项会生成错误。迁移大型表可能需要相当长的时间。默认为 FALSE。 |
time_partitioning_func | REGCLASS | 用于将不兼容的主时间列值转换为兼容值的函数。该函数必须是 IMMUTABLE 。 |
replication_factor | INTEGER | 将相同数据写入的数据节点数。这是通过在此数量的数据节点上创建数据块副本完成的。必须 >= 1;如果未设置,则默认值由 timescaledb.hypertable_replication_factor_default GUC 确定。在更改默认值之前,请阅读 最佳实践。 |
data_nodes | ARRAY | 用于分布式超级表的数据节点集。如果不存在,则默认为访问节点(在其上创建分布式超级表的节点)已知的所有数据节点。 |
列 | 类型 | 描述 |
---|---|---|
hypertable_id | INTEGER | TimescaleDB 中超级表的 ID。 |
schema_name | TEXT | 转换为超级表的表的模式名称。 |
table_name | TEXT | 转换为超级表的表的表名。 |
created | BOOLEAN | 如果创建了超级表,则为 TRUE;当 if_not_exists 为 TRUE 且未创建超级表时,则为 FALSE。 |
创建一个表 conditions
,该表通过 'location' 列跨数据节点进行分区。请注意,空间分区数自动等于分配给此超级表的数据节点数(在本例中为所有配置的数据节点,因为未指定 data_nodes
)。
SELECT create_distributed_hypertable('conditions', 'time', 'location');
使用一组特定的数据节点创建一个表 conditions
。
SELECT create_distributed_hypertable('conditions', 'time', 'location',data_nodes => '{ "data_node_1", "data_node_2", "data_node_4", "data_node_7" }');
哈希分区:分布式超级表的最佳实践是启用 哈希分区。使用哈希分区,传入的数据在数据节点之间分配。不使用哈希分区,每个时间片的所有数据都写入单个数据节点。
时间间隔:遵循
create_hypertable
中定义的chunk_time_interval
指南。当您启用哈希分区时,超级表会均匀分布在数据节点之间。这意味着您可以设置更大的时间间隔。例如,您每天摄取 10 GB 的数据,这些数据分布在五个数据节点上,每个节点有 64 GB 的内存。如果这是这些数据节点服务的唯一表,请使用 1 周的时间间隔
7 days * 10 GB 70-------------------- == --- ~= 22% of main memory used for the most recent chunks5 data nodes * 64 GB 320如果您不启用哈希分区,请使用与非分布式实例相同的
chunk_time_interval
设置。这是因为所有传入数据都由单个节点处理。复制因子:
replication_factor
定义新创建的数据块复制到的数据节点数。例如,当您将replication_factor
设置为3
时,每个数据块都存在于 3 个不同的数据节点上。写入数据块的行将使用两阶段提交协议插入到所有数据节点中。如果数据节点发生故障或被移除,则不会丢失任何数据。写入在其他数据节点上成功。但是,丢失的数据节点上的数据块现在复制不足。当发生故障的数据节点可用时,使用调用 copy_chunk 重新平衡数据块。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。