首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >google应用引擎中的事务隔离

google应用引擎中的事务隔离
EN

Stack Overflow用户
提问于 2013-07-05 00:32:56
回答 1查看 405关注 0票数 9

在Google App Engine中,事务隔离被称为快照隔离,在快照隔离中,您看不到事务本身中以前的删除或but,而只看到事务开始时数据存储的状态(https://developers.google.com/appengine/docs/python/datastore/transactions)。在一篇老文章中,它说事务级别实际上是SERIALIZABLE (https://developers.google.com/appengine/articles/transaction_isolation)。

Google Test Compatibility Kit (TCK)显示它确实是快照隔离,但在前面的文章中,它说“在事务内部,另一方面,隔离级别默认是快照,可以选择更改为SERIALIZABLE”。

我的问题是,如何使隔离级别变为SERIALIZABLE?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-04 06:42:50

您可以在BeginTransaction API Reference中查看如何更改隔离级别。它目前只能在Google Cloud Datastore HTTP API中配置,对于所有App Engine SDK,它都默认为SERIALIZABLE。然而,我不认为这会实现您想要的效果。

SNAPSHOT vs SERIALIZABLE控制事务隔离或并发事务如何彼此交互。它不控制事务如何与自身交互(尽管在某些系统中,这两件事被合并在一起)。

在数据存储中,设置SERIALIZABLE将不会使其生效,因此事务将看到自己的未提交突变。这只意味着如果并发事务的读取和写入模式在序列化时无效,则它们将发生冲突。例如,使用SERIALIZABLE隔离时,以下两个事务必然会发生冲突:

代码语言:javascript
复制
TX1: READ A, WRITE B'
TX2: READ B, WRITE A'

因为这两种排序都不可能:

代码语言:javascript
复制
READ A, WRITE B', READ B (conflict), WRITE A'
READ B, WRITE A', READ A (conflict), WRITE B'

但是,这些事务不一定会与快照隔离冲突。

SNAPSHOT和SERIALIZABLE都从数据的“快照”中读取,就好像数据更改的方式与事务正在运行时的事务隔离保证相冲突,则无法提交事务。

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

https://stackoverflow.com/questions/17474911

复制
相关文章

相似问题

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