2012-06-20 10 views
5

Ho un'app multi-tenant su Heroku (più account che non conoscono l'uno dell'altro), e non sono sicuro su come progettare al meglio il mio database. Gli schemi di Postgres look awesome, ma heroku non gestisce large numbers of them well.Multi-Tenant Rails 3 App su Heroku con PostgreSQL

Ora, la mia app Rails serve principalmente JSON, poiché la maggior parte dei modelli sta eseguendo il rendering lato client (utilizzando Backbone.js). Quindi sto considerando di passare a MongoDB perché 1) ogni inquilino potrebbe ottenere un documento di "account" di livello superiore, e tutto potrebbe essere annidato sotto e 2) il suo formato di archiviazione è così simile a JSON. Siamo ancora in beta, quindi potrebbe essere tirato fuori. Sono validi motivi per usare Mongo? L'ex è persino un modo intelligente per usare Mongo?

Se dovessi rimanere con postgres, tutto dovrebbe appartenere al modello di account di livello superiore (con indici)? In tal caso, come gestirò i join? È possibile eseguire join mult-index (totale post-no noob)?

Abbiamo circa 60.000 voci in una tabella fino ad ora, tuttavia un singolo account può avere solo 200-1000, quindi sono preoccupato di partecipare all'intero tavolo.

Apprezzo davvero qualsiasi aiuto.

Aggiornamento:

Abbiamo finito per trasferirsi in un VPS (Rackspace Cloud) e l'attuazione di schemi di Postgres. Nessun rimpianto con questa mossa in quanto corre molto più veloce di rispetto a Heroku, e abbiamo più controllo sul server.

+2

Nel fare multi-tenant apps tutti tutti appena ambiti tutto sotto una tabella conto simile, nulla di nuovo su questo, è molto più semplice da gestire replica e persino sharding quando lo fai in questo modo invece della soluzione multi-schema. A proposito di join, lo fa, ma i join sono sempre costosi, non importa quale. –

+1

Non c'è abbastanza dettaglio nella domanda per rispondere. Dicendoci che "hai un'app multi-tenant" non sono abbastanza informazioni per aiutarti a decidere che tipo di data store usare. O può essere perfettamente appropriato. Quanti tavoli hai? Quanto sono "relazionali" i tuoi dati? –

+0

@ MaurícioLinhares ringrazia. Quindi, basta aggiungere un account_id a ogni tabella e indicizzarli è quello che stai dicendo? – kmurph79

risposta

Problemi correlati