0

任务:实现全局、跨实体组 blob 共享。

我需要一个具有 BlobInfo 或 BlobKey 的字符串表示形式的祖先组作为 BlobReference 对象的父级,以具有强一致性。所以我构造了一个虚拟祖先组,其中 blob-key 作为引用 DB-object 的父级...

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 的接口)。我在这里错过了什么吗?

4

2 回答 2

0

您对 API 不同部分中“key”一词的各种用法感到困惑。Blob 键与实体键没有任何共同之处。好消息是 BlobKey 实例的 str() 是一个健全的 base64 编码字符串,应该可以用作 Key 对象的 ID 部分。您可以使用 BlobKey 构造函数从该 ID 字符串转到 BlobKey 实例。

于 2013-07-15T16:55:26.533 回答
0

似乎您的问题是询问您是否可以通过指定不存在的父级来创建某种“虚拟祖先组”。这是合法的,文档中提到父级实际上不需要存在。

https://developers.google.com/appengine/docs/python/datastore/entities#Python_Ancestor_paths

或者,如果您的 BlobReference 列表受到限制,那么将它们的列表存储在一个实体中可能会更容易且成本更低。您可以使该容器实体的密钥与 BlobKey 相同。然后通过按键获取该实体并对其进行修改,这样您就可以在没有最终一致性问题的情况下工作。它也比查询和修改索引实体更便宜。

于 2013-07-15T12:56:41.910 回答