In Google App Engine, qual è il modello di join molti-a-molti più efficace?


9

Il progetto BigTable rifiuta molte delle filosofie dei modelli relazionali standard, preferendo esplicitamente la denormalizzazione a una grande schiera di piccoli tavoli.

Una delle aree più ampie in cui questo è un problema è la modellazione di molti o molti join.

Un modo per modellare questi join è violare la prima forma normale e inserire tutti i dati interessanti in un db.ListProperty (). Mentre questo ha la capacità di essere ricercabile da una query, non ho ancora esplorato le implicazioni sulle prestazioni della ricerca di un elenco piuttosto che estrarre un'altra tabella.

Poiché i join non sono possibili, è possibile collegare le tabelle tramite RelationshipProperties. Pertanto, con sufficiente sforzo, è possibile creare la tabella di intersezione standard (una tabella con una chiave primaria comune che fa riferimento a entrambe le tabelle principali). Qualcuno ha esplorato i successi delle prestazioni delle varie implementazioni?

-Modificare-

Mentre l'elenco delle chiavi suggerito nella documentazione è davvero un modo per farlo, sono interessato alle prestazioni e ai tassi di anomalia di quella e di altre implementazioni. Esiste utilità nella creazione di elenchi reciproci di chiavi? Lo sforzo coinvolto nel ripetuto vale il prezzo? C'è un modo migliore per farlo?

Risposte:


3

Sto anche lavorando con il datastore GAE in questo momento, dovresti controllare questo articolo se non l'hai già fatto. Se hai trovato qualcosa di utile, ti preghiamo di aggiornare la tua domanda.

MODIFICARE:

Ho trovato questo oggi, check it out.


0

Nella mia esperienza su GAE, dovresti usare le query di tabella con parsimonia. L'aggiunta di una tabella "join" rallenterebbe ulteriormente le cose. Ad esempio, se si dispone di tabelle A e B che condividono una relazione molti-a-molti e si crea una tabella "join" J con i campi RelationshipProperty su A e B, sarà necessario interrogare J ogni volta che si desidera trovare record correlati (entità).

Sarebbe molto più veloce avere l'Elenco dei tasti in A o B (o entrambi se necessario) perché verranno inclusi quando si recupera quel record / entità. Finché non hai troppe chiavi nell'elenco (ovvero, l'entità non è troppo grande), questa è la strada da percorrere.

Ho iniziato a utilizzare ndb sulle mie applicazioni e ci sono alcuni vantaggi significativi nell'uso delle chiavi durante il recupero delle entità. Se l'entità è già memorizzata nella cache, verrà prima estratta dalla memoria o da memcache. Quindi, se c'è una significativa sovrapposizione nel tuo Elenco di chiavi, i recuperi saranno molto più veloci per quelle entità già recuperate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.