2009-05-01 4 views

risposta

9

Solo perché non sono stati implementati join dal DBMS non significa che non è possibile avere più tabelle. In App Engine, questi sono chiamati "tipi di entità" e puoi averne quanti ne vuoi.

Generalmente, è necessario denormalizzare i dati per evitare la necessità di frequenti join. Nelle poche situazioni in cui sono inevitabili, puoi utilizzare altre tecniche, come fare il join nel codice utente.

5

Combinarlo in un unico grande tavolo è sempre un'opzione, ma il risultato è il risultato di tabelle inutilmente grandi e ridondanti la maggior parte del tempo, quindi renderà l'app lenta e difficile da mantenere.

È inoltre possibile emulare un join, eseguendo il iterazione dei risultati di una query e eseguendo una seconda query per ogni risultato trovato per la prima query. Se avete la query SQL

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

è possibile emulare questo con qualcosa di simile:

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 utilizza GQL che ha un sottoinsieme molto semplice di sintassi SQL. Non sono sicuro al 100% ma credo che il tuo esempio SQL non funzionerebbe. –

+0

Sì, GQL è meno potente di SQL, ma abbastanza potente, quindi il mio esempio funzionerà. Vedi http://code.google.com/appengine/docs/python/datastore/gqlreference.html – pts

+0

Ciò non comporterebbe un numero enorme di connessioni all'archivio dati e rallenterebbe così le cose? – chakrit

0

Il passaggio da un database relazionale per App Engine Datastore richiede un cambiamento di paradigma per gli sviluppatori durante la modellazione loro dati. Dai un'occhiata a here per avere un'idea migliore. Ciò richiederà di pensare più in anticipo su come adattare il problema ai vincoli imposti dal datastore, ma se è possibile, allora si è certi che verrà eseguito rapidamente e scalabile.

2

Se stai cercando il modo di progettare il datatable. Ti consiglierei di fare un po 'di ricerche prima di iniziare il lavoro. Ci sono proprietà abbastanza magici per Google App Engine piace:

  • Self-fondono proprietà elenco
  • multivalore

che sarebbe molto utile nella progettazione. Ho condiviso my experience here.

Per informazioni sulla scalabilità è disponibile un esclusivo free course in Udacity here proprio sull'argomento. È insegnato dal fondatore di reddit.com e spiega chiaramente l'intero processo di scaling che sta accadendo in reddit, uno dei siti con il maggior numero di visitatori. Mostra l'intera implementazione della demo del corso in gae (e quello era un jackpot per me!). Offrono i video dell'intero corso free to download here. Ho lavorato duramente con il motore di app prima di avere queste risorse. Quindi ho pensato che condividere questo potrebbe aiutare altri che stanno calpestando il piede nelle acque.