Pergunta

é GQL fácil de aprender para alguém que sabe SQL? Como é Django / Python? Does App Engine realmente fazer escala fácil? Existe alguma proteção embutida contra a "GQL Injeções"? E assim por diante ...

Eu adoraria ouvir os altos não tão óbvias e baixos de usar app engine.

Felicidades!

Foi útil?

Solução

O mais gritante e emissão frustrante é a API de armazenamento de dados, que parece ótimo e é muito bem pensado e fácil de trabalhar com se você está acostumado a SQL, mas tem um limite de 1.000 fila em todos os conjuntos de resultados da consulta, e você pode' contadores de acesso t ou deslocamentos para além disso. Eu correr em questões mais estranhas, com não realmente ser capaz de adicionar ou acesso a dados para um modelo, uma vez que vai além de 1000 linhas.

Veja a Stack Overflow discussão sobre o limite de 1.000 linha

Aral Balkan escreveu um bom resumo deste e de outros problemas

Dito isto, o Google App Engine é realmente uma ótima ferramenta para ter à disposição queridos, e eu realmente gosto de trabalhar com ele. É perfeito para a implantação de serviços web micro. (Por exemplo: json api do) para uso em outros aplicativos

Outras dicas

A minha experiência com o Google App Engine tem sido grande, eo 1000 limite resultado tem sido removido , aqui está um link para as notas de lançamento:

notas de lançamento

app-motor

Não há mais 1000 resultado limite - que é direita: com adição de cursores e o culminar de muitos menor Datastore estabilidade e desempenho melhorias ao longo dos últimos meses, estamos bastante agora confiante para remover o limite máximo resultado completamente. Se você está fazendo uma busca, iteração, ou usando um cursor, não há há limites para o número de resultados.

GQL é extremamente simples - é um subconjunto do SQL declaração 'selecionar', nada mais. É apenas uma camada de conveniência ao longo do topo das APIs de nível inferior, embora, e toda a análise é feita em Python.

Em vez disso, eu recomendo usar a API de Consulta, que é processual, não necessita de análise de tempo de execução, e 'injeção GQL' marcas vulnerabilidades totalmente impossível (embora eles são impossíveis em GQL escrito corretamente de qualquer maneira). A API de Consulta é muito simples: Chamada .tudo () em uma classe Model, ou ligue db.query (modelname). O objeto de consulta tem .filter (field_and_operator, valor), .order (field_and_direction) e métodos .ancestor (entidade), além de todas as instalações GQL objetos têm (.get (), .fetch (), .count ()) , etc.) Cada um a consulta métodos retorna o objeto de consulta em si por conveniência, para que você pode encadear-los:

= resultados MyModel.all () filtro ( "foo =", 5) .order ( "- bar").. Buscar (10)

É equivalente a:

= MyModel.gql resultados ( "ONDE foo = 5 ORDEM barra POR DESC limite de 10"). Buscar ()

A grande desvantagem quando se trabalha com AppEngine era o limite 1k consulta, que foi mencionado nos comentários já. O que eu não vi mencionado, porém, é o fato de que há um built-in ordem classificáveis, com o qual você pode contornar esse problema. A partir do livro de receitas appengine:

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()

O conjunto de código acima com API remoto (ver este artigo ) permite você para recuperar o maior número de entidades como você precisa.

Você pode usar o código acima assim:

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

myModels = deepFetch(allMyModel)

No começo eu tinha a mesma experiência que outros que transitaram de SQL para GQL - tipo de estranho para não ser capaz de fazer JOINs, contar mais de 1000 linhas, etc. Agora que eu já trabalhei com ele por alguns meses Eu absolutamente amo o app engine. Eu sou portando todos os meus antigos projetos para ele.

Eu usá-lo para hospedar várias aplicações web de alto tráfego (no pico de uma vez de recebe-los 50k batidas por minuto).

O Google App Engine não utiliza um banco de dados real, e, aparentemente, usa algum tipo de mapa de hash distribuída. Isto irá prestar-se a alguns comportamentos diferentes que as pessoas que estão acostumados a SQL só não vai ver em primeiro lugar. Assim, por exemplo recebendo uma contagem de itens em SQL regular é esperado para ser uma operação rápida, mas com GQL ele simplesmente não vai funcionar da mesma forma.

Aqui estão mais algumas questões:

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

Na minha experiência pessoal, é um ajuste, mas a curva de aprendizagem é muito bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top