2009-05-01 4 views

Respuesta

9

El hecho de que no tenga uniones implementadas por el DBMS no significa que no pueda tener varias tablas. En App Engine, estos se llaman 'tipos de entidades', y puede tener tantos de ellos como desee.

Generalmente, necesita desnormalizar sus datos para evitar la necesidad de uniones frecuentes. En las pocas situaciones en que son inevitables, puede usar otras técnicas, como hacer la combinación en el código de usuario.

5

Combinarlo en una tabla grande siempre es una opción, pero genera tablas innecesariamente grandes y redundantes la mayor parte del tiempo, por lo que hará que su aplicación sea lenta y difícil de mantener.

También puede emular una combinación, iterando a través de los resultados de una consulta y ejecutando una segunda consulta para cada resultado encontrado para la primera consulta. Si usted tiene la consulta SQL

SELECT a.x FROM b INNER JOIN a ON a.y=b.y; 

puede emular esto con algo como esto:

for b in db.GqlQuery("SELECT * FROM b"): 
    for a in db.GqlQuery("SELECT * FROM a WHERE y=:1", b.y): 
    print a.x 
+0

App Engine utiliza GQL, que tiene un subconjunto muy básico de sintaxis SQL. No estoy 100% seguro, pero creo que su ejemplo de SQL no funcionaría. –

+0

Sí, GQL es menos poderoso que SQL, pero lo suficientemente potente como para que mi ejemplo funcione. Ver http://code.google.com/appengine/docs/python/datastore/gqlreference.html – pts

+0

¿Eso no daría como resultado una gran cantidad de conexiones al almacén de datos y, por lo tanto, ralentizaría las cosas? – chakrit

0

El cambio de una base de datos relacional para la App Engine almacén de datos requiere un cambio de paradigma para los desarrolladores cuando se modela sus datos. Eche un vistazo here para tener una mejor idea. Esto requerirá que piense más al principio sobre cómo adaptar su problema a las limitaciones que impone el almacén de datos, pero si puede, entonces se le garantiza que se ejecutará rápidamente y se escalará.

2

Si está buscando maneras de diseñar la tabla de datos. Te recomiendo que hagas un poco de investigación antes de comenzar el trabajo. Hay bastante propiedades mágicas para Google App Engine como:

  • Auto-funden valor múltiple
  • propiedad de lista

que serían muy útiles en su diseño. He compartido my experience here.

Para obtener información sobre la capacidad de escala, existe un exclusivo free course in Udacity here sobre el tema. Es impartido por el fundador de reddit.com y explica claramente toda la escala que está sucediendo en reddit, uno de los sitios con mayor número de visitantes. Muestra la implementación completa de la demostración del curso en gae (¡y eso fue un gran premio para mí!). Ofrecen los videos completos del curso free to download here. He estado trabajando duro con el motor de aplicaciones antes de obtener estos recursos. Así que pensé que compartir esto podría ayudar a otros que están pisando las aguas.