我正在集群中设置clickhouse服务器,但是文档中没有提到的一点是如何管理大量数据,它说它可以处理多达PB的数据,但是不能在单个服务器中存储那么多数据。你通常会有几个兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆兆。所以我的问题是,我如何处理它来存储在集群的一个节点中,然后当它需要更多的空间时,添加另一个,它会自动处理到新服务器的分发,还是我必须处理碎片分发中的权重。
当一台服务器中有多个磁盘时,它如何使用所有磁盘来存储数据?
有没有办法在云中存储非常旧的数据并在需要时下载?例如,所有超过2年的数据都可以存储在amazons3中,因为它几乎不会被请求,如果是这样的话,检索数据将需要更长的时间,但这不会是一个问题。
你会找到什么解决办法?处理不断扩展的数据库以避免将来出现磁盘空间问题。
谢谢
2条答案
按热度按时间7uhlpewt1#
我假设您对clickhouse集群使用标准配置:几个shard由2-3个复制节点组成,每个节点上都有一个replicatedmergetree表,其中包含其各自shard的数据。还有在一个或多个节点上创建的分布式表,这些表被配置为查询集群的节点(文档中的相关部分)。
添加新碎片时,旧数据不会自动移动到其中。推荐的方法确实是如您所说的“使用权重”,即增加新节点的权重,直到数据量均匀为止。但是,如果要立即重新平衡数据,可以使用altertable reshard命令。仔细阅读文档并记住此命令的各种限制,例如它不是原子的。
当一台服务器中有多个磁盘时,它如何使用所有磁盘来存储数据?
请阅读管理提示中有关配置raid的部分。
有没有办法在云中存储非常旧的数据并在需要时下载?例如,所有超过2年的数据都可以存储在amazons3中,因为它几乎不会被请求,如果是这样的话,检索数据将需要更长的时间,但这不会是一个问题。
clickhouse中的mergetree表是按月分区的。您可以使用altertabledetach/attachpartition命令来操作分区。例如,您可以在每个月初分离旧月份的分区,并将其备份到amazons3。或者您可以设置一个具有足够磁盘空间的廉价计算机集群,并手动将旧分区移到那里。如果您的查询总是包含日期筛选器,则不相关的分区将自动跳过,否则您可以设置两个分布式表:table\u recent和table\u all(集群配置包括具有旧分区的节点)。
bqjvbblv2#
版本19.15引入了多磁盘存储配置。20.1引入基于时间的数据重排。