高效时间序列分析的开源利器:QuestDB

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

概览

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

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

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

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

  • 列存储模型:优化查询效率。

  • 并行化向量执行:加快计算速度。

  • SIMD 指令集:进一步提升性能。

  • 低延迟技术:确保快速响应。 这些特性使得 QuestDB 成为一个在性能和易用性方面都表现出色的数据库解决方案。

存储模型

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 trips 0.15 secs
SELECT sum(double), avg(double) FROM trips 0.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 1h 0.01 secs
SELECT * FROM trades LATEST ON time PARTITION BY symbol 0.00025 secs
QuestDB 与其他开源 TSDB 的对比

列存储模型

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

实时分析

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

多协议支持

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

高性能摄取

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

易于扩展

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


信息

截至发稿概况如下:

语言 占比
Java 91.4%
C++ 5.7%
C 1.9%
Assembly 0.9%
CMake 0.1%
  • 收藏数量:13.5K

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

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

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


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

相关推荐
中科三方1 小时前
什么是权威解析服务器?权威解析服务器哪些作用?
服务器·git·github
星辰离彬9 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
java·spring boot·后端·sql·mysql·性能优化
极客BIM工作室9 小时前
OCCT基础类库介绍: Foundation Classes - Basics
开源
2301_794333919 小时前
Maven 概述、安装、配置、仓库、私服详解
java·开发语言·jvm·开源·maven
thels_11 小时前
记录一个用了很久的git提交到github和gitee比较方便的方法
git·gitee·github
一只叫煤球的猫12 小时前
虚拟线程生产事故复盘:警惕高性能背后的陷阱
java·后端·性能优化
三道杠卷胡15 小时前
【AI News | 20250609】每日AI进展
人工智能·python·语言模型·github·aigc
W说编程16 小时前
Linux与量子计算:面向未来的架构演进
linux·服务器·性能优化·架构·系统架构·量子计算
Luckyfif16 小时前
🤯由 性能指标 散发开来的 Performance API 被问爆了呀
前端·面试·性能优化