Druid的主要特性包括:
列式存储
Druid单独存储并压缩每一列数据。并且查询时只查询特定需要查询的数据,支持快速scan,ranking和groupBy。
原生检索索引
Druid为string值创建反向索引以达到数据的快速搜索和过滤。
流式和批量数据摄入
开箱即用的Apache kafka,HDFS,AWS S3连接器connectors,流式处理器。
灵活的数据模式
Druid优雅地适应不断变化的数据模式和嵌套数据类型。
基于时间的优化分区
Druid基于时间对数据进行智能分区。因此,Druid基于时间的查询将明显快于传统数据库。
支持SQL语句
除了原生的基于JSON的查询外,Druid还支持基于HTTP和JDBC的SQL。
水平扩展能力
百万/秒的数据摄入速率,海量数据存储,亚秒级查询。
易于运维
可以通过添加或移除Server来扩容和缩容。Druid支持自动重平衡,失效转移。
数据摄入
Druid同时支持流式和批量数据摄入。Druid通常通过像Kafka这样的消息总线(加载流式数据)或通过像HDFS这样的分布式文件系统(加载批量数据)来连接原始数据源。
Druid通过Indexing处理将原始数据以segment的方式存储在数据节点,segment是一种查询优化的数据结构。
数据存储
像大多数分析型数据库一样,Druid采用列式存储。根据不同列的数据类型(string,number等),Druid对其使用不同的压缩和编码方式。Druid也会针对不同的列类型构建不同类型的索引。
类似于检索系统,Druid为string列创建反向索引,以达到更快速的搜索和过滤。类似于时间序列数据库,Druid基于时间对数据进行智能分区,以达到更快的基于时间的查询。
不像大多数传统系统,Druid可以在数据摄入前对数据进行预聚合。这种预聚合操作被称之为rollup,这样就可以显著的节省存储成本。
查询
Druid支持JSON-over-HTTP和SQL两种查询方式。除了标准的SQL操作外,Druid还支持大量的唯一性操作,利用Druid提供的算法套件可以快速的进行计数,排名和分位数计算。
架构
Druid是微服务架构,可以理解为一个拆解成多个服务的数据库。Druid的每一个核心服务(ingestion(摄入服务),querying(查询服务),和coordination(协调服务))都可以单独部署或联合部署在商业硬件上。
Druid清晰的命名每一个服务,以确保运维人员可以根据使用情况和负载情况很好地调整相应服务的参数。例如,当负载需要时,运维人员可以给数据摄入服务更多的资源而减少数据查询服务的资源。
Druid可以独立失败而不影响其他服务的运行。
运维
Drui被设计成一个健壮的系统,它需要7*24小时运行。Druid拥有以下特性,以确保长期运行,并保证数据不丢失。
数据副本
Druid根据配置的副本数创建多个数据副本,所以单机失效不会影响Druid的查询。
独立服务
Druid清晰的命名每一个主服务,每一个服务都可以根据使用情况做相应的调整。服务可以独立失败而不影响其他服务的正常运行。例如,如果数据摄入服务失效了,将没有新的数据被加载进系统,但是已经存在的数据依然可以被查询。
自动数据备份
Druid自动备份所有已经indexed的数据到一个文件系统,它可以是分布式文件系统,如HDFS。你可以丢失所有Druid集群的数据,并快速从备份数据中重新加载。
滚动更新
通过滚动更新,你可以在不停机的情况下更新Druid集群,这样对用户就是无感知的。所有Druid版本都是向后兼容。
想了解时间序列数据库和对比,可移步另一篇文章:
时间序列数据库(TSDB)初识与选择
相关推荐:apache服务器
以上就是一文详解apache druid的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
如何使用ubuntu18.04和16.04 lts上let’s encrypt保护Apache
更多相关阅读请进入《Apache》频道 >>