分布式结构
clickhouse是multi-master结构,即所有节点均是数据操作节点,每个节点均知道所有的数据片存放的节点
ES是master-slave 结构,分master节点和数据节点,数据meta信息存放于master节点
数据结构
clickhouse是列式存储并且是有序的,ES采用倒排索引的数据结构。
clickhouse没有二级索引(阿里云上的clickhouse完事了二级索引),ES提供二级索引
写入实时性
clickhouse直接写入磁盘并且只需要完成一个数据分区的写入即返回成功,后续通过异步写入其他备份分区,所以效率较高。
ES 先写入内存,然后写TransLog(每隔30分钟才刷入磁盘-可设定)。ES必须穿透性写入所有内存副本才会返回成功,所以会牺牲实时性
高并发效率
高并发效率一般以吞吐能力作为判断标准。 clickhouse一个查询都会占用一半的CPU,ES直接查询内存,所以ES的高并发处理能力更好(阿里云的clickhouse完善了二级索引从而降低了IO吞吐压力所以在高并发效率和ES旗鼓相当)。由于ES是预热数据到内存,当查询返回数据量大的时候由于产生大量的IO,反而ES处理能力会急剧下降,clickhouse并行扫描数据分片所以无论扫描多少数据块耗时都是一样的。
单并发效率
单并发效率一般以响应时间作为判断标准(即扫描效率)。
ES先查询二级索引,然后再扫描一级索引(数据和一级索引是同一个B+树节点,所有无需再次查询数据),所有ES一次查询经过2次数据扫描。
clickhouse采用的是列式存储(列存储的数据因为数据的相似度更高所以压缩比更高,IO吞吐压力相对较低)并使用SIMD实现向量化(列式存储才支持向量化查询)执行(离CPU越近访问越快)
由于clickhouse的扫描能力更加出色,所以clickhouse的单并发比ES更加出色。
计算能力
ES是汇合制模式,即各节查询top数据然后合并到查询节点再次进行top排序,由于不具备流式计算能力当返回数据量非常大的时候容易产生GC或者把节点跑死。
clickhouse利用C++写的向量化计算 加上 借住SIMD计算能力,使得查询聚合操作发挥极高的效率。
技术选型
clickhouse 是列式存储所以无法进行全文检索,所以更适合数据分析的需求。
elasticsearch更适合高并发并且查询返回结果较少的全文检索,如搜索引擎。