大数据组件ClickHouse介绍(场景、优劣势、性能)
简介使用场景优势与劣势优势劣势性能单个查询吞吐量处理短查询的延时时间处理大量短查询数据写入性能查询性能clickhouse是一个高性能的列式存储分析数据库管理系统,由俄罗斯搜索引擎公司yandex开发。clickhouse具有以下特点高性能:clickhouse优化了查询和数据压缩算法,支持多维度数据分析和快速聚合查询。分布式: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也是很有讲究的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献14条内容
所有评论(0)