大数据组件ClickHouse介绍
简介
clickhouse是一个高性能的列式存储分析数据库管理系统,由俄罗斯搜索引擎公司yandex开发。
clickhouse具有以下特点
- 高性能:clickhouse优化了查询和数据压缩算法,支持多维度数据分析和快速聚合查询。
- 分布式:clickhouse采用共享无状态架构,可以轻松实现水平扩展,并且支持数据分片、复制等功能。
- 可扩展性:clickhouse的内部存储格式非常灵活,可以根据需要添加或删除新的字段,支持pb级别的数据存储。
使用场景
clickhouse适用于以下场景:
- 海量数据处理:clickhouse可以轻松处理数十亿行的数据,并在秒级别内返回查询结果。尤其对于大批量数据的入库和存储,以及后续的统计分析,clickhouse可以提供很好的支撑。
- 复杂查询:clickhouse支持多种聚合函数和窗口函数,可以进行各种复杂的数据分析和查询操作。
- 实时数据分析:clickhouse支持实时数据导入和查询,可以在毫秒级别内完成大规模实时数据分析任务。它对于海量数据的查询速度,相比关系型数据库MySQL/PostgreSQL,提升了不止一个数量级。
- 总结一下,clickhouse适用于海量数据的写入、存储与查询分析,例如前端设备数据、日志数据、网页浏览数据等。
优势与劣势
优势
相比传统的关系型数据库管理系统,clickhouse具有以下优势:
- 查询速度快:clickhouse采用列式存储和数据压缩技术,可以大幅提升查询速度。
- 水平扩展方便:clickhouse采用共享无状态架构,可以轻松实现水平扩展。
- 数据安全性高:clickhouse支持数据分片和复制功能,可以确保数据的可用性和安全性。
- 存储成本低:相对于关系型数据库MySQL/PostgreSQL,文本数据库MongoDB,搜索引擎Elasticsearch,clickhouse是列式数据库压缩存储,且压缩比很高,能节省存储成本。
劣势
相比传统的关系型数据库管理系统,clickhouse也存在一些劣势:
- 对修改操作支持度不够:clickhouse适用于海量数据的写入与存储,但是不适合与需要经常修改变动的业务数据,数据修改可能会涉及大量part操作,也不会很实时的生效。
- 不支持事务:clickhouse不支持acid事务,对于需要事务支持的场景并不适合。
- 数据导入速度较慢:clickhouse在数据导入方面的表现并不优秀,如果需要大规模导入数据,则需要考虑额外的优化。clickhouse不建议频繁的写入,而是建议一大批数据一次写入。
- 复杂性:clickhouse是构建在高度优化和复杂数据结构之上的,这使得它需要更多的学习和经验才能正确地使用。对于初学者来说,它可能会有点困难。对于开发和生产使用,建议先从单节点clickhouse开始,单节点的clickhouse也足以支撑相当数量级的业务需求了。
- 查询限制:虽然clickhouse可以处理大型数据集,但它在某些查询方面存在限制。例如,它对join的支持不太友好,当然,对于大表join,无论哪个数据库都是要慎重处理的。
- 缺乏完整性约束:clickhouse没有内置的外键约束或其他完整性约束。因此,在数据输入时,必须谨慎确保数据的准确性和完整性。
- 社区规模:与其他流行的开源数据库相比,clickhouse的社区还相对较小。这意味着可能很难找到足够的技术支持或资源,以及扩展其功能等方面的帮助。
性能
单个查询吞吐量
- 如果数据被放置在page cache中,则一个不太复杂的查询在单个服务器上大约能够以2-10GB/s(未压缩)的速度进行处理(对于简单的查询,速度可以达到30GB/s)。
- 如果数据没有在page cache中的话,那么速度将取决于你的磁盘系统和数据的压缩率。
- 例如,如果一个磁盘允许以400MB/s的速度读取数据,并且数据压缩率是3,则数据的处理速度为1.2GB/s。这意味着,如果你是在提取一个10字节的列,那么它的处理速度大约是1-2亿行每秒。
- 对于分布式处理,处理速度几乎是线性扩展的,但这受限于聚合或排序的结果不是那么大的情况下。
处理短查询的延时时间
- 数据被page cache缓存的情况下,它的延迟应该小于50毫秒(最佳情况下应该小于10毫秒)。
- 否则,延迟取决于数据的查找次数。
- 延迟可以通过以下公式计算得知: 查找时间(10 ms)* 查询的列的数量 * 查询的数据块的数量。
处理大量短查询
- ClickHouse可以在单个服务器上每秒处理数百个查询(在最佳的情况下最多可以处理数千个)
- 但是由于这不适用于分析型场景。建议每秒最多查询100次。
数据写入性能
- 建议每次写入不少于1000行的批量写入,或每秒不超过一个写入请求
- 当使用tab-separated格式将一份数据写入到MergeTree表中时,写入速度大约为50到200MB/s。
- 如果您写入的数据每行为1Kb,那么写入的速度为50,000到200,000行每秒。如果您的行更小,那么写入速度将更高。
- 为了提高写入性能,您可以使用多个INSERT进行并行写入,这将带来线性的性能提升。
查询性能
- count: 千万级别,500毫秒,1亿 800毫秒 2亿 900毫秒 3亿 1.1秒
- group: 百万级别 200毫米,千万 1秒,1亿 10秒,2亿 20秒,3亿 30秒
- join:千万-10万 600 毫秒, 千万 -百万:10秒,千万-千万 150秒
- ClickHouse并非无所不能,查询语句需要不断的调优,可能与查询条件有关,不同的查询条件表是左join还是右join也是很有讲究的。
版权归原作者 坚持是一种态度 所有, 如有侵权,请联系我们删除。