2011-12-01 21 views
14

Qual è il miglior motore di archiviazione da utilizzare per una tabella di log su mysql?Mysql storage engine per log table

La tabella avrà un paio se i campi id (INT) un campo data, un varchar per il livello di messaggio e un campo di testo con il messaggio.

Si registrerà ogni sorta di cose, azioni dell'utente, gli eventi di sistema, ecc .. E 'è destinato a crescere rapidamente enorme.

record in esso sarà mai essere modificato e raramente accessibili. Quando si accede, dovrebbe essere ordinabile per livello di data e id.

Un'opzione interessante è il motore per l'archiviazione. Soddisfa tutti i criteri ma ha un unico grande svantaggio, non solo i record non possono essere cancellati, la tabella non può nemmeno essere eliminata. L'unico modo per cancellare la tabella è eliminarlo e ricrearlo.

Qualche suggerimento?

risposta

23

Ebbene, secondo la vostra domanda, InnoDB dovrebbe fare il lavoro perché:

  1. E 'la scalabilità è molto meglio di MyISAM
  2. E' row-bloccaggio, quindi se avete intenzione di avere più scrive di seleziona, si adatta meglio.
  3. Infine, dal momento che lei ha detto che essi saranno raramente accessibili, non v'è alcuna necessità di MyISAM dal momento che è meglio su query di selezione.

Check this for more information

EDIT

Ebbene, nel commento si chiede su altri motori. Ecco un full list di motori. Tra questi, come hai detto che l'archivio ha uno svantaggio, gli altri non si adattano alla tua richiesta. Ecco una citazione dal sito di MySQL:

InnoDB has been designed for maximum performance when processing large data volumes. 
Its CPU efficiency is probably not matched by any other disk-based relational database 
engine. 

Quindi, fondamentalmente:

  1. Se avete intenzione di utilizzare la memoria non come hai detto non sarà accedere ai dati molto e il vostro tavolo sarà crescere troppo Avrai bisogno di molta RAM e quando riavvierai tutti i dati andranno persi.
  2. Se avete intenzione di utilizzare MyISAM no come è stato progettato per le tabelle che selezionano le query sono più frequenti di inserire e aggiornare.
  3. Per quanto riguarda l'archivio, è la vostra scelta. Here è un confronto tra MyISAM e l'archivio per una tabella di registro. Mi attenerei comunque a InnoDB.
  4. Non menzionerò nemmeno Merge, Blackhole, Example e altri motori. (Non ho molta conoscenza del motore CSV ma, per quanto ho letto, non è un motore approriato per questo tipo di tavolo

Per essere onesti, passavo un sacco di tempo prima di fare una mossa importante nella codifica Ho studiato per ore, forse per giorni su un problema per vedere qual è il modo più appropriato, ti dirò cosa, la ricerca è buona, ma dopo un punto se ti impedisce di lavorare allora dovresti fermarti, bere un caffè e fare subito la tua scelta, quindi prova solo quello più adatto a te e, come sperimenterai, troverai anche un modo migliore, provando te stesso.Voglio dire, non credo che Facebook sia stato progettato per un tale volume, ma man mano che cresceva, hanno continuato a cambiare la struttura di conseguenza. Questo è quello che credo però, potrebbe non essere la realtà :) Comunque, spero che le informazioni ti siano d'aiuto.

EDIT 2013

qui di seguito troverete una breve descrizione per built-in storage engine di MySQL.

MyISAM

Queste tabelle includono ottimizzazioni aggiuntive, come meccanismi di cache e indicizzazione avanzata, che forniscono rapido accesso ai dati. Utilizzando il blocco a livello di tabella, il motore di archiviazione MyISAM prevede operazioni simultanee. Quando leggere le prestazioni è una preoccupazione, in generale, MyISAM è la scelta.

memoria

Chiamato anche tabelle heap, tabelle di memoria sono l'ideale per un veloce retrievel dei dati utilizzati di frequente che raramente viene alterato (come ad esempio i codici dei paesi, codici di avviamento postale o altri tabelle di ricerca). Come suggerisce il nome, i dati vengono archiviati in memoria e quindi l'accesso è molto più rapido dei dati memorizzati nei dischi. Una restrizione significativa per l'utilizzo della memoria è che i dati sono validi durante la sessione di MySQL. Quando si arresta in modo anomalo o si arresta, i dati vengono persi.

InnoDB

Un caso in cui si dovrà utilizzare questo motore di memorizzazione è quando è necessario utilizzare le chiavi esterne o transazioni. InnoDB è più concorrente di MyISAM poiché fornisce il blocco a livello di riga. Il motore di archiviazione è altamente affidabile. Un altro caso in cui si vorrà utilizzare questa memoria è quando si hanno più scritture che letture. Quando si scrivono spesso dati nella tabella, provare a utilizzare questa memoria è più concomitante di MyISAM.

Archivio

È progettato per memorizzare grandi quantità di dati in un formato compresso. Uno dei casi d'uso di questo motore di archiviazione è la memorizzazione di dati di archivio o storici o registri di sicurezza. La tabella non utilizza indici, quindi per il recupero e l'archiviazione dei dati giornalieri non è una buona scelta. È un blocco a livello di riga e i dati non sono compressi al volo quando richiesto. Inoltre, non è possibile modificare la tabella.

unione

unione è utilizzato per 'fondere' tabelle partizionate che risiedono sulla stessa macchina. Quando dividi una grande tabella in più tabelle più piccole e le accedi simultaneamente usando una tabella di unione, il più grande vantaggio è la sua velocità. Le ricerche e le ordinazioni verranno eseguite più rapidamente poiché vi sono meno dati nelle tabelle.

+0

Se la scelta fosse tra MyISAM e InnoDB, la scelta sarebbe stata semplice. che dire degli altri motori di archiviazione? InnoDB è il più adatto tra tutti? – applechief

+0

@chaft Ho modificato la risposta, per favore vederla :) –

+0

Grazie, questo briefing salva la mia giornata :) – Sal00m