Cloudera Operational Database 使开发人员能够快速构建面向未来的应用程序,这些应用程序的架构旨在处理数据演变。它通过自动缩放等功能帮助开发人员自动化和简化数据库管理,并与Cloudera Data Platform (CDP) 完全集成。有关更多信息和 COD入门,请参阅我们的文章 Cloudera Data Platform Operational Database (COD) 入门。
此博客是“ Cloudera Operational Database 中的事务支持”博客系列中的第二篇。
要使用事务,您需要在创建表时逐表添加 TRANSACTIONAL 标志“TRANSACTIONAL=true”:
create table my_table (k BIGINT PRIMARY KEY, v VARCHAR) TRANSACTIONAL=true;
您还可以将现有表更改为事务性表,但要小心,因为您无法将事务性表切换回非事务性表。
ALTER TABLE my_other_table SET TRANSACTIONAL=true;
为了演示 COD 中事务的使用,让我们使用发生在仓库终端的“订单输入”示例。仓库有多个待售商品,客户不断下单。
以下是本示例中使用的表结构和示例数据。
代码示例的 Git 链接:
https://github.com/cloudera/cod-examples/blob/main/phoenix-read-write/src/main/java/com/cloudera/cod/examples/sql/TransactionalClient.java
ITEM:
创建语法:
样本数据:
现在让我们构建一个简单的 Java 应用程序来演示事务的用法以及 COD 如何处理冲突,以便当并发客户端尝试使用不同的事务同时更新相同的数据集时,数据库中存在一致的数据视图。
首先,使用上述结构创建表并填充Item和客户数据。
创建表:
这是创建包含订单表条目的订单的简单代码,创建订单行条目并将条目数量更新为单个事务。
现在让我们创建多个客户端来模拟来自不同终端的订单创建。
考虑到来自不同终端的客户端连接,以下代码创建多个连接。
您可以使用上面的 createOrder 方法在第一个终端中创建订单并直接提交更改。
事务完成后,数据存在item表中。
Item:
Order:
Order line item:
以下示例代码片段演示了 COD 如何使用第一次提交检测冲突,并抛出异常指示使用第二次提交检测到冲突。
仓库现在包含三个图书条目,第二个终端的操作员将这两个条目添加到订单中,但没有完成订单。与此同时,第三终端的另一位操作员在订单中添加了一个图书条目并完成了它。现在可用的图书条目数量是一个。因此,当第二个终端的操作员试图完成订单时,它失败了,因为订单中的一本书已经被第三个终端的操作员拿走了。
COD在提交第二个终端事务时抛出异常提示冲突,因为第二个和第三个终端躺在同一个条目上,而第三个终端提交时数量与第二个终端不一致。
在这篇博文中,我们通过一个涵盖端到端流程的示例演示了如何使用事务。有关 COD 事务支持的更多详细信息,请参阅COD 事务支持博客。
原文作者:Raj Rathee, Biplab Chakraborty, Rajeshbabu Chintaguntla, and Thiriguna Rao
原文链接:https://blog.cloudera.com/how-to-deploy-transaction-support-on-cloudera-operational-database-cod/