Apache Druid是开源的分布式存储,核心设计吸取了数据仓库、时序数据、搜索系统思想,在实时分析体系里面创造了广泛的用户实例。Druid把3个系统的核心优势融入了数据抽取层,存储格式、查询层、核心架构。
Druid的核心优势:
- 列存储
Druid每一列单独存储和压缩,因此当查询时只需要读取需要的列来支持快速扫描查询、排序、聚合。 - 原生的搜索索引
Druid通过为字符串值创建倒排索引来实现快速的搜索和过滤。 - 流数据和批数摄取
对kafka、HDFS、AWS S3,流处理器等连接器开箱即用。 - 灵活的模式
Druid优雅的处理演进的模式和嵌套结构的数据。 - 基于时间优化的分区
Druid基于时间对数据智能分区,因此基于时间的查询速度比传统的数据极大的提高。 - 支持SQL
在jdbc和http上支持原生的json语言和Druid SQL。 - 横向扩展
Druid在生产环境支持了每秒摄取100万信息,存储几年的数据,提供压秒级查询。 - 维护简单
增加和移除服务器来上线和下线服务,Druid会自动调整。容错的架构容许服务器宕机。
用户实例
- 实时分析和智能
- 用户活动和行为
- 网络流
- 应用程序性能监控
- IOT设备指标监控
- OLAP和商业智能
适合Druid做数据库适用场景:
- 数据插入多,更新少。
- 查询数据中大部分是聚合和报表查询,也有搜索和扫描数据。
- 查询在100ms到几秒钟
- 数据中有时间(Druid对时间进行了优化和特别的设计)。
- 每次查询都是在一张大表中的选择部分字段。(不支持join)。
- 有高基数列(e.g. URLs, user IDs),在此列可以快速的计数和排序。
- 从Kafka、HDFS、文件系统、Amazon S3摄取数据。
不适合Druid的场景
- 低延迟更新主键记录。Druid支持流数据,但是不支持流数据更新。(流数据更新可以在后台批量更新)
- 离线报表系统,你对数据延迟关注度不大。
- 需要做大的join(实时表之间相互连接),查询需要很长时间完成。
翻译:
https://druid.apache.org/technology
https://druid.apache.org/docs/latest/design/