2012-06-12 29 views
5

Devo scrivere nel database MySQL un sacco di dati per circa 5 volte al secondo. Qual è il modo più veloce: inserire ogni 1/5 di secondo o fare una coda e inserire tutti i dati memorizzati ogni ~ 5 secondi? Se la seconda via è migliore - è possibile inserire in 1 tabella usando 1 richiesta poche righe?Inserimento nella banca dati

risposta

2

Considerando la frequenza delle inserzioni sua meglio a vai con il secondo approccio che è in coda e che aggiungere in una volta.!

ma si dovrebbe prendere in considerazione questi scenari prima:

  1. È il vostro sistema in tempo reale.? Sì, qual è il ritardo massimo che puoi permetterti (poiché ci vorranno ~ 5 secondi per il successivo inserimento e i dati saranno mantenuti/disponibili)?

  2. Quali sono le probabilità che Errori/valori errati vengano immessi nei dati, come se un dato non fosse corretto perderai il resto tutti se la query dovesse fallire.

+0

Sì, il sistema è in tempo reale. I dati sono semplici base64 con ~ 100 byte di dati. – Ockonal

+2

Se così fosse, andrei con un singolo inserimento e con Connection Pooling sul livello DAO. Poiché non puoi permetterti di perdere dati in RTS, anche il tempo è fondamentale.! Spero che questo ti abbia aiutato. :) –

+0

Grazie per l'aiuto;) – Ockonal

2

Utilizzo di più pool di buffer con innodb_buffer_pool_instances. può dipendere dal numero di core onmachine. Utilizzare Partitioning della tabella.
È possibile inserire collettivamente i dati utilizzando XML.

1

Si può fare un inserto con tutti i dati senz qualcosa di simile:

INSERT INTO table (field1, field2,... , fieldN) 
VALUES 
(value1_1', value1_2,... , value1_N), 
(value2_1', value2_2,... , value2_N), 
... 
(valueM_1', valueM_2,... , valueM_N); 
2

Come ogni transazione viene fornito con un costo fisso, direi che facendo un multi-linea di inserire ogni pochi secondi è meglio . Con alcuni dei sistemi che utilizziamo al lavoro memorizziamo centinaia di righe in cache prima di inserirle tutte in una volta.

Dal MySQL documentation si può fare un multi-linea di inserire in questo modo:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 
1

mia esperienza è che quando si inseriscono i dati in un database MySQL è più veloce di lavorare con lotti.

Quindi l'opzione lento sta eseguendo più query di inserimento:

 

    INSERT INTO my_table VALUES (1, "a"); 
    INSERT INTO my_table VALUES (2, "b"); 

L'opzione più veloce sarebbe:

 

    INSERT INTO my_table VALUES (1, "a"), (2, "b");