Проектирование, чтобы легко мигрировать в Google App Engine
Вопрос
Я собираюсь начать проектировать веб -приложение в ближайшее время, и хотя у меня есть большой опыт работы в мире SQL, я понятия не имею, что мне нужно принять во внимание, чтобы сделать это с целью перейти в GAE в самом близовом будущее.
В качестве альтернативы я мог бы с самого начала разработать приложение для GAE, и поэтому в этом случае, какие различия мне нужно принять во внимание? Другими словами, каковы DOS и Donts Writing Your App для GAE, исходящие из прошлых реляционных баз данных.
Решение
Просто вне моей головы:
- Это на самом деле только магазин Value, не одурачите такими вещами, как GQL (Это всего лишь подмножество SQL Select)
- Нет соединений - часто вы должны денормализовать или забыть
- Более или менее частые тайм -ауты
- (Очень) медленный доступ по сравнению с локальной базой SQL.
- Считайте очень дорого
Смещение (в избранном), реализованное на стороне клиента - так что на самом деле вы извлекаете все записи в комплект в комплекте- Как указал Ник Джонсон в одном из комментариев, это не клиентская сторона, поэтому теперь, когда предел 1000 исчез, он похож на базы данных SQL.- (Недавно удалено) предел 1000 извлеченных строк
- Выбор производительности резко уменьшается с увеличением числа возвращенных строк
- Миграции трудно сделать, потому что вы должны выполнять их, используя обычные HTTP -запросы, и каждый запрос убит через 30 секунд. Вы должны прибегнуть к очередям задач, которые обрабатывают строки в партиях
- В Pseudo Foreign Keys - называемые RelightProperties в Python API - но они никоим образом не применяются - если кто -то/что -то удаляет целевой объект, то у вас есть то, что известно как висящий указатель в C ++
- Поля, которые вы используете для запросов, должны быть индексированы, но все же используют ключ (своего рода первичный ключ для каждой строки/экземпляра) заставляет ваши запросы работать быстрее
- Построение индексов в живом экземпляре может занять много времени (и вы не можете уменьшить его), и без них ваше приложение часто не может работать. Пиво и терпение настоятельно рекомендуется ..
- Много искусственных ограничений (например, уже снятый максимальный предел 1000). Например, gql 'in' operator-это просто синтаксический сахар для нескольких или S, и используется верхний предел 30 значений.
Все, что это означает, что вы, вероятно, не можете избежать подвергать непоследовательному состоянию пользователю, и почти наверняка вы не можете избежать непоследовательного состояния ваших данных (например, полуответствующие сроки и наполовину не вручную, во время ручного соединения изменений данных и т. Д.)