2011-09-15 13 views
5

Stiamo catturando una stringa binaria grezza di dimensioni variabili (da 100k a 800k) e vorremmo memorizzare queste singole stringhe. Non hanno bisogno di essere indicizzati (duh) e non ci saranno interrogazioni sul contenuto del campo.Memorizzazione di stringhe lunghe binarie (dati non elaborati)

La quantità di questi inserti sarà molto grande (sono a scopo di archiviazione), diciamo 10.000 al giorno. Qual è il miglior tipo di campo per stringhe binarie di grandi dimensioni come queste? Dovrebbe essere text o blob o qualcos'altro?

risposta

13

Per quanto riguarda PostgreSQL, il tipo text è fuori questione. È più lento, utilizza più spazio ed è più soggetto a errori rispetto a bytea per lo scopo.
ci sono fondamentalmente 3 approcci:

  1. uso di tipo bytea (fondamentalmente il pg equivalente di tipo SQL blob)

  2. uso "large objects"

  3. blob Store come file nel filesystem e memorizza solo il nome file nel database.

Ognuno ha i suoi vantaggi e svantaggi.

  1. è piuttosto semplice da gestire ma richiede più spazio su disco. È richiesta una certa decodifica e codifica, il che lo rende anche slow-ish. I backup crescono rapidamente in dimensioni!

  2. è un po 'difficile da gestire, ma hai la tua infrastruttura per manipolare i BLOB - se necessario. E puoi fare più facilmente backup separati.

  3. è di gran lunga il modo più veloce e utilizza il minor spazio su disco. Ma non fornisce l'integrità referenziale che si ottiene quando si archivia nel database.

Ho un certo numero di implementazioni come quella per i file immagine: memorizzare una piccola miniaturain un bytea-campo per l'integrità referenziale e rapida consultazione. Salva l'immagine originale come file nel file system. Naturalmente, è necessario riflettere su quando e come eliminare i file obsoleti, come eseguire il backup dei file esterni e così via.

+0

Ottima risposta. Grazie. – teustis

+1

Esistono dati recenti che confrontano questi approcci? Sarebbe meraviglioso se ci fossero dei confronti oggettivi. – beldaz

2

Probabilmente dovresti usare blob nella maggior parte dei database. Le colonne text vengono spesso normalizzate o trasformate in base a una codifica di testo o locale; e quindi i byte effettivi potrebbero non essere conservati come previsto. In quasi tutti i casi, questa è l'unica differenza tra una colonna text e blob.

0

Abbiamo la colonna VARBINARIO dell'utente per memorizzare fino a 300 MB di file.

Problemi correlati