高效时间序列分析的开源利器: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在哪些方面可以进一步优化以更好地满足你的业务需求?热烈欢迎各位在评论区分享交流心得与见解!!!


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

相关推荐
咕噜签名分发冰淇淋4 分钟前
苹果ios的系统app应用WebClip免签应用开源及方式原理
ios·开源·cocoa
顾林海24 分钟前
探秘Android JVM TI:虚拟机背后的"隐形管家"
android·面试·性能优化
算家计算38 分钟前
一张图+一段音频=电影级视频!阿里Wan2.2-S2V-14B本地部署教程:实现丝滑口型同步
人工智能·开源·aigc
非优秀程序员1 小时前
免费宝藏书《MCP 从入门到实践(图文指南版)》速览
人工智能·开源·产品
AI Echoes2 小时前
LLMOps平台:开源项目LMForge = GPTs + Coze
人工智能·python·langchain·开源·agent
FutureUniant2 小时前
GitHub每日最火火火项目(9.10)
人工智能·microsoft·计算机视觉·ai·github
灵光通码2 小时前
自然语言处理开源框架全面分析
人工智能·自然语言处理·开源
就是帅我不改3 小时前
10万QPS压垮系统?老司机一招线程池优化,让性能飞起来!
后端·面试·github
狗头大军之江苏分军3 小时前
Meta万人裁员亲历者自述:小扎尝到了降本的甜头
前端·后端·github
杨杨杨大侠4 小时前
附录 1:🚀 Maven Central 发布完整指南:从零到成功部署
java·github·maven