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

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现