我正在尝试设计我的应用程序引擎数据存储区代码,并且已经想到了一个潜在问题,并且无法在文档中找到有关在给定情况下会发生什么的任何具体信息。
当我去存储一个具有祖先的实体时,在存储它之前我检查以确保它的祖先存在于一个事务中,如果它不存在,我创建祖先。接下来,我开始另一个存储实体的事务,使用在上一步中找到或创建的祖先键创建它。在使用单个用户或极少数用户进行测试时,这永远不会成为问题,因为并发修改的机会最少,但是一旦部署,我担心的是在第一个事务之间的时间(创建/检索祖先) 和第二个事务(添加一个实体作为祖先的后代)另一个用户可能会删除祖先。
我最初的想法是让这一切作为一个事务发生,但在祖先不存在并且必须创建的情况下,检查我要创建的实体是否存在的祖先查询将失败,因为快照隔离模型数据存储。但是,我不确定这是否正确。
有人对此事有任何了解吗?如果祖先被删除,实体提交是否仍然可以使用现在不引用任何内容的父键?这会重新创建父级,以便将来对其进行检查将返回相同的密钥吗?我会测试这种情况,但我无法设计出一种切实可行的方法。