首页 > 解决方案 > Oracle Soda - VERSION 现场用例

问题描述

我正在研究Oracle SODA在我的 Java 项目中将其用作 no-sql 的文档存储。

每个集合都表示为 Oracle 数据库中的一个 SQL 表。该表由一些字段组成,例如包含 JSON 有效负载的 BLOB 和 VERSION 字段。

你能给我一些在版本领域有用的用例吗?

可以怎样使用?它是用于 JSON 版本控制,还是由数据库管理的私有字段?

标签: jsonoraclesodaoracle-soda

解决方案


我假设您正在查看SODA 的 Java 实现(因为您提到您正在做一个 Java 项目)。

每个文档的版本组件由 SODA 自动维护,并用作文档内容已更改的指示符。任何时候文档内容发生变化(例如,由于替换操作符),版本都会发生变化。一种有用的常用方法是“乐观锁定”:您可以使用版本来确保在更新或删除事务中的文档之前文档没有更改。例如:

col.find().key("k1").version("123E...").replaceOneAndGet(...)

这将用 key 替换文档k1,但前提是其版本与提供的十六进制版本字符串匹配(即,如果另一个事务在您的事务上次读取文档后更新了文档,那么其存储的版本将与提供给version(...)方法的版本不匹配,并且替换不会成功)。

您如何获取文档的当前版本?当您最初使用 插入文档insertAndGet(...)时,返回的结果文档将包含为该文档自动生成的版本。如果您使用 成功更新文档replaceOneAndGet(...),则返回的结果文档也将具有更新版本。

如果您正在构建 REST 应用程序,版本也可以用作 eTag。

有不同的版本控制方法可用(可以在集合创建时选择)。在这里查看他们的描述。可以在集合创建期间选择适当的方法。

目前,本地数据库的默认值是 SHA256,但我们正在从 UUID 转向 UUID(它的生成成本更低,并且不会阻止我们将来想要做的一些优化)。它已经是某些云环境(自治数据库云服务)中 SODA 的新默认设置。如果您想了解有关不同版本控制方法的优缺点的更多信息,或者如何使用这些方法配置集合,请告诉我。一般来说,我们建议使用 UUID,除非有充分的理由选择另一种版本控制方法。


推荐阅读