2012-04-02 3 views
2
читает кэшем

Скажем, я хочу, чтобы прочитать следующую структуру объекта, и хочу, чтобы распараллелить чтения как можно больше:Объединения ndb.Tasklets с

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

1) имеет ли смысл взаимодействовать с кэшем и/или сохранить, чтобы получить ShardCounters изнутри талисманов? Насколько я вижу, memcache не имеет get_async, так что я немного не уверен, будет ли это хорошо распараллеливаться?

2) В тасклет, который производит результаты для SubObject2, будет ли использовать шаблон iter.has_next_async() или я называть fecth_async().map(...) для извлечения SubObject3 «S, или что-то другое полностью (другой тасклет, например)?

Спасибо за любые указатели.

ответ

3

Хотя асинхронные функции для memcache не определены на верхнем уровне, у класса Client есть асинхронные функции, как описано в документе here, которые вы можете использовать с NDB и тасками. Однако NDB не сможет объединить несколько операций async get в один multi get, поэтому в зависимости от того, что вы делаете, может быть более эффективным сделать get_multi. Изменить: у NDB есть интерфейс Memcache - см. Ответ Guido для деталей.

Для вашего второго вопроса вам нужно подробно рассказать о том, что вы делаете с результатами и почему, и тем, что вы видите в качестве альтернативы. Если все, что вам нужно сделать, это получить все результаты async, вы можете просто привести их все в одном выражении.

+1

Спасибо, Ник, вы очень поможете! –

+1

См. Мой ответ ниже. –