Ohhnews

分类导航

$ cd ..
DZone Java原文

Valkey:将键值数据库带入企业级 Java

#valkey#键值数据库#jakarta nosql#企业级 java#多语言持久化

企业应用程序通常面临多种数据挑战。有些数据需要事务完整性和关系,而另一些数据则优先考虑快速、可预测的访问。会话、计数器、速率限制、临时状态、频繁访问的对象和协调数据可能无法从关系模型的复杂性中获益。在这些情况下,键值数据库的简单性就成为一种架构优势。这种简单性在分布式和云原生系统中尤其有价值,因为延迟、吞吐量以及可扩展性直接影响用户体验和基础设施成本。键值数据库提供了一种聚焦的方法:通过键来标识数据,并高效地检索或更新它。挑战在于选择一种技术,既能提供这种性能,又能满足企业应用程序所需的运营成熟度、生态系统支持和治理标准。Valkey 成功满足了这些需求。Valkey 源自 Redis OSS 谱系,是作为 Linux 基金会下与供应商无关的开源项目开发的,它提供了一个高性能键值平台,适用于缓存、应用状态、消息传递和主数据存储。除了作为另一种数据库选项之外,它还让组织能够探索键值持久化如何融入现代企业架构,并让 Java 应用程序无需与特定数据存储紧密耦合即可利用其优势。

为什么键值数据库很重要

键值数据库使用简单的数据模型,其中每个唯一键标识一个值。当应用程序能够直接定位所需数据时,这种简单性非常有效。通过支持直接读写,键值数据库通常能提供低延迟、高吞吐量和可水平扩展的运营模式。在企业系统中,该模型适用于分布式会话、缓存、计数器、速率限制、功能开关、购物车、临时工作流状态、幂等键、排行榜以及频繁访问的应用程序数据等场景。这些工作负载优先考虑按标识符快速访问,而不是联接、即席查询或复杂的关系约束。键值数据库的主要架构优势在于针对特定访问模式进行专门优化,而不是追求普遍的速度或简单性。当主要需求是检索给定键的当前值时,增加更复杂的持久化模型可能会引入不必要的开销。作为多语言持久化策略的一部分,键值存储使架构师能够将数据库模型与工作负载相匹配,而不是强迫所有工作负载使用单一数据库。

[LOADING...]

使用 Jakarta NoSQL 实践 Valkey

在企业 Java 中使用 Valkey 的一个关键优势是,它不需要新的编程模型。借助 Jakarta NoSQL 和 Eclipse JNoSQL,Valkey 成为统一 API 和映射模型背后的另一种键值实现。领域注解保持不变,因此在键值数据库之间切换通常只需更新驱动及其配置,而无需重写应用程序。这种抽象在架构上很有价值。应用程序依赖 Jakarta NoSQL 契约,而 Eclipse JNoSQL 管理与数据库的集成。尽管数据库特定功能可能会引入一些耦合,但使用可移植 API 的应用程序可以以最小影响切换键值实现。

[LOADING...]

本文将使用一个简单的 Java SE 示例。该持久化层以后可以支持 REST API、消息消费者、计划进程或其他企业架构,而无需改变核心数据库交互。

启动 Valkey

第一步是让一个 Valkey 实例可用。Docker 提供了一种在本地启动实例的便捷方式:

在 Valkey 运行后,将 Eclipse JNoSQL Valkey 驱动添加到 Jakarta NoSQL 基础设施中,其中包括 CDI、Eclipse MicroProfile Config 和 Jakarta JSON Processing。在外部配置连接:

由于 Eclipse JNoSQL 与 Eclipse MicroProfile Config 集成,你无需硬编码这些值。它们可以通过环境变量等配置源提供,符合十二要素应用(Twelve-Factor App)方法论。

映射实体

键值数据库的映射模型刻意保持简单。将该类标识为实体,并指定表示其键的字段:

重要的是,@Entity@Id 是映射抽象的一部分,而不是 Valkey 本身。领域模型不需要 Valkey 特定的注解。

使用 Jakarta NoSQL

Eclipse JNoSQL 提供 KeyValueTemplate,它是 Jakarta NoSQL Template API 针对键值数据库的专门化。这允许直接持久化和检索实体:

对于偏好存储库抽象的应用程序,Eclipse JNoSQL 与 Jakarta Data 集成:

这种方法让应用程序代码能够更直接地专注于领域操作:

值得注意的是,这段代码在实体或存储库中不包含任何 Valkey 特定的 API。Valkey 是基础设施选择,而 Jakarta NoSQL 和 Jakarta Data 仍然是面向应用程序的抽象。这种分离保证了如果底层键值技术发生变化,架构仍可复用。

结论

键值数据库对于需要直接访问、低延迟和高吞吐量(而非复杂查询或关系导航)的工作负载非常有效。本文探讨了该模型如何融入企业架构,以及 Valkey 如何通过 Eclipse JNoSQL 集成,使应用程序能够避免直接依赖供应商特定的 API。通过保持一致实体映射并使用 Jakarta NoSQL 或 Jakarta Data 抽象,切换键值实现主要成为基础设施和配置的问题。这一转变反映了企业 Java 的更广泛演进,因为该平台将其持久化能力扩展到传统关系数据库之外。借助 Jakarta Persistence、Jakarta Data、Jakarta NoSQL 以及 Eclipse JNoSQL 等工具,架构师可以为每个工作负载选择最佳数据模型,同时保留熟悉的编程抽象。Valkey 通过提供强大的键值选项增强了这一生态系统,使多语言持久化既可行又实用。DZone 贡献者表达的观点仅代表其个人观点。