Strategia di database per applicazioni connesse ma disparate

1

Sto lavorando su una serie di applicazioni web correlate tra loro, tutte situate sullo stesso host:

Super Admin
|
---Site Network Admin
|   |
|   ---Site
|   |
|   ---Site
|   |
|   ---Site
|
---Site Network Admin
    |
    ---Site
    |
    ---Site
    |
    ---Site

Tutti e tre avranno accesso alla stessa libreria di base (Zend Framework) e librerie di applicazioni separate per ogni livello della rete, quindi 3 applicazioni e una libreria, ma diverse configurazioni per supportare istanze uniche.

Sono interessato a sentire le opinioni della gente sulla migliore strategia di database per supportare queste applicazioni.

Da un lato, potevo distribuire un database, o forse uno per ogni livello di applicazione (cioè 3). Questo ha il vantaggio di essere facile da implementare, ma lo svantaggio è che gli utenti condividono il carico di accesso, ad esempio se un utente sta veramente martellando il database, le prestazioni di altre applicazioni che condividono il database ne risentiranno. Un altro svantaggio è che qualsiasi danneggiamento dei dati potrebbe potenzialmente interessare tutti gli utenti finali.

Dall'altra, potrei utilizzare una serie di database, uno per i primi due livelli per condividere i dati amministrativi, ma separare le istanze per ciascun sito distribuito sulla rete. Questo ha il vantaggio che gli utenti finali sono isolati e quindi la corruzione dei dati è più facile da contenere. Lo svantaggio è ovviamente il contrario dell'esempio precedente, in quanto le modifiche sono quindi più difficili da implementare attraverso la rete.

Il mio pensiero è che è dettato dall'uso rispetto alla popolazione di utenti. Se hai una bassa quantità di utenti, ma interagiscono molto con il database - allora il piano B è il migliore. Se è il primo, che hai un alto rendimento di utenti con bassi tassi di interazione, allora il piano A è il migliore.

Sono interessato a conoscere i pensieri di altre persone sull'approccio migliore per affrontare questa situazione.

    
posta sunwukung 17.12.2010 - 10:21
fonte

1 risposta

1

Penso che tu abbia trattato molto bene gli argomenti principali per entrambi gli scenari. Potrebbe esserci anche un po 'di efficienza nell'accesso al disco del database per un minor numero di database (meno e / o ricerche più brevi), ma non dovrebbe essere drammatico. Avere anche più database probabilmente significa anche un utilizzo più limitato della memoria per gli indici - invece di (composito da: site_id, post_id), potresti avere solo chiavi (post_id).

In base alla probabilità di successo del progetto (ovvero, avvio vs progetto aziendale interno), in genere suggerirei di adottare un approccio ibrido.

In primo luogo, andare con una progettazione di database che consente di memorizzare più istanze della propria applicazione all'interno dello stesso database. Questo è più facile a breve termine in termini di amministrazione e manutenzione: non è necessario ripetere azioni manuali o automatiche su un certo numero di database. Questo ti consente di concentrarti sul successo nello sviluppo della tua applicazione per i tuoi siti iniziali.

Se si finisce con successo e si ha bisogno di più capacità del database, è possibile passare ad avere più server di database: ogni server database gestisce più siti. Nella fase iniziale di inizializzazione dell'applicazione, puoi scegliere quale server di database utilizzare in base al sito.

Se segui l'approccio "ogni istanza ha un proprio database dedicato", inizialmente dedicherai molto tempo a risolvere il problema di più database mentre potresti spenderli aumentando la probabilità che il tuo progetto abbia successo.

In ogni caso, assicurati di avere il backup e il ripristino del database coperti e ben compresi.

    
risposta data 17.12.2010 - 12:58
fonte

Leggi altre domande sui tag