首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Berkeley-DB:多个数据库上的原子事务

Berkeley-DB:多个数据库上的原子事务
EN

Stack Overflow用户
提问于 2014-04-14 06:14:08
回答 2查看 518关注 0票数 1

我想使用不同的Berkeley-DB数据库在我的应用程序中存储不同类型的对象。可以使用DbTxn::commit原子地完成单个DB中的事务。但是,如果我使用多个数据库,我必须创建多个事务(每个数据库一个),对吗?在这种情况下,如果提交第一个事务成功,但第二个事务失败,那么是否有办法回滚已经提交的第一个事务?(就我所理解的DbTxn::abort而言,在提交事务后不再可能使用它。)

是否有办法实现跨多个数据库的原子事务?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-14 12:04:14

如果使用多个数据库,则不必创建多个事务。通过使用单个事务,您可以对多个DB进行操作。

有关Db::Open()的文档,请参见此链接

它有'DbTxn *txnid‘参数。您可以指定DB_ENV->txn_begin() API返回的事务id。因此,在打开DB之前,应该获得一个事务id。

仔细阅读给定文档链接中参数'txnid‘下的注释。

请注意,您不应该在Db::open() DB_AUTO_COMMIT中指定标志。相反,您将为您要操作的所有DB的参数'txnid‘指定相同的事务id。通过这种方式,您可以实现跨多个数据库的原子事务。

票数 3
EN

Stack Overflow用户

发布于 2014-04-14 06:52:18

通常,您需要类似于分布式tranzaction管理器之类的内容,完整的答案会填充书籍。参见“伯克利数据库手册”,第9章,“分布式事务和数据分发策略”,ISBN-10: 1-59059-672-2。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23053135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档