我正在研究Oracle SODA,因为它在我的Java项目中用作非sql的文档存储。
每个集合都表示为Oracle数据库中的一个SQL表。该表由一些字段组成,如包含JSON有效负载的BLOB和版本字段。
你能给我一些在版本字段中有用的用例吗?
如何使用?它是用于JSON版本控制,还是由数据库管理的私有字段?
发布于 2020-08-06 04:09:23
我假设您正在研究Java implementation of SODA (因为您提到您正在做一个Java项目)。
每个文档的版本组件由SODA自动维护,并用作文档内容已更改的指示器。只要文档内容发生变化(例如,由于替换操作符),版本就会发生变化。一种常见的有用方法是“乐观锁定”:在更新或删除事务中的文档之前,可以使用版本来确保文档没有更改。例如:
col.find().key("k1").version("123E...").replaceOneAndGet(...)这将替换具有键k1的文档,但前提是其版本与提供的十六进制版本字符串匹配(即,如果在您的事务上次读取文档后,另一个事务更新了文档,则其存储的版本将与提供给version(...)方法的版本不匹配,替换将不会成功)。
如何获取文档的当前版本?最初使用insertAndGet(...)插入文档时,返回的结果文档将包含为该文档自动生成的版本。如果使用replaceOneAndGet(...)成功更新了文档,则返回的结果文档也将包含更新后的版本。
如果你正在构建一个REST应用,Version也可以用作一个eTag。
有不同的版本控制方法可用(这些方法可以在集合创建时选择)。请参阅他们对here的描述。可以在创建集合的过程中选择合适的方法。
目前,本地数据库的默认值是SHA256,但我们正在从它转向UUID (它的生成成本更低,并且不会阻碍我们将来要做的一些优化)。它已经成为某些云环境(自治数据库云服务)中SODA的新默认设置。如果您想了解更多关于不同版本控制方法的优缺点的信息,或者如何使用这些方法来配置集合,请让我知道。通常,我们建议使用UUID,除非有充分的理由选择另一种版本控制方法。
https://stackoverflow.com/questions/62832954
复制相似问题