在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?
发布于 2013-09-04 06:42:50
您可以在BeginTransaction API Reference中查看如何更改隔离级别。它目前只能在Google Cloud Datastore HTTP API中配置,对于所有App Engine SDK,它都默认为SERIALIZABLE。然而,我不认为这会实现您想要的效果。
SNAPSHOT vs SERIALIZABLE控制事务隔离或并发事务如何彼此交互。它不控制事务如何与自身交互(尽管在某些系统中,这两件事被合并在一起)。
在数据存储中,设置SERIALIZABLE将不会使其生效,因此事务将看到自己的未提交突变。这只意味着如果并发事务的读取和写入模式在序列化时无效,则它们将发生冲突。例如,使用SERIALIZABLE隔离时,以下两个事务必然会发生冲突:
TX1: READ A, WRITE B'
TX2: READ B, WRITE A'因为这两种排序都不可能:
READ A, WRITE B', READ B (conflict), WRITE A'
READ B, WRITE A', READ A (conflict), WRITE B'但是,这些事务不一定会与快照隔离冲突。
SNAPSHOT和SERIALIZABLE都从数据的“快照”中读取,就好像数据更改的方式与事务正在运行时的事务隔离保证相冲突,则无法提交事务。
https://stackoverflow.com/questions/17474911
复制相似问题