任务:实现全局,跨实体组blob共享。
我需要一个祖先组,其BlobInfo或BlobKey的字符串表示形式作为BlobReference对象的父级,以具有强一致性。所以我构建了一个虚拟祖先组,其中blob-key是引用DB对象的父级...
br = BlobReferenece(id=some_id, parent = ndb.Key("MyBlobKey",str(blob)))
br.put()
到目前为止,这在SDK中有效,但我担心这是远离有关记录的appengine路径。
我以前的尝试无法使用ndb.Key.from_old_key(blobinfo.key())将blob-key转换为db-key。似乎没有合法的方法来获取BlobInfo表的“db / ndb”引用(因为BlobInfo类提供了 db.Model类接口)。我在这里错过了什么吗?
答案 0 :(得分:0)
似乎您的问题是询问您是否可以通过指定不存在的父级来创建某种“虚拟祖先组”。这是合法的,在文档中提到父母实际上并不需要存在。
https://developers.google.com/appengine/docs/python/datastore/entities#Python_Ancestor_paths
或者,如果您的BlobReferences列表将受到限制,那么将它们的列表存储在一个实体中可能会更容易,也更便宜。您可以使该容器实体的密钥与BlobKey相同。然后通过密钥获取该实体并对其进行修改将使您可以在没有最终一致性问题的情况下工作。它也比查询和修改索引实体便宜。
答案 1 :(得分:0)
您对API的不同部分中“key”一词的各种用法感到困惑。 blob密钥与实体密钥没有任何共同之处。好消息是BlobKey实例的str()是一个理智的base64编码字符串,可以很好地用作Key对象的ID部分。您可以使用BlobKey构造函数将该ID字符串转换为BlobKey实例。