Какой у вас опыт разработки на Google App Engine? - PullRequest
7 голосов
/ 01 апреля 2009

Легко ли изучать GQL для тех, кто знает SQL? Как поживает Django / Python? Действительно ли App Engine упрощает масштабирование? Есть ли встроенная защита от "GQL-инъекций"? И так далее ...

Мне бы хотелось услышать не столь очевидные взлеты и падения при использовании движка приложений.

Ура! * * 1005

Ответы [ 6 ]

7 голосов
/ 27 апреля 2010

Мой опыт работы с Google App Engine был великолепным, а предел результата 1000 был удален , вот ссылка на заметки о выпуске:

Замечания по выпуску app-engine

Не более 1000 результатов - это справа: с добавлением курсоров и кульминация многих меньших Стабильность и производительность хранилища данных улучшения за последние несколько месяцев, теперь мы достаточно уверены, чтобы удалить максимальный предел результата в целом. Делаете ли вы выборку, итерация, или с помощью курсора, есть нет ограничений на количество результатов.

4 голосов
/ 05 апреля 2009

Основным недостатком при работе с AppEngine было ограничение в 1 тыс. Запросов, о котором уже упоминалось в комментариях. Однако я не упомянул о том, что существует встроенный порядок сортировки, с помощью которого можно обойти эту проблему. Из кулинарной книги приложения:

def deepFetch(queryGen,key=None,batchSize = 100):
  """Iterator that yields an entity in batches.

  Args:
    queryGen: should return a Query object
    key: used to .filter() for __key__
    batchSize: how many entities to retrieve in one datastore call

  Retrieved from http://tinyurl.com/d887ll (AppEngine cookbook).
  """

  from google.appengine.ext import db

   # AppEngine will not fetch more than 1000 results
  batchSize = min(batchSize,1000)

  query = None
  done = False
  count = 0

  if key:
    key = db.Key(key)

  while not done:
    print count
    query = queryGen()
    if key:
      query.filter("__key__ > ",key)
    results = query.fetch(batchSize)
    for result in results:
      count += 1
      yield result
    if batchSize > len(results):
      done = True
    else:
      key = results[-1].key()

Приведенный выше код вместе с Remote API (см. в этой статье ) позволяет получить столько объектов, сколько вам нужно.

Вы можете использовать вышеуказанный код следующим образом:

def allMyModel():
  q = MyModel.all()

myModels = deepFetch(allMyModel)
4 голосов
/ 01 апреля 2009

GQL чрезвычайно прост - это подмножество оператора SQL SELECT, не более того. Тем не менее, это всего лишь вспомогательный слой поверх низкоуровневых API, и весь анализ выполняется на Python.

Вместо этого я рекомендую использовать API запросов, который является процедурным, не требует синтаксического анализа во время выполнения и полностью исключает уязвимости в GQL-инъекциях (хотя они все равно невозможны в правильно написанном GQL). API запросов очень прост: вызов .all () для класса Model или вызов db.Query (имя модели). Объект Query имеет методы .filter (field_and_operator, value), .order (field_and_direction) и .ancestor (entity), в дополнение ко всем объектам GQL-объектов (.get (), .fetch (), .count ()). и т. д.) Для удобства каждый из методов Query возвращает сам объект Query, поэтому вы можете связать их:

results = MyModel.all (). Filter ("foo =", 5) .order ("- bar"). Fetch (10)

Эквивалентно:

results = MyModel.gql ("ГДЕ foo = 5 ПОРЯДОК ПО БАРУ DESC LIMIT 10"). Fetch ()

4 голосов
/ 01 апреля 2009

Самая вопиющая и разочаровывающая проблема - API хранилища данных, который выглядит великолепно, с ним очень хорошо продумано и с ним легко работать, если вы привыкли к SQL, но имеете ограничение в 1000 строк для всех наборов результатов запросов, и вы можете ' Доступ к количеству или смещению сверх этого. Я столкнулся с более странными проблемами: я не смог добавить или получить доступ к данным для модели, если она выходит за пределы 1000 строк.

См. Обсуждение переполнения стека о пределе 1000 строк

Арал Балкан написал действительно хорошее резюме этой и других проблем

Сказав это, движок приложений - это действительно отличный инструмент, которым можно пользоваться, и мне очень нравится с ним работать. Он идеально подходит для развертывания микро-веб-сервисов (например, json api's) для использования в других приложениях.

2 голосов
/ 07 апреля 2009

Сначала у меня был такой же опыт, как и у других, которые переходили с SQL на GQL - странно, что я не мог выполнять JOINs, считать более 1000 строк и т. Д. Теперь, когда я работал с ним несколько раз месяцы я очень люблю движок приложения. Я портирую на него все свои старые проекты.

Я использую его для размещения нескольких веб-приложений с большим трафиком (в пиковое время одно из них получает 50 тыс. Обращений в минуту).

1 голос
/ 01 апреля 2009

Google App Engine не использует фактическую базу данных и, по-видимому, использует какую-то распределенную хэш-карту. Это может привести к различным поведенческим способам, которые люди, привыкшие к SQL, сначала не увидят. Так, например, ожидается, что получение COUNT элементов в обычном SQL будет быстрой операцией, но с GQL это просто не будет работать так же.

Вот еще несколько вопросов:

http://blog.burnayev.com/2008/04/gql-limitations.html

По моему личному опыту, это корректировка, но кривая обучения в порядке.

...