Я не думаю, что есть какой-то надежный способ узнать, требуется ли get_result()
, если только кто-то из команды GAE не подтвердит это, но я думаю, что это не нужно.Вот как я это проверил.
Я написал простой обработчик:
class DB_TempTestModel(db.Model):
data = db.BlobProperty()
class MyHandler(webapp.RequestHandler):
def get(self):
starttime = datetime.datetime.now()
lots_of_data = ' '*500000
if self.request.get('a') == '1':
db.put(DB_TempTestModel(data=lots_of_data))
db.put(DB_TempTestModel(data=lots_of_data))
db.put(DB_TempTestModel(data=lots_of_data))
db.put(DB_TempTestModel(data=lots_of_data))
if self.request.get('a') == '2':
db.put_async(DB_TempTestModel(data=lots_of_data))
db.put_async(DB_TempTestModel(data=lots_of_data))
db.put_async(DB_TempTestModel(data=lots_of_data))
db.put_async(DB_TempTestModel(data=lots_of_data))
self.response.out.write(str(datetime.datetime.now()-starttime))
Я запускал его несколько раз в приложении с высокой репликацией.
Данные быливсегда рядом, заставляя меня верить, что если не произойдет сбой в стороне хранилища данных (маловероятно), она будет написана.
Вот интересная часть.Когда данные записываются с помощью put_async()
(?a=2
), количество времени (для обработки запроса) в среднем примерно в 2–3 раза превышало put()
(?a=1
) (не очень научный тест- просто взглянув на это).
Но cpu_ms
и api_cpu_ms
были одинаковыми как для ?a=1
, так и ?a=2
.
Из журналов:
ms=440 cpu_ms=627 api_cpu_ms=580 cpm_usd=0.036244
против
ms=149 cpu_ms=627 api_cpu_ms=580 cpm_usd=0.036244
На стороне клиента, глядя на сетевую задержку запросов, он показал те же результаты, то есть `? A =2 'запросы были как минимум в 2 раза быстрее.Определенно победа на стороне клиента ... но, похоже, на стороне сервера это не принесет пользы.
Кто-нибудь из команды GAE хочет прокомментировать?