大数据利器分享--clickhouse
之前使用数据库较多的是mysql,其次是redis和mongo。应对数据量较大的情况时:对mysql做了分区存储。mysql在常规情况下的存储量级是:2000万。但是当数据量越来越大的情况下,效率也会相应降低。
场景:从es获取了应用日志,入库后分析。首先用开源框架“达芬奇”将入库后的数据进行展示,默认展示7天,一张表大概12万数据量,整表数据量大概60万。表结构不算复杂、大数据量导致慢sql,达芬奇页面加载极慢。
于是将数据库切换成了大数据利器clickhouse,至今的数据量大概是440万,通过达芬奇尝试了,一次性查询这440数据量,秒级加载,无比厉害
当时切换数据库时候主要的选型有clickhouse和tidb。主要的使用场景:大量插入、少量修改、join查询。于是查了两款的区别,在dba的推荐下使用了ck。什么是ClickHouse? | ClickHouse Docs
最近调研了两种数据库,TiDB和clickhouse。 tidb比mysql快100倍; clickhouse比tidb又快100倍。 这是因为clickhouse是列式存储,特别擅长olap。 tidb和Mysql是行式存储,非常擅长oltp; tidb最大的优点是兼容 100%的mysql oltp场景,可以做数据横向扩展,解决了单机容量扩展的问题。 另外,tidb能解决80%的olap场景,但剩下的20%场景是对超大表的join却没有太多的性能提升,需要借助tispark。 在目前数据分析领域,必须引入新的工具,才能解决分析慢的问题; 如果单从提升硬件资源,换SSD,优化慢sql、设计合适的索引等,都是无法解决MySQL做大数据分析慢的问题的。 数据分析也是非常重要的一个事项,关乎着公司高层对公司发展的决策和引导。 目前,在tidb和clickhouse对比上,就是clickhouse查询速度太快了。 但是,我现在比较纠结的是clickhouse是能和mysql保持增量同步的,但是只支持insert语句的同步,对于update和delete目前还不支持。
python中使用ck
from clickhouse_driver import Client from clickhouse_driver import connect def clickhouse_conn(): client = Client(host='1.1.1.1',port='9300',database='nglog',user='xxxxxx',password='xxxxxx') return client client = clickhouse_conn() client.execute(sql)
ck的问题:id不自增,于是使用了uuid作为主键
建表语句:
CREATE TABLE xxx_record ON CLUSTER cluster_1shards_1replicas ( id UUID, host_name String, host_name_counts String, create_time DateTime ) ENGINE = ReplicatedMergeTree('/clickhouse/nglog/tables/{shard}/xxx_record','{replica}') PARTITION BY toYYYYMMDD(create_time) # 以创建时间做分区 PRIMARY KEY id ORDER BY id;
插入数据。获取uuid的sql语句是:select generateUUIDv4(),在插入数据时用函数generateUUIDv4()来生成uuid
sql ="insert into 表名 values (generateUUIDv4(),'{port}','{ip}','{pro_name}','{domain}','{create_time}')".format( port=damin_obj.get('port'), ip=damin_obj.get('ip'), pro_name=damin_obj.get('pro_name'), domain=damin_obj.get('domain'), create_time=current_time )
过程中遇到的问题:在建表时候报错如下,是因为还有个从库,主从同步出现了问题,正常情况下,作了主从同步后,主库ddl后,从库也会执行同样的ddl,且不会报错。
SQL 错误 [122] [07000]: Code: 122, e.displayText() = DB::Exception: Table columns structure in ZooKeeper is different from local table structure (version 21.7.3.14 (official build)) , server ClickHouseNode(addr=http:1.1.1.1:9301, db=default)@2121917372
python 中文名:蟒蛇,设计者:Guido van Rossum