【问题标题】:Combining ndb.Tasklets with memcache reads结合 ndb.Tasklets 和 memcache 读取
【发布时间】:2012-04-02 15:15:37
【问题描述】:

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

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

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

2) 在为SubObject2 生成结果的小任务中,我是使用iter.has_next_async() 模式还是调用fecth_async().map(...) 来检索SubObject3 或完全不同的东西(另一个小任务,例如例如)?

感谢任何指点。

【问题讨论】:

    标签: python google-app-engine app-engine-ndb


    【解决方案1】:

    NDB 确实在 Context 对象上具有自动批处理异步 memcache api。见https://developers.google.com/appengine/docs/python/ndb/contextclass

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢尼克,你帮了大忙!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      相关资源
      最近更新 更多