Pergunta

Alguém pode ilustrar como posso armazenar e dados facilmente consulta hierárquica em armazenamento de dados do Google App Engine?

Foi útil?

Solução

A melhor opção depende de suas necessidades. Eis algumas soluções (eu estou supondo que você está usando Python, desde que você não especificou):

  1. Se você precisa fazer atualizações transacionais em uma árvore inteira, e você não vai ter mais do que cerca de 1QPS de atualizações constantes para qualquer árvore, você pode usar o suporte embutido para armazenamento heirarchial. Ao criar uma entidade, você pode passar o atributo "pai" para especificar uma entidade pai ou chave, e ao consultar, você pode usar o método .ancestor () (ou 'ANCESTOR IS' em GQL para recuperar todos os descendentes de uma determinada entidade .
  2. Se você não precisa de atualizações transacionais, você pode replicar a funcionalidade de grupos de entidade sem os problemas de contenção (e segurança de transações): Adicionar um db.ListProperty (db.Key) para o seu modelo chamado 'antepassados', e preencher -lo com a lista de ancestrais do objeto que você está inserindo. Depois, você pode facilmente recuperar tudo o que descende de um determinado ancestral com MyModel.all (). Filtro (dos antepassados ??= ', Parent_Key).
  3. Se você não precisa de transações, e você só se preocupam sobre como recuperar os filhos diretos de uma entidade (nem todos os descendentes), usar a abordagem descrita acima, mas em vez de um ListProperty apenas usar um ReferenceProperty à entidade-mãe. Isto é conhecido como uma lista de adjacência.

Existem outras abordagens disponíveis, mas os três devem cobrir os casos mais comuns.

Outras dicas

Bem, você deve tentar manter seus dados o mais linear possível. Se você precisar consultar rapidamente uma estrutura de árvore de dados, você teria que armazená-lo em conserva no banco de dados (ou JSON-codificado se você preferir) se isso é possível para os seus dados, ou você teria que gerar árvores índices que podem ser usado para consultar rapidamente um pedaço de uma estrutura de árvore. Eu não tenho certeza de como o Google App Engine iria realizar ao atualizar esses índices, no entanto.

Quando se trata de Google App Engine, a sua principal preocupação deve ser a de reduzir o número de consultas que você precisa fazer, e que suas consultas regresso se pequenas linhas como possível. Operações são caros, mas o armazenamento não é, de modo a redundância não deve ser visto como uma coisa ruim.

Aqui estão alguns pensamentos sobre o assunto eu encontrei por googling (embora para o MySQL, mas você pode obter a idéia geral a partir dele): Gerenciamento de dados hierárquicos em MySQL

Ah e aqui é uma discussão para o Google App Engine: modelagem dados hierárquicos

Uma maneira é usar atributo pai do modelo. Você pode então fazer uso de funções query.ancestor () e model.parent ().

Eu acho que depende de que tipo de operações que você quer fazer nestes dados que determinam a melhor forma de representá-lo.

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