2

假设我想读取以下对象结构,并希望尽可能地并行读取:

root_object --> ShardCounter
            |
             -> SubObject1 (1..N)
            |
             -> SubObject2 (1..N) --> ShardCounter
                                  |
                                   -> SubObject3 (1..N)

1) 与 memcache 和/或 store 交互以从 tasklet 中获取 ShardCounters 是否有意义?据我所知,memcache 没有get_async,所以我有点不确定这是否会很好地并行化?

2)在产生结果的tasklet中SubObject2,我会使用iter.has_next_async()模式还是调用fecth_async().map(...)来检索SubObject3's,或者完全不同的东西(例如另一个tasklet)?

感谢您的任何指示。

4

2 回答 2

7

NDB does have auto-batching asynchronous memcache apis, on the Context object. See https://developers.google.com/appengine/docs/python/ndb/contextclass .

于 2012-04-03T05:50:32.993 回答
3

尽管 memcache 的异步函数没有在顶层定义,但 Client 类具有异步函数,如此所述,您可以将其与 NDB 和 tasklet 一起使用。但是,NDB 将无法将多个异步 get 操作合并到一个 multi get 中,因此根据您的操作,执行 a 可能会更有效get_multi。编辑:NDB 确实有一个 Memcache 接口 - 有关详细信息,请参阅 Guido 的答案。

对于第二个问题,您必须详细说明您对结果的处理方式以及原因,以及您认为替代方案是什么。如果您需要做的只是获取所有异步结果,您可以在一条语句中将它们全部生成。

于 2012-04-02T17:07:47.517 回答