我想运行以下算法(更像是javascript伪代码)
const transaction = datastore.transaction();
await transaction.run();
const parentKey = createKey(namespace, kind) // note that I leave the ID th be generated
await transaction.save(ancestorKey, parentEntity);
const childKey = createKey(namepsace, kind, parentId, parentKind) // ???
await transaction.save (ChildKey, childEntity);
await transaction.commit();
由于尚未提交parentEntity的初始保存,我如何知道parentId?
我想将其运行到单个事务中,这可以实现吗?
答案 0 :(得分:1)
否,由于数据存储区的transaction isolation and consistency(强调我),因此无法实现:
此一致的快照视图也扩展为写入后读取 内部交易。与大多数数据库不同,查询和获取 在Cloud Datastore交易中看不到的结果 先前在该事务中进行写入。具体来说,如果一个实体是 在事务中修改或删除,查询或查找返回 实体开始的原始版本 交易,或如果实体不存在则不进行交易。
根据您为什么实际上需要以事务方式完成这样的顺序,您可能可以通过这种方式获得某种等效的东西:
请注意,由于推送任务队列支持有限,并非所有GAE环境都支持这种方案。