Quais são as implicações de desempenho dos polmodelos em relação aos modelos normais do Bigtable no Google App Engine?

12

O que produz o melhor desempenho no uso regular do Google App Engine, um polimodelo ou um modelo "Bigtable" normal?

O polymodel, efetivamente, cria uma coluna na tabela pai chamada "class" que fornece o rastreamento de herança. Enquanto um Bigtable normal, herdado de uma classe pai, cria uma estrutura de dados nova e separada, sem a capacidade de consultar o pai e encontrar todos os filhos de todas as classes subtipadas.

Brian Ballsun-Stanton
fonte

Respostas:

3

Provavelmente há uma diferença de desempenho, mas provavelmente é bem pequena.

Aqui está o que eu encontrei (tudo baseado no Google Docs para Python ).

  1. BigTable não suporta informações PolyModel nativamente. Em vez disso, é implementado usando uma propriedade 'class'. Portanto, ao tentar realizar uma pesquisa, por exemplo, para encontrar uma classe base, você estará pesquisando nessa propriedade 'class'.

  2. Todas as consultas que usam a classe PolyModel têm um filtro extra aplicado que filtra pela classe especificada (usando a propriedade 'class').

  3. Quaisquer índices criados para uma classe PolyModel, devem levar em consideração a coluna 'classe' extra.

Essencialmente, a classe PolyModel cuida sozinha da propriedade 'class', inserindo-a em consultas e utilizando-a para outras consultas. Fora isso, ele funciona idêntico ao uso padrão do BigTable.

Portanto, a diferença é realmente apenas adicionar e manter uma coluna extra.

Existe uma diferença de desempenho? Sim, provavelmente sim. Cada coluna que você adicionar a qualquer sistema de banco de dados terá um impacto no desempenho. Mas isso é significativo? Provavelmente não.

Richard
fonte