Qual é a sua experiência no desenvolvimento no Google App Engine?
-
22-08-2019 - |
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!
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çamentoNã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.