14

Sto costruendo un'applicazione che è un sistema di gestione aziendale che utilizza gae. Ho sviluppato diverse applicazioni utilizzando gae e il datastore, ma mai uno che richiederà un volume elevato di utenti che accedono alle transazioni insieme alla necessità di report amministrativi e gestionali. Il mio più grande timore è che quando ho bisogno di creare report incrociati e altri report dettagliati (o report di business intelligence e manipolazione dei dati) mi trovo di fronte a una montagna di problemi con i limiti di interrogazione e di data mining del datastore di gae. È davvero solo una preferenza architettonica o ci sono preoccupazioni quantitative qui?GAE DataStore vs Google Cloud SQL per sistemi di gestione aziendale

In passato ho costruito sistemi che usano C++/C#/Java contro un Oracle/MySql/MSSql (con uno strato di cache sparpagliato per alcune prestazioni aggiuntive su risultati db complessi o di frequente accesso).

Continuo a leggere che dobbiamo gettare via la vecchia mentalità dei dati relazionali e passare al nuovo mondo della grande McHashTable nel cielo ... ma il nuovo non è sempre migliore ... Qualsiasi intuizione o esperienza sopra sarebbe utile

+0

Il modello relazionale si è dimostrato molto utile, ma i prodotti esistenti non sono stati in grado di fornirlo su scala Internet, motivo per cui disponiamo di molte soluzioni diverse con i loro problemi. NuoDB è un esempio di un interessante e promettente database "NewDB". Mentre stiamo aspettando, le persone tendono a combinare le soluzioni per i loro particolari casi d'uso, copiando i dati in database separati per query e report, usando gigaspaces di fronte a rdbms e così via. – tesdal

risposta

21

Dal Cloud SQL FAQ:

Posso utilizzare Google Cloud SQL o il datastore App Engine?

Questo dipende dai requisiti dell'applicazione. Datastore fornisce lo spazio-valore NoSQL> storage altamente scalabile, ma non supporta le query complesse offerte da un database SQL. Cloud SQL supporta query complesse e transazioni ACID, ma ciò significa che il database funge da "tubo fisso" e le prestazioni sono meno scalabili. Molte applicazioni utilizzano entrambi i tipi di archiviazione.

Se sono necessarie molte scritture (~ XXX per/s) su entità db con chiavi distribuite, è qui che risplende l'archivio dati di Google App Engine.

Se hai bisogno di supporto per query complesse e casuali generate dall'utente, è qui che Google Cloud SQL è più conveniente.

+0

Suoni come una combinazione dei due potrebbe essere il migliore in questa circostanza. Forse posso rompere le cose in due fasi. Posso utilizzare l'archivio dati come interfaccia dell'applicazione per OLTP, quindi tramite le code asincrone o i lavori cron, la migrazione di questi dati al cloud sql per OLAP. C'è la duplicazione dei dati, ma potrei usare l'attività di migrazione come un'opportunità per trasformare i dati nel codice stesso prima di scrivere in uno stato più normalizzato e pulire i dati "obsoleti" dal lato del datastore .... ahh il lavoro che ho appena creato per me stesso ... – MindWire

+0

Mi sono appena imbattuto in questo, che dà un po 'di peso al mio precedente commento. http://stackoverflow.com/a/1711757/525541 – MindWire

+1

Se si dispone di un'enorme quantità di dati, si potrebbe anche considerare l'utilizzo di Big Query https://developers.google.com/bigquery/, più adatto per operare su un grande set di dati importati. – proppy

6

Ciò che mi spaventa di più nel datastore GAE è la limitazione del numero di indice. Ad esempio se hai bisogno di cercare per un campo o un ordinamento - hai bisogno di un indice +1. In totale puoi avere 200 indici. Se hai un'entità con 10 campi ricercabili e puoi ordinare per ogni campo, ci saranno circa 100 combinazioni. Quindi hai bisogno di 100 indici. Ho sviluppato alcuni piccoli progetti per gae - e questa è una storia di successo. Ma quando viene il grande, questo non è per Gae.

Informazioni sulla cache: è possibile farlo con gae, ma la cache distribuita funziona molto lentamente. Preferisco creare una singola istanza privata di backend permanente con l'API RESTfull che detiene i valori memorizzati nella cache. Le istanze di frontend chiamano questa API per ottenere/impostare valori.

Forse è possibile creare un sistema complesso con gae, ma questo sarà un insieme di piccole applicazioni/servizi.

+6

Come descritto in questo articolo https://developers.google.com/appengine/articles/indexselection, il nuovo pianificatore di query avanzato consente di ridurre notevolmente il numero di indici per query complesse utilizzando il join unione a zigzag su singoli indici di proprietà invece di un costoso combinazione di indici compositi. – proppy

+0

Sì, già letto.Fa una grande differenza in termini di limiti. – MindWire

+0

Sì, l'ho letto, ma ancora per formula che viene fornito se hai una ricerca per 1 di 10 campi e ordina per 1 di 10 campi hai ottenuto circa 100 indici. Quindi se nel tuo progetto hai poche entità di questo tipo - sì, il gae può essere quello giusto. Ma alcuni progetti contengono un grande numero di tali Entità. Quindi sono ancora sul mio posiyion - gae con datastore e va bene per i piccoli progetti. Puoi costruire qualcosa di enorme usando gae se lo distribuisci tramite piccoli progetti. – alexey28

Problemi correlati