警告
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 | 包含时间值的列的名称,也是用于分区的 primary 列。 |
名称 | 类型 | 描述 |
---|---|---|
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 来重新平衡这些块。
关键词