2

我正在集群中设置 ClickHouse 服务器,但文档中没有出现的一件事是如何管理大量数据,它说它可以处理高达 PB 的数据,但你可以' t 将那么多数据存储在单个服务器中。通常每个都有几个 teras。所以我的问题是,我该如何处理它以存储在集群的一个节点中,然后当它需要更多空间时,添加另一个,它会自动处理分配到新服务器还是我必须使用权重分片分布。

当您在一台服务器中有多个磁盘时,它如何使用它们来存储数据?

有没有办法将非常旧的数据存储在云中并在需要时下载?例如,所有超过 2 年的数据都可以存储在 Amazon S3 中,因为它几乎不会被请求,如果是,检索数据需要更长的时间,但不会有问题。

你会找到什么解决方案?处理不断扩展的数据库以避免将来出现磁盘空间问题。

谢谢

4

2 回答 2

5

我将假设您使用 ClickHouse 集群的标准配置:由 2-3 个副本节点组成的几个分片,在每个节点上都有一个 ReplicatedMergeTree 表,其中包含其各自分片的数据。还有一个或多个节点上创建的分布式表被配置为查询集群的节点(文档中的相关部分)。

添加新分片时,旧数据不会自动移至其中。推荐的方法确实是像你所说的那样“玩权重”,即增加新节点的权重,直到数据量均匀。但是如果你想立即重新平衡数据,你可以使用ALTER TABLE RESHARD命令。仔细阅读文档并记住这个命令的各种限制,例如它不是原子的。

当您在一台服务器中有多个磁盘时,它如何使用它们来存储数据?

请阅读管理提示中有关配置 RAID 的部分。

有没有办法将非常旧的数据存储在云中并在需要时下载?例如,所有超过 2 年的数据都可以存储在 Amazon S3 中,因为它几乎不会被请求,如果是,检索数据需要更长的时间,但不会有问题。

ClickHouse 中的 MergeTree 表按月分区。您可以使用 ALTER TABLE DETACH/ATTACH PARTITION 命令来操作分区。例如,您可以在每个月初分离某个较早月份的分区并将其备份到 Amazon S3。或者,您可以设置一组具有充足磁盘空间的廉价机器,然后手动将旧分区移到那里。如果您的查询始终包含日期过滤器,则将自动跳过不相关的分区,否则您可以设置两个分布式表:table_recent 和 table_all(集群配置包括具有旧分区的节点)。

于 2017-05-08T20:44:15.610 回答
2

19.15 版引入了多磁盘存储配置。20.1 引入了基于时间的数据重新排列。

于 2020-01-27T12:18:06.553 回答