Любимые советы и функции Google App Engine - PullRequest
1 голос
/ 19 августа 2010

При запуске с любой новой крупной библиотекой или системой я перехожу в StackOverflow для получения «Что мне знать?» вопросы. Ответы могут быть субъективными, но совет обычно спасает меня от многих часов хлопот. До сих пор я потратил на Google App Engine несколько часов, работая над теми же проблемами, о которых уже знают более опытные разработчики.

В конце концов я нашел следующие общие проблемы:

  • appcfg.py загрузки не отображаются на панель инструментов Google, пока вы не выберете их из тега Версии.
  • Использование заданий cron для защиты приложения от необслуживания необходимо, если вы хотите последовательное время отклика. Это становится «трагедией проблемы общего достояния» (Спасибо Ник).
  • PyDev в Eclipse хорошо работает с Google App Engine.
  • Трудно получить локальную версию Python 2.5 для Ubuntu 10.04. Или вы можете получить "sudo add-apt-repository ppa: fkrull / deadsnakes", чтобы получить его.
  • Используйте VirtualEnvWrapper, чтобы изолировать ваш Python2.5 для GAE от других версий Python, используемых для всего остального.
  • Приложения в appspot переключаются на только что обновленные версии, когда это неудобно, независимо от того, что говорит панель управления. Вы должны сохранить номер версии в заголовке или нижнем колонтитуле, чтобы избежать диких гусиных преследований.

Итак, что еще я должен знать?

Ответы [ 2 ]

3 голосов
/ 19 августа 2010

Ужасно много чего можно охватить.Если у вас есть конкретная область, которая вас интересует, возможно, мы можем предложить что-то более конкретное.В общих чертах, я воспользуюсь этой возможностью, чтобы подключить мой блог , в котором много материала App Engine.

Однако я бы не согласился с одним из ваших пунктов:

Использование заданий cron для предотвращения необслуживания приложения необходимо, если требуется постоянное время ответа.

Прежде всего, это проблема «трагедии общего достояния».Приложения не планируются, когда они простаивают, чтобы освободить место для приложений, обслуживающих трафик;группа людей, использующих cronjobs «keepalive», вынуждает все приложения быстрее выгружаться, оставляя всех хуже.

Во-вторых, вы всегда будете получать случайные запросы на загрузку, даже с работой keepalive cron.Дополнительные экземпляры вашего приложения планируются по мере необходимости, поэтому всякий раз, когда вы получаете приток трафика, это происходит, и кто-то неизбежно получает запрос на загрузку.

Наконец, запросы на загрузку не должны быть большой проблемой,В частности, благодаря недавней поддержке прекомпиляции Python, которую мы недавно добавили, запросы на загрузку не должны занимать огромное количество времени, а работа, которую вы потратите на оптимизацию, принесет пользу всем вашим пользователям.

1 голос
/ 20 августа 2010

Если вы используете запрос «for / in», например: «Найти события, созданные сегодня кем-то из этого списка пользователей», вы обнаружите, что такой запрос не масштабируется, так как хранилище данных преобразует его вn запросов, где n - размер «users».

Чтобы обойти эту проблему, я назначаю вычислимые имена ключей.В приведенном выше примере имя ключа для события будет выглядеть следующим образом:

event_<dd/mm/yy>_<user_key>

Таким образом, вы можете вычислить все возможные имена ключей для сущностей с учетом текущей даты.Если у вас есть этот список, вы можете использовать:

db.get_by_key_name(key_names) 

..., который выбирает объекты параллельно, и это намного быстрее, чем при использовании запроса IN!

...