2010-04-09 13 views
8

Sto lavorando a un progetto che richiede grandi quantità di dati dal delizioso sito Web. I dati disponibili sono "Data, UserId, Url, Tag" (per ciascun segnalibro).Progettazione del database per una grande quantità di dati

Ho normalizzato il mio database in un 3NF e, a causa della natura delle query che volevamo utilizzare in combinazione, sono arrivato a 6 tabelle ... Il design sembra buono, tuttavia, ora che una grande quantità di i dati sono nel database, la maggior parte delle query richiede di unire almeno 2 tabelle per ottenere la risposta, a volte 3 o 4. All'inizio, non abbiamo avuto problemi di prestazioni, perché per i test non avevamo aggiunto troppe dati al database. Ora che disponiamo di molti dati, la semplice unione di tabelle estremamente grandi richiede molto tempo e per il nostro progetto, che deve essere in tempo reale, questo è un disastro.

Mi stavo chiedendo come le grandi aziende risolvano questi problemi. Sembra che la normalizzazione delle tabelle aggiunga complessità, ma come fa la grande azienda a gestire grandi quantità di dati nei loro database, non usano la normalizzazione?

Grazie.

risposta

13

Dal momento che hai chiesto su come le grandi aziende (in genere) si avvicina a questo:

Di solito hanno un DBA (amministratore di database) che vive e respira il database l'azienda utilizza.

Ciò significa che hanno persone che sanno tutto da come progettare le tabelle in modo ottimale, profilo e messa a punto di query/indici/OS/server per sapere quale revisione del firmware del controller RAID può causare problemi al database.

Non parli molto del tipo di tuning che hai eseguito, ad es.

  • Si sta utilizzando tabelle MyISAM o InnoDB? Le loro prestazioni (e non ultime le loro caratteristiche) sono radicalmente diverse per i diversi carichi di lavoro.
  • Le tabelle sono correttamente indicizzate in base alle query eseguite?
  • esegui EXPLAIN su tutte le tue query - che ti aiuteranno a identificare le chiavi che possono essere aggiunte/rimosse, se le chiavi appropriate sono selezionate, confronta le query (SQL ti lascia un sacco di cose per realizzare le stesse cose)
  • Have hai sintonizzato la query-cache? Per alcuni carichi di lavoro, la cache della query (impostazione predefinita attivata) può causare un notevole rallentamento.
  • Quanta memoria ha la tua scatola, e mysql è sintonizzato per approfittare di questo?
  • Si utilizza un file system e una configurazione raid orientata verso il database?
  • A volte è necessario un po 'di de-normalizzazione.
  • I diversi prodotti di database avranno caratteristiche diverse, MySQL potrebbe essere incredibilmente veloce per alcuni worlkoad e lento per gli altri.
+3

Grazie per la risposta. Onestamente, non stavo pensando alle cose che hai menzionato qui. Ora mi sono reso conto di aver ignorato molto quando stavo progettando il database. Il database utilizza MyISAM. Leggerò delle cose che hai menzionato. molte grazie – Hossein

Problemi correlati