我是Google CloudDatastore的新手,正在阅读文档。
(注:我们不打算使用谷歌的AppEngine,只是数据存储只)Google Cloud Datastore - 是否可以为单个根实体使用事务?
按照document,数据存储区支持事务,但
If you want to use queries within a transaction,
your data must be organized into entity groups in such a way
that you can specify ancestor filters that will match the right data.
所以我想,只要我想用事务,我不得不创建一些父键,并将其设置为祖先。父母的所有实体都有限制,即更新和事务只能每秒执行一次。
但是,我也看到插入的一个很简单的例子,在这里: https://cloud.google.com/datastore/docs/concepts/entities#datastore-insert-python
with client.transaction():
incomplete_key = client.key('Task')
task = datastore.Entity(key=incomplete_key)
task.update({
'category': 'Personal',
'done': False,
'priority': 4,
'description': 'Learn Cloud Datastore'
})
client.put(task)
它没有指定父,并使用一个事务中一个根实体,不是吗?甚至关于Transaction page中的示例,只有“只读事务”的示例明确指定了父级。其他人在实际存在的情况下是否忽略父母?
我想知道我可以使用事务没有实体组(=没有大的性能下降),如果我可以指定一个根实体的关键,但在文件中没有这样的描述......
如果有人能够澄清这一行为,我将不胜感激。谢谢。
这样做是否合法? --- (0)通过密钥查找某个根实体并检查其'版本'属性 (1)开始一个事务 (2)再次查找实体并检查'版本'。 (3-a)如果'version'与(0)相同,则更新该值并继续执行 (3-b),否则其他进程触及该实体,则跳过该作业。 (4)提交事务--- 基本上我想要实现的一种乐观锁单个实体可以同时处理一些任务,在这种情况下想知道如果我还是要准备一些类型的祖先给每一个实体以执行上述交易。 –
完全有效。作为参考,我们的交易本身使用乐观锁定。如果你只是在读写,你不必担心整个祖先的事情。它只考虑你是否在做SELECT/RunQuery。 –
好的,谢谢你的信息!这听起来可以将我们现有的MongoDB堆栈迁移到完全托管的DataStore。我感谢你的快速回应:) –