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

news2025/1/15 16:50:08

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


信息

截至发稿概况如下:

  • 软件地址:https://github.com/questdb/questdb

  • 软件协议:Apache 2.0

  • 编程语言

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

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

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

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1641205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【neteq】tgcall的调用

G:\CDN\P2P-DEV\Libraries\tg_owt\src\call\call.cc基本是按照原生webrtc的来的:G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.cpptg对neteq的使用 worker 线程创建call Call的config需要neteqfactory Call::CreateAu…

C语言-链表实现贪吃蛇控制台游戏

使用C语言和链表实现贪吃蛇游戏 一、引言 贪吃蛇游戏是一个经典的游戏,它的玩法简单而富有挑战性。在这个博客中,我将分享如何使用C语言和链表数据结构来自主实现贪吃蛇游戏。我会详细介绍游戏的设计思路、编码过程、遇到的问题及解决方案,…

PG控制文件的管理与重建

一.控制文件位置与大小 逻辑位置:pgpobal 表空间中 物理位置:$PGDATA/global/pg_control --pg_global表空间的物理位置就在$PGDATA/global文件夹下 物理大小:8K 二.存放的内容 1.数据库初始化的时候生成的永久化参数,无法更改…

Java项目:基于SSM框架实现的在线医疗服务系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的在线医疗服务系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能…

基于小程序实现的投票评选系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

企业定制AI智能名片商城小程序:重塑营销场景,引领数字化营销新纪元

在数字化时代的浪潮中,多企业AI智能名片商城小程序以其独特的魅力和创新的功能,为消费者带来了前所未有的购物体验。它不仅是一个汇聚各类商品的购物平台,更是一个充满活力和创造力的社群生态。通过强化社群互动、鼓励用户生成内容以及引入积…

【Java从入门到精通】Java继承

继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父…

家庭用水安全新举措:保障自来水管和储水设施卫生

随着公众对家庭用水安全意识的提高,如何确保自来水管和楼顶储水罐的安全性和卫生已成为家庭生活中的重要议题。近期,专家针对此问题提出了一系列实用的注意事项和建议。 注意事项: 定期检查:专家强调,家庭应每季度至…

【华为 ICT HCIA eNSP 习题汇总】——题目集20

1、(多选)若两个虚拟机能够互相ping通,则通讯过程中会使用()。 A、虚拟网卡 B、物理网卡 C、物理交换机 D、分布式虚拟交换机 考点:数据通信 解析:(AD) 物理网卡是硬件设…

./build.sh:行1: g++: 未找到命令的错误问题在centos操作系统下面如何解决

目录 g: 未找到命令报错解释g: 未找到命令解决方法 centos操作系统,执行一个bash,bash命令很简单,就是用g编译一个C的程序。报告错误: ./build.sh:行1: g: 未找到命令 g: 未找到命令报错解释 这个错误表明在执行名为 build.sh 的…

ElasticSearch01(ES简介,安装ES,操作索引,操作文档,RestAPI)【全详解】

目录 一、ES简介 1. 数据库查询的问题 2. ES简介 1 ElasticSearch简介 2 ElasticSearch发展 3. 倒排索引【面试】 1 正向索引 2 倒排索引 4. ES和MySql 5. 小结 二、安装ES 1. 方式1:使用docker安装 1 准备工作 2 创建ElasticSearch容器 3 给ElasticSearch配置i…

Mybatis之Sqlsession、Connection和Transaction三者间的关系

前言 最近在看Mybatis的源码,搜到这篇文章Sqlsession、Connection和Transaction原理与三者间的关系,debug之后发现有不少疑惑,于是按照原文整理了一下,记录下debug中的一些困惑点。 对于我们开发来讲,不管跟任何关系…

ARP防火墙能够为网络安全贡献什么样的力量

ARP防火墙(Address Resolution Protocol Firewall)作为网络安全的一环,起到保护网络免受ARP欺骗攻击的关键作用。今天德迅云安全给您介绍ARP防火墙的相关方面,帮助您深入了解和认识这一关键的安全措施。 网络安全对于现代社会的信…

Python量化择时的技术指标函数

Python量化择时的技术指标函数 技术指标通过对原始数据(开盘价、收盘价、最低价、最高价、成交量、成交金额、成交笔数)的处理,来反映出市场的某一方面深层的内涵,这些内涵是很难通过原始数据直接看出来的。技术指标能客观地反映…

力扣763. 划分字母区间

Problem: 763. 划分字母区间 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建一个名为 last 的数组,用于存储每个字母在字符串 s 中最后出现的位置。然后,获取字符串 s 的长度 len。 2.计算每个字母的最后位置:遍历字符串 s&#xff0…

springboot整合mybatis配置多数据源(mysql/oracle)

目录 前言导入依赖坐标创建mysql/oracle数据源配置类MySQLDataSourceConfigOracleDataSourceConfig application.yml配置文件配置mysql/oracle数据源编写Mapper接口编写Book实体类编写测试类 前言 springboot整合mybatis配置多数据源,可以都是mysql数据源&#xff…

R语言数据探索与分析-运用时间序列预测模型对成都市API进行预测分析

一、研究背景 “绿水青山就是金山银山,要让绿水青山变成金山银山”让人们深刻的意识到环境的重要性。与此同时,由于现代生活水平的不断提高,所带来的环境污染也不断增多,空气以及环境的污染带来了越来越多的疾病,深刻…

SVM单类异常值检测

SVM是一种广泛使用的分类器,通常用于二分类或多分类问题。然而,在异常点检测的场景中,我们通常会将数据视为一个类别(即正常数据点),并尝试找到那些与正常数据点显著不同的点(即异常点&#xff…

OS考研chapter3内存管理

目录 一、基础知识点补充 1.内存、内存地址概念与联系 2.按byte编址 vs 按字编码 二、进程运行的基本原理 1.指令的工作原理 2.逻辑地址 vs 物理地址 3.从写程序到程序运行 (1)编辑源代码 (2)编译 (3&#xf…

深入浅出学习Pytorch—Pytorch简介与2024年最新安装(GPU)

深入浅出学习Pytorch—Pytorch简介 学习原因:Pytorch日益增长的发展速度与深度学习时代的迫切需要 Pytorch模型训练 pytorch实现模型训练包括以下的几个方面(学习路线) 数据:数据预处理与数据增强模型:如何构建模型模…