Apache Druid-时序数据库

2024-06-18 22:20
文章标签 数据库 apache 时序 druid

本文主要是介绍Apache Druid-时序数据库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • Apache Druid:是是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台,旨在对大型数据集进行快速的查询分析("OLAP"查询)。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景,同时,Druid也通常被用来助力分析型应用的图形化界面,或者当做需要快速聚合的高并发后端API,Druid最适合应用于面向事件类型的数据。
  • 特性
    • 实时数据摄取:Druid能够实时地处理和索引数据,使其几乎可以立即查询。
    • 高性能查询:Druid优化了查询性能,特别是对于聚合查询和数据切片,这在传统的关系型数据库中可能需要很长时间。
    • 灵活的数据模型:Druid支持灵活的数据模型,允许用户定义数据的维度和度量,以适应不同的分析需求。
    • 水平扩展:Druid设计为分布式系统,可以水平扩展以处理PB级别的数据。
    • 高可用性:Druid的架构支持高可用性,通过复制数据和查询负载均衡来实现。
    • 丰富的集成:Druid可以与多种数据源和数据管道工具集成,如Apache Kafka、Apache Hadoop等。
  • 主要查询方式及参数说明
    • Druid原生查询
    • Druid SQL查询
    • 主要参数
      • queryType: 指定查询的类型,对于时间序列查询,这个值通常是 "timeseries"。
      • dataSource: 指定查询的数据源名称,即要从哪个数据表或数据集进行查询。
      • intervals: 定义查询的时间范围,可以是一个或多个时间区间。格式通常是 ISO 8601 格式,例如 "2019-01-01T00:00:00Z/2019-01-02T00:00:00Z"。
      • granularity: 指定查询的粒度,可以是 "all"(表示整个数据集)、"hour"、"day"、"week"、"month"、"year" 或自定义的粒度。
      • filter: 定义查询的过滤条件,可以是各种类型的过滤器,如选择器(selector)、布尔(boolean)等。
      • aggregations: 定义聚合操作,用于对数据进行汇总计算。可以包含多个聚合,每个聚合都有自己的字段名、类型和名称。
      • postAggregations: 定义在聚合之后执行的二次计算,用于对聚合结果进行进一步的处理。
      • dimensions: 指定要返回的维度列,可以是维度的数组。
      • metrics: 指定聚合操作的输出名称,通常与聚合操作中的 name 字段对应。
      • orderBy: 指定结果的排序方式,可以是按照时间或特定维度排序。
      • limitSpec: 定义结果集中返回的行数限制。
      • context: 提供查询的上下文信息,可以包含各种设置,如超时时间、查询优先级等。
      • having: 指定过滤聚合结果的条件,通常在聚合之后应用。
      • intervalsOverride: 覆盖查询中定义的时间区间。
      • descending: 指定是否按降序返回结果。
      • 案例:
        • {
        • "queryType":"topN",
        • "dataSource":"taxi_message",
        • "dimension":"local",
        • "threshold":2,
        • "metric":"age",
        • "granularity":"month",
        • "aggregations":[
        • {
        • "type":"longMin",
        • "name":"age",
        • "fieldName":"age"
        • }
        • ],
        • "filter":{"type":"selector","dimension":"sex","value":"女"},
        • "intervals":["2021-06-07/2022-06-07"]
        • }
    • Druid 最开始的时候是不支持 SQL 查询的,原生查询是通过查询 Broker 提供的 http server 来实现的
  • Druid API 接口及其作用
    • 原生查询方式
      • /druid/v2/pretty:JSON格式请求,返回JSON结果集
    • SQL 查询接口:
      • /druid/v2/sql:执行 SQL 查询,返回查询结果。
    • 数据摄取(Ingestion)接口:
      • /druid/indexer/v1/task: 提交数据摄取任务,用于将数据加载到 Druid 中。
    • 数据源(DataSource)管理接口:
      • /druid/coordinator/v1/datasources: 获取所有数据源的列表。
      • /druid/coordinator/v1/datasources/{dataSource}: 获取指定数据源的详细信息。
    • 任务管理接口:
      • /druid/indexer/v1/task: 提交数据摄取任务。
      • /druid/indexer/v1/supervisor: 管理数据摄取的监督器(Supervisor)任务。
    • 查询历史(Query History)接口:
      • /druid/query/history: 获取查询历史记录。
    • 集群协调(Coordinator)接口:
      • /druid/coordinator/v1/cluster: 获取集群状态信息。
      • /druid/coordinator/v1/leader: 获取当前集群的领导者节点。
    • 数据节点(Data Node)接口:
      • /druid/dataNode/v1: 获取数据节点的状态信息。
    • 历史节点(Historical Node)接口:
      • /druid/historical/v1: 获取历史节点的状态信息。
    • 实时节点(Realtime Node)接口:
      • /druid/v2/datasources/{dataSource}/intervals: 获取实时数据源的活跃时间区间。
    • 配置管理接口:
      • /druid/indexer/v1/worker: 获取工作节点的配置信息。
    • 监控和状态接口:
      • /druid/broker/v1: 获取 Broker 节点的状态信息。
      • /druid/overlord/v1: 获取 Overlord 节点的状态信息。
    • 元数据存储接口:
      • /druid/metadata/v1: 与元数据存储交互,例如获取或更新表的元数据。
    • 任务状态接口:
      • /druid/indexer/v1/task/{taskId}: 获取特定任务的状态和结果。
  • 开发人员须知的概念
    • 数据源:
      • 段的生命周期管理包括创建、发布和可用性检查。新创建的段首先由MiddleManager生成并标记为未提交(uncommitted),此时数据已经可以被查询。随着时间的推移,段会被提交并发布到深度存储,变为不可变(immutable),并由Historical进程进行管理。Coordinator负责监控新的段,并指导Historical加载这些段以提供服务
      • 数据源中的数据被组织成多个段(Segment),每个段代表一个时间区间的数据。例如,如果数据源按天分区,那么每个chunk将代表一天的数据。每个段内部,数据被优化存储,包括列式存储、使用位图索引进行索引等,这些都是为了加快查询速度而设计的。
      • 数据源在Druid中的作用类似于传统数据库中的表。每个数据源包含特定时间段的数据,并且可以按事件分区,也可以根据需要按其他属性进一步分区。这种分区机制使得Druid能够有效地管理和查询大量数据。
    • 索引:
      • Druid支持多种索引类型,包括全文搜索索引、嵌套索引和主键索引。这些索引类型可以单独使用或组合使用,以满足不同的查询需求。
      • 索引在Druid中是可选的,但如果正确使用,可以显著提高查询性能。例如,主键索引可以加速表扫描,而全文搜索索引则支持高效的文本搜索。
      • 索引的创建和管理是通过Druid提供的工具和API进行的,开发人员需要熟悉这些工具来优化他们的数据查询。
    • 查询语言:
      • Druid的原生查询语言提供了一种高效且灵活的方式来处理复杂的分析查询。这种语言支持各种操作,如时间序列分析、聚合和过滤。
      • 学习Druid的查询语言对于充分利用其分析能力至关重要。虽然起初可能是挑战性的,但掌握它可以极大地增强数据处理的能力。
    • 数据摄取:
      • Druid设计用于处理实时数据摄取,这意味着它能够快速接收并处理流数据。这对于需要快速响应数据变化的应用来说非常重要。
      • 数据摄取的过程可以通过Druid的管理界面或API进行配置,开发人员需要了解这些选项以确保数据的正确和高效流入。
    • 安全性:
      • Druid支持基于角色的访问控制,这允许管理员为不同的用户和应用程序分配不同的权限级别。
      • 开发人员需要了解如何配置这些权限,以确保数据的安全性和合规性。
  • 参考链接
    • 快速开始 · ApacheDruid中文技术文档
  • 对比

这篇关于Apache Druid-时序数据库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073216

相关文章

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、