2012-04-02 79 views
2

说我想阅读下列对象结构,并希望在并行读取尽可能:结合ndb.Tasklets与内存缓存读取

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

1)它是有意义与memcache的交互和/或存储从任务中获取ShardCounters?据我所见,memcache没有get_async,所以我有点不确定这是否会并行化好?

2)在产生该结果SubObject2这个tasklet,我会使用iter.has_next_async()图案或我称之为fecth_async().map(...)检索SubObject3的,或不同的东西完全(另一个微进程,例如)?

感谢您的指点。

回答

3

尽管未在顶层定义memcache的异步函数,但Client类具有异步函数,如here所记录,您可以将它用于NDB和tasklet。 NDB将无法将多个异步获取操作合并为一个多重获取操作,但取决于您正在做什么,执行get_multi可能会更有效。编辑:NDB确实有一个Memcache界面 - 详情请参阅Guido的答案。

对于第二个问题,您必须详细说明您对结果和原因以及您看到的替代方案的作用。如果您只需获取所有异步结果,则只需在一个语句中完成所有异步结果。

+1

谢谢尼克,你是一个很好的帮助! – 2012-04-02 17:29:53

+1

请参阅下面的答案。 – 2012-04-03 05:51:11