翼度科技»论坛 编程开发 python 查看内容

Python工具箱系列(二十六)

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
ClickHouse(Click Stream,Data WareHouse)是俄罗斯的 Yandex于2016年开源的用于在线分析处理查询(OLAP:Online Analytical Processing)MPP架构的列式存储数据库(DBMS:Database Management System),能够使用 SQL 查询实时生成分析数据报告。特别值得称道的是Clickhouse没有走hadoop生态,采用 Local attached storage 作为存储,而hadoop目前已经发展的臃肿不堪了。
Clickhouse的特点有:

  • 列式存储,在特定场景下,能够获得很高的访问效率,并且节省空间
  • DBMS功能。几乎覆盖了标准SQL的大部分语法,为传统数据库使用者提供熟悉的操控体验
  • 多样化引擎
  • 高吞吐写入能力
  • 数据分区分片
  • 单表查询性能优异,多表JOIN查询较差
  • 适合于OLAP应用场景
  • Clickhouse社区活跃度高、版本迭代非常快,几乎几天到十几天更新一个小版本,我们非常看好它以后的发展。
Clickhouse之所以速度超快,在于其优良的系统架构设计,以及多个方向的优化。
主要包括:

  • 底层C++可以充分利用硬件优势
  • 摒弃了hadoop生态
  • 数据底层以列式存储
  • 利用单节点的多核并行处理
  • 为数据建立索引一级、二级、稀疏索引
  • 使用大量的算法处理数据
  • 支持向量化处理
  • 预先设计运算模型-预先计算
  • 分布式处理数据
一、安装
Clickhouse能够运行在linux/macos上,对于windows仍然支持不够,不建议在windows上尝试安装,但可以在windows上安装它的客户端。与Clickhouse官网提供的安装方式不同,我们选择使用apt安装。
主要原因是:

  • 虽然可以一键安装,但对于网络连接的要求高,稍有错误则前功尽弃
  • 大规模安装时,无法控制进度与验证
  • 无法利用缓冲机制,因此不可能在离线环境下完成安装
在ubuntu bionic上的安装过程如下所示:
  1. sudo apt-get update
  2. sudo apt-get -y install apt-transport-https ca-certificates dirmngr
  3. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
  4. echo "deb https://repo.clickhouse.tech/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list
  5. sudo apt-get update
  6. sudo apt-get install -y clickhouse-server clickhouse-client
  7. # 安装成功后以服务方式启动
  8. sudo service clickhouse-server start
  9. # 使用客户端连接
  10. clickhouse-client --password
复制代码
服务器配置文件位于/etc/clickhouse-server/config.xml。默认绑定在回环地址(127.0.0.1)上,可以使用下述方式改变为远程访问支持。
  1. vi /etc/clickhouse-server/config.xml
  2. # <listen_host>::</listen_host>
  3. sed -i 's/127.0.0.1/::/g' /etc/clickhouse-server/config.xml
  4. cat /etc/clickhouse-server/config.xml |grep listen_host
复制代码
二、Python访问
 
Clickhouse官网列出了python对应的库:
 

  • infi.clickhouse_orm
  • clickhouse-driver
  • clickhouse-client
  • aiochclient
  • asynch
国内应用较为广泛的是Clickhouse-driver,安装过程如下:
 
  1. pip install clickhouse-driver
复制代码
 
访问的示范代码如下:
  1. from clickhouse_driver import Client
  2. ch_host = '192.168.0.66'
  3. user = 'default'
  4. password = '8848is8848'
  5. dbname = 'default'
  6. tbname = 'pm25'
  7. # 连接并且查询
  8. client = Client(host=ch_host,user=user,password=password)
  9. def query(sqlstr):
  10.     result = client.execute(sqlstr)
  11.     print(result)
  12. query('show databases')
  13. query(f"DROP TABLE IF EXISTS {tbname}")
  14. query(f"CREATE TABLE {tbname} (x Int32) ENGINE = Memory")
  15. query('show tables')
  16. client.execute(f'insert into {tbname} values',((x,) for x in range(100)))
  17. query(f'SELECT * FROM {tbname} where x > 49 LIMIT 5')
复制代码
以上代码与普通的数据库操作类似,还没有体现出Clickhouse的优势。后续文章将以海量测量数据为例,对Clickhouse与正宗的关系数据库进行比较。
 

来源:https://www.cnblogs.com/shanxihualu/p/17147192.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具