Come dovrei strutturare il mio database per ottenere il massimo in modo efficiente in questo scenario?

0

Sto sviluppando uno script PHP che analizza il traffico web dei siti Web dei miei clienti. Inserendo un collegamento a un javascript nel sito Web dei clienti (si pensi alle analisi di Google), il mio script raccoglie informazioni quali: indirizzo IP dei visitatori, link di riferimento, link della pagina corrente, agente utente, ecc. Ora i miei clienti possono visualizzare queste statistiche tramite un pannello di controllo che ho costruito. Questi client possono anche regolare le impostazioni del profilo, impostare le regole del firewall, creare ticket di assistenza e pagare le fatture.

Attualmente tutto il traffico è memorizzato in una tabella. Potete immaginare che questo tabel diventerebbe molto grande poiché alcuni miei clienti ricevono migliaia di pagine viste al giorno. Inoltre, tutti i dati sul traffico di ciascun cliente verrebbero archiviati nella stessa tabella, creando un disastro. Questo è lo stesso per le regole del firewall attualmente e per il sistema di fatturazione e supporto. Sto cercando un modo per strutturare il mio database in un modo più organizzato per contenere grandi quantità di dati di più utenti.

Questo è il primo progetto che sto sviluppando che riguarda tanti dati e vorrei ricevere suggerimenti e suggerimenti. Stavo pensando di utilizzare più database per strutturare i dati. Il database principale memorizzerà i dati degli utenti (e-mail, pass, id, ecc.) / Impostazioni del sito web. Ciascun client avrà un database univoco denominato prefix_userid, che trasporta le tabelle in possesso del traffico, della fattura e dei dati del ticket di supporto.

Sarebbe una soluzione e rallenterebbe o accelererebbe le prestazioni complessive (cioè la diffusione dei dati su database multipli). Ho un VPS solido, ma vorrei essere sicuro ed essere il più effimero possibile.

    
posta Bob Jansen 01.11.2013 - 05:35
fonte

2 risposte

1

Sembra che tu abbia bisogno di uno schema per ogni cliente.

vale a dire. hai lo stesso set di tabelle che hai attualmente ma definito una volta per client.

Il tuo client accederà solo alla tabella che appartiene al suo schema.

Anche se questo potrebbe rendere più facile organizzare e tenere traccia di ogni cliente, dubito che ci sarebbero molte differenze nelle prestazioni. Scrivere da 1 a 20 tabelle e scrivere da 20 GB a 1 tabella è praticamente la stessa cosa per quanto riguarda il file system e l'hardware.

    
risposta data 01.11.2013 - 07:52
fonte
0

Penso che dovresti separare alcune cose dal momento che stai parlando di diverse applicazioni (statistiche / firewall / transazioni) che hai per caso mostrato nella stessa interfaccia. Non è necessario implementare il back-end allo stesso modo.

Probabilmente le parti: fatture, firewall, ecc. non avranno un carico enorme come stimolo in base alla tua domanda.

Le statistiche sicuramente lo fanno e devono essere elaborate rapidamente all'inizio perché possono rallentare i siti web.

Ora, poiché puoi separare le statistiche dal normale database, puoi pensare alle statistiche come a una cosa separata. La maggior parte delle statistiche non ha bisogno di un database relazionale (anche se può funzionare perfettamente). Non hai bisogno di transazioni, blocco ecc. Quindi seleziona un metodo di archiviazione che si adatta, potrebbe essere un mysql piatto, mongodb, ecc.

Inoltre ripensa: perché dovresti farlo tu stesso, non potresti utilizzare ad esempio Google Analytics o Piwik e utilizzare la loro API per mostrare gli stessi risultati al cliente?

Costruire report da questo è qualcosa che puoi fare in un secondo momento, quindi non cercare di fare cose intelligenti quando accedi alla vista. Basta mantenere quella parte semplice. Allora avrai le migliori possibilità di una risposta veloce.

Quindi non vedere tutto come lo stesso, vedere ogni applicazione separatamente e lavorare fino alla soluzione migliore per quel problema.

A proposito dell'idea di sharding (database per client) vedi:

link

È molto impegnativo farlo bene, quindi assicurati di averne bisogno.

    
risposta data 01.11.2013 - 13:34
fonte

Leggi altre domande sui tag