大数据学习笔记--简单认识druid

druid简介

  • Druid是一个快速的列式分布式的支持实时分析的数据存储系统,其在处理pb级数据、毫秒级查询、数据实时处理方面,比传统的OLAP系统有了显著的性能改进。
  • 注意与阿里巴巴的数据库连接池同名项目druid做区分,两者没有任何关联。

druid的特点

  • 列式存储格式:
    • druid使用面向列的存储,它只需要加载特定查询所需要的列,所以查询速度很快
  • 可扩展的分布式系统:
    • druid通常部署在数十到数百台服务器的集群中,并提供数百万条每秒的摄取率,保留数百万条记录,以及亚秒级到秒级查询延迟
  • 大规模的并行处理:
    • druid可以在整个集群中进行大规模的并行查询
  • 实时或批量摄取:
    • druid可以实时摄取数据或批量处理数据
  • 自愈、自平衡、易操作:
    • 集群的扩展和缩小,只需要添加或删除服务器,集群会在后台自动重新平衡,无需任何停机时间
  • 数据进行了有效的预聚合或预计算,查询速度快
  • 数据结果应用了bitmap压缩算法

druid应用场景

  • 清洗好的记录实时录入,但是不需要更新操作
  • 支持宽表、不用join的方式(即只有一张单表)
  • 可以总结出基础的统计指标且只用一个字段表示的情况
  • 实时性要求性高的场景
  • 对数据质量的敏感度不高的场景

druid的数据存储

  • DataSource
    • druid中的DataSource相当于关系型数据库中的表,DataSource的结构包括:
      • 时间列:表明每行数据的时间值,默认使用UTC时间格式且精确到毫秒级别
      • 维度列:维度来自于OLAP的概念,用来标识数据行的各个类别信息
      • 指标列:是用于聚合和计算的列。通常是一些数字,计算操作通常包裹Count、Sum等等
    • 无论是实时数据消费还是批量数据处理,druid在基于DataSource结构存储数据时即可选择对任意指标进行聚合操作,该操作主要基于维度列与时间范围两方面的情况
    • druid在数据存储时就可以对数据进行聚合操作是其一大特点,该特点使得druid不光能够节省存储空间,而且能够提高聚合查询的效率
  • Segment
    • 在druid中,dataSource是数据存储的逻辑结构,而segment则是数据实际物理存储的格式
    • druid将不同时间范围内的数据存储在不同的segment数据块中,这便是所谓的数据横向切割,这样可以避免全表查询,极大的提高了效率
    • 在segment中,也采用面向列进行数据压缩存储(bitmap压缩技术),这便是所谓的数据纵向切割

druid的框架原理

  • druid中的主要构成节点:

    • MiddleManager Node:中间管理节点
      • 负责及时摄入实时数据,生成segment文件
    • Historical Node:历史节点
      • 负责加载已生成好的数据文件以供数据查询
      • historical节点时整个集群的查询性能的核心所在,因为大部分segment查询都由历史节点承担
    • Broker Node:查询节点
      • 负责接收客户端查询请求,并将这些查询转发给historicals 和 middle managers
      • 当broker从这些子查询中收到结果时,他们会合并这些结果并将其返回给调用者
      • 查询节点采用了缓存技术
    • overlord node:统治者节点
      • 负责监视middleManager进程,并且是数据摄入druid的控制器,他们负责将提取任务分配给middleManager并协调segment发布
    • coordinator node:协调节点
      • 组要负责历史节点数据负载均衡,以及通过规则管理数据的生命周期
  • druid的一些依赖组件:

    • deep storage:数据文件存储库
      • 存放生成的segment数据文件,并供历史服务器下载,对于单节点集群可以是本地磁盘,对于分布式集群一般是hdfs
    • metadata storage:元数据库
      • 存储druid集群的元数据信息,比如segment相关的信息,一般用mysql
    • zookeeper:
      • 为druid集群提供协调无父,如内部服务的监控、协调与统治者的选举
Druid是一款优秀的数据库连接池,它支持自动装配。在Spring Boot中,可以通过在application.properties或application.yml文件中配置Druid的属性,来自动装配Druid数据源。以下是一个示例配置: ``` spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 spring.datasource.maxWait=60000 spring.datasource.timeBetweenEvictionRunsMillis=60000 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=SELECT 1 FROM DUAL spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 spring.datasource.filters=stat,wall,log4j spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 ``` 在以上配置中,我们指定了Druid的连接池类型、数据库驱动、URL、用户名、密码等属性。除此之外,我们还可以指定连接池的一些参数,例如连接池的初始化大小、最小空闲连接数、最大连接数、连接等待超时时间、回收空闲连接的时间等。此外,我们还可以通过配置filters属性来启用Druid的一些过滤器,例如stat、wall、log4j等。最后,我们可以通过connectionProperties属性来指定一些连接属性,例如合并SQL、慢SQL的时间阈值等。通过这些配置,我们可以轻松地实现Druid的自动装配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值