QuestDB探索数据的深度,加速决策的速度精选真开源,释放新价值。

image

概览

时序数据库(Time Series Database,简称TSDB)是一种专门设计和优化的数据库系统,用于高效地存储、管理和查询带有时间戳的数据序列,即时间序列数据。这类数据库的核心特点是处理那些随时间变化的数据,如传感器测量值、服务器性能指标、股票价格、天气数据等,其中每个数据点都关联了一个精确的时间戳。

QuestDB 是一个开源的高性能 SQL 时序数据库,专为金融服务、物联网、机器学习、DevOps 和可观测性等应用场景设计。自2014年开源以来,它一直是一个面向列的时序数据库,旨在优化时间序列和事件数据的处理。

QuestDB 采用 Java 和 C++ 进行开发,具有较少的外部依赖,目前以单机模式运行,主要基于本地磁盘存储。它支持 InfluxDB 行协议、PostgreSQL 协议,以及通过 REST API 进行查询、批量导入和导出操作。    

QuestDB 的 SQL 语言扩展了时间序列功能,使得实时分析变得简单直观。 作为一个时间序列数据库,QuestDB 特别适合处理金融市场数据、应用程序指标、传感器数据等,适用于实时分析、仪表盘展示和基础设施监控等多种用途。它遵循 ANSI SQL 标准,并提供原生的时间序列扩展,简化了多源数据的相关性分析。     QuestDB 的核心优势在于:

  • 列存储模型:优化查询效率。
  • 并行化向量执行:加快计算速度。
  • SIMD 指令集:进一步提升性能。
  • 低延迟技术:确保快速响应。 这些特性使得 QuestDB 成为一个在性能和易用性方面都表现出色的数据库解决方案。

image

存储模型

QuestDB 采用列存(column-based)存储模型,表里的数据按列存储到不同的文件,每次新的写入数据追加到文件末尾,保持跟写入顺序一致。

追加模型

QuestDB 采用列存模型,每个列存储到不同的文件,文件通过 mmap 方式映射到内存,每次写入直接在映射内存大末尾追加数据,非常高效,对于定长类型列,通过行号就能固定定位到数据位置;针对变长类型列,每个列除了对应一个数据文件,还要对应一个索引文件,索引文件的记录为定长,指向各个记录在数据文件的位置。

一致性和持久性

QuestDB 能保证每次写入的表级别的原子性,每张表会单独维护 last\_committed\_record\_count(txn\_count), 读取时 QuestDB 确保不会读到行号超过 txn\_count 的记录,确保与正在写入事务的隔离性,当新记录的各个列都更新成功时,QuestDB commit 事务更新 last\_committed\_record\_coun提交事务。数据的持久性级别可以在 commit 时指定不同的参数,是每次提交持久化还是周期性做持久化。


主要功能

尝试 QuestDB

你可以在线体验https://demo.questdb.io,其中包括最新的 QuestDB 版本 和几个样本数据集:

  • Trips: 近 10 年的纽约市出租车行程轨迹数据集,含 1.6 亿行的数据。
  • Trades: 每月30M+的实时加密货币市场数据。
  • Pos: 含有 25 万艘船的时序地理数据集。
查询运行时间
SELECT sum(double) FROM trips0.15 secs
SELECT sum(double), avg(double) FROM trips0.5 secs
SELECT avg(double) FROM trips WHERE time in '2019'0.02 secs
SELECT time, avg(double) FROM trips WHERE time in '2019-01-01' SAMPLE BY 1h0.01 secs
SELECT * FROM trades LATEST ON time PARTITION BY symbol0.00025 secs

QuestDB 与其他开源 TSDB 的对比

image

列存储模型

QuestDB采用面向列的存储方式,这种模型在处理分析型查询时,能够提供更高的效率和更低的I/O消耗。

实时分析

通过时间序列扩展的SQL,QuestDB能够协助进行实时数据分析,为需要快速响应的业务场景提供支持。

多协议支持

支持InfluxDB行协议、PostgreSQL协议和REST API,使得QuestDB可以无缝集成到现有的数据生态系统中。

高性能摄取

QuestDB为高吞吐量数据摄取进行了优化,能够快速处理大量数据流入,满足实时监控和分析的需求。

易于扩展

QuestDB设计为单机运行,但通过其REST API和支持的协议,可以轻松扩展以适应更大的数据量和查询需求。同时还兼容 PostgreSQL 访问协议,以及 InfluxDB 写入的访问协议。QuestDB 还自带 Web Console,方便数据库的基本访问。

image


信息

截至发稿概况如下:

语言占比
Java91.4%
C++5.7%
C1.9%
Assembly0.9%
CMake0.1%
  • 收藏数量:13.5K

QuestDB以其高性能和实时分析能力,为用户提供了一个强大的时间序列数据库解决方案。它的设计哲学在于简化数据的存储和查询,同时保持高效的性能和易用性。

在处理大规模时间序列数据时,如何平衡存储效率和查询性能?QuestDB通过其列存储模型和向量化的执行引擎,提供了一个高效的解决方案。然而,对于非结构化数据的处理,QuestDB可能需要进一步的优化。社区可以通过开发插件或集成其他工具来扩展QuestDB在这方面的能力。

你在实时数据分析和处理时间序列数据时遇到了哪些挑战?你认为QuestDB在哪些方面可以进一步优化以更好地满足你的业务需求?热烈欢迎各位在评论区分享交流心得与见解!!!


声明:本文为辣码甄源原创,转载请标注"辣码甄源原创首发__"__并附带原文链接。


辣码甄源
13 声望20 粉丝

开源软件综合服务商,为开源人员提供可持续发展通道、为学习人员提供便捷学习渠道、为企业方提供开源定制化落地方案,发现、助力、合作、共赢开源好项目