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

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间