当一个对象需要另一个对象的键时批量写入

Bulk writes when one object requires the Key of another

正在想办法解决这个问题。使用 Python 和 NDB 库。

我想创建一个实体,并且该实体还绑定到另一个实体。两者是同时创建的。示例是为大量用户创建消息。我们有一个 Inbox table/kind 和一个 Message table.

因此,一旦我们收集了我们想要的所有用户的密钥,我所做的就是创建 Inbox 实体,保存它,然后使用它 returns 提供的密钥并附加到 Message,然后保存 Message。对于大量用户来说,这似乎相当昂贵。每个用户 2 次写入。通常我会自己创建对象,然后使用 ndb.put_multi() 来批量写入。因为在保存之前没有Key,所以我不能这样做。

希望这是有道理的。想法?

看看 allocate_ids API。您可以传递父键并分配 id。 allocate_ids 调用保证 id 永远不会在该父键上下文中重复使用。 allocate_ids 是一个小操作而且速度很快。分配这些 ID 后,您可以通过在引用它们的其他实体中引用分配的 ID 来执行 put_multi。据我所知,消息实体本身没有被引用,如果是这样,您只需要为收件箱分配 ID(大概如果用户已经没有)并在收件箱和消息实体上执行 multi_put。