PDA

View Full Version : [SQL] Unico Database molto grosso, o tanti Database separati?


BlueSkye
09-11-2011, 18:06
Salve a tutti,
stavo pensando di sviluppare un'applicazione web in cui degli utenti si possono iscrivere al mio sito, ed io gli consento di eseguire la mia applicazione come se fosse "dedicata a loro", ed alla quale si possono iscrivere a loro volta altri utenti (che chiamerò "sotto-utenti"). Per intenderci, il principio alla base è molto simile a quello di ForumFree o Wordpress (la versione che consente di registrarsi online). Solo che nella mia applicazione, ho due livelli di utenti.

Ogni utente avrebbe a disposizione una discreta mole di dati sul database (informazioni, statistiche di uso, account di sotto-utenti, dati generati da sotto-utenti, eccetera), e le chiamate al database saranno relativamente frequenti (diciamo a spanne una ogni 10 secondi per ciascun utente).

Ma arrivo al punto: ipotizzando un contesto in cui potrei avere 1.000-10.000 utenti e/o sotto-utenti che stanno facendo un uso massivo della mia applicazione, mi domando: è meglio avere un unico grosso database in cui conservo i dati di tutti gli utenti, o è meglio creare un database schema separato per ciascun utente?

Onestamente non saprei quale dei due approcci sia migliore, dal punto di vista teorico (e nel concreto). Quale garantisce migliore prestazioni? Nel caso di unico grosso database, l'uso di indici può migliorare sufficientemente le prestazioni?

Come DBMS pensavo di utilizzare comunque MySQL.

Sto parlando di un contesto con molti dati, molti aggiornamenti, molto frequenti, ed in cui è importante che ogni utente abbia una visione aggiornata dello stato dei suoi dati (perché devo anche gestire una sincronizzazione "indiretta" fra i vari sotto-utenti di un utente).

Ringrazio tutti in anticipo, e spero di non aver violato regolamenti del forum :D

!fazz
09-11-2011, 18:47
tu vorresti usare un database separato per ogni utente?


a parte che così sarebbe problematiche fare delle statistiche globali ma poi il tuo provider ti fornisce migliaia di db ?

BlueSkye
09-11-2011, 19:32
tu vorresti usare un database separato per ogni utente?
a parte che così sarebbe problematiche fare delle statistiche globali ma poi il tuo provider ti fornisce migliaia di db ?

Le statistiche devo mostrarle ai singoli utenti, perlopiù.

Il progetto forse non lo rilascerò neanche mai concretamente online, ma volevo provare a progettare qualcosa "in grande", di modo che un giorno potesse anche andare su un Web-Cluster o ospitare qualche migliaio di utenti attivi contemporaneamente. Insomma, non sto parlando di un banale hosting da 50€/anno...

Finora ho lavorato per progetti da MASSIMO un centinaio di utenti connessi, quindi volevo sapere "fin quanto mySQL sopportava" stress di richieste e quantità di dati e quali erano eventualmente le tecniche per non uccidere le prestazioni (ad esempio: uso di indici, load balancing, clusterizzazione,...).

Insomma, il mio dubbio primario comunque era se un database unico diventasse un collo di bottiglia di un sistema con qualche migliaio di utenti attivi... Chiedevo una dritta in questo senso

KastKnocKer
13-11-2011, 20:22
A parer mio, se devi offrire un servizio, manterrei gli schemi separati! :)

starfred
13-11-2011, 21:00
ciao, la tua domanda è una delle più semplici ed al tempo stesso più toste che si possano fare sulla progettazione dei database.
Si va da soluzioni semplici fatte con il raid su un unico server, a soluzioni fatte utilizzando più server diversi con database sincronizzati e applicazioni che usano i vari server con diversi algoritmi di scheduling (load, ram occupata, etc. etc.).
Esistono soluzioni master-master oppure master-slave con polling...
Ovviamente più si ricerca prestazioni più il progetto diventa complesso.
Basti pensare a come viene gestita una transazione distribuita o un trigger. Per non parlare della tolleranza ai guasti.... insomma è un casino assurdo :D In questo settore ovviamente Oracle fa da padrone, tuttavia se sei interessato a "roba free" ti consiglio di dare un'occhiata a Bucardo (http://bucardo.org/wiki/Bucardo) (è per postgresql) l'ho utilizzato tempo fa in una simulazione e mi ci ero trovato bene.
ciao e buona fortuna :D

KastKnocKer
14-11-2011, 13:51
Credo che lui intenda un sistema di offerta come ForumFree nel senso che:
1) io mi registro al "portale" ed il portale mi offre una serie di servizi
2) io accedo alla mia porzione di sistema in base alla configurazione offerta (schema db separato ad esempio)