使用Java与QuestDB构建高性能时序数据应用
QuestDB 非常适合需要高性能写入,以及对面向时间的数据进行 SQL 访问的应用程序。它在金融市场、实时分析、可观测性、遥测和运营系统中尤其有用,这些场景中的数据持续到达,并且必须以低延迟进行查询。与通用数据库不同,QuestDB 是专门构建的,将时间作为存储和查询过程的核心要素。QuestDB 通过将时间序列架构与熟悉的 SQL 接口相结合,吸引了企业开发者。这种方法降低了具有关系查询经验的团队的学习曲线,同时提供了一个针对以追加为主、按时间顺序排列的工作负载进行优化的数据库。对于需要最新状态查询、历史分析、趋势检测和快速写入的系统,QuestDB 提供了一个实用的解决方案。
为什么 QuestDB 很重要
当应用程序既需要高写入速率,又需要对近期和历史数据进行快速分析查询时,QuestDB 表现出色。这对于具有连续数据流、需要快速业务响应的工作负载至关重要,例如市场价格、交易活动、遥测、基础设施指标、点击流数据、运营事件和实时业务指标。在这些情况下,数据库必须高效管理以追加为主的数据,同时支持直观的、跨时间范围的 SQL 查询。
因此,QuestDB 非常适合金融平台、可观测性系统、物流、能源、物联网和实时分析。例如,交易系统可以查询最新价格和历史区间,运营平台可以分析近期延迟和吞吐量,物流应用程序可以查看随时间变化的车辆或配送遥测数据。其面向 SQL 的模型对企业团队尤其有价值,既提供了熟悉的查询语言,也提供了为时间序列工作负载设计的架构。
实战:使用 Java 与 QuestDB
我们将构建一个简单的 Java 应用程序,使用 QuestDB 作为时间序列数据库。对于开发来说,最简单的开始方式是使用 Docker:
QuestDB 在 9000 端口提供 Web Console 和 HTTP 端点。容器运行后,你可以在浏览器中打开 http://localhost:9000 查看数据。
配置应用程序
Eclipse JNoSQL 使用 CDI 和 JSON-B 等 Jakarta API,以及 Eclipse MicroProfile Config。这些 API 可在 Helidon、Quarkus、Payara 和 Open Liberty 等流行 Java 运行时中使用。
添加 QuestDB 驱动程序依赖:
接下来,在 microprofile-config.properties 中配置时间序列数据库和 QuestDB 连接:
qdb 值指定 JNoSQL 时间序列管理器使用的逻辑数据库。QuestDB URL 使用驱动程序要求的连接格式。
对传感器数据建模
在本示例中,我们将使用一个简单的传感器读数模型:
Instant 字段记录测量时间,而其他字段描述该时刻的传感器读数。你也可以通过 Jakarta Data 暴露该实体:
使用 TimeSeriesTemplate
现在,你可以插入一系列读数,并查询最新状态和近期历史:
第一个查询检索 sensor-01 的最新读数。第二个查询检索有限的历史记录,并跳过最近一次观测。与按标识符检索记录相比,这种方法更适合典型的时间序列用例。
使用 Jakarta Data
你可以使用 Jakarta Data 存储库实现相同功能:
值得注意的是,QuestDB 的时间序列能力可通过与其他 NoSQL 时间序列驱动程序相同的 Java 编程模型使用。这让应用程序能够专注于最新状态、排序和近期历史等时间查询,而由驱动程序处理数据库特定的细节。
为什么 SQL 对采用 QuestDB 很重要
QuestDB 之所以脱颖而出,是因为它专注于时间序列并采用面向 SQL 的方法。当组织采用专用数据库时,团队往往需要费力学习新的查询语言和思维模型。通过提供熟悉的 SQL 接口,QuestDB 有助于降低这些采用障碍。团队已经熟悉过滤、排序、分组、聚合和限制结果集。保留这些概念可以让程序员专注于基于时间的挑战,而不是学习新的查询系统。当多个角色需要访问同一份数据时,这一点尤其有价值。
金融系统就是很好的例子。市场数据、汇率、交易和价格变动都是面向时间的,许多金融专业人士已经广泛使用 SQL。QuestDB 让团队能够利用现有的 SQL 专业知识,同时受益于为高频写入和基于时间的分析而优化的数据库。
这一优势同样适用于可观测性和运营分析。团队通常需要查询特定时间间隔内的指标,例如请求延迟、吞吐量、错误率或客户活动。使用熟悉的 SQL 构造可以更轻松地访问应用程序数据以进行分析。
QuestDB 的运行方式并不完全像传统关系数据库。它的架构和优化针对时间序列工作负载。最终结果是易用的查询体验,以及专为特定性能设计的存储引擎。对企业而言,这种组合非常强大:无需让团队放弃熟悉的查询模型,即可获得专门的时间序列性能。
结论
对于需要快速写入、最新状态查询、历史分析,以及对持续变化的数据使用 SQL 的应用程序来说,QuestDB 非常合适。借助 Eclipse JNoSQL 1.1.18,Java 开发者可以通过熟悉的 Jakarta API 使用这些能力,在 QuestDB 于底层处理时间序列专业化的同时,保持应用程序模型一致。DZone 贡献者表达的观点仅代表他们自己。