ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大数据利器分享--clickhouse

2022-05-27 19:00:34  阅读:413  来源: 互联网

标签:name -- tidb 利器 time 数据量 mysql 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

 

标签:name,--,tidb,利器,time,数据量,mysql,clickhouse
来源: https://www.cnblogs.com/lutt/p/16318791.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有