2012-04-18 9 views
28

Sto pianificando di memorizzare una stringa json_encoded sul mio database. Non posso dire con precisione la lunghezza che sarà, ma sono abbastanza sicuro che sarà lungo. La mia preoccupazione è quale tipo di campo che userò per questo, è blob o text?Devo usare blob o testo per JSON in MySQL?

Preferisco quello in cui posso risparmiare spazio il più possibile durante la ricerca veloce, in ogni caso ho un'altra colonna in cui dovrei solo indicizzare.

risposta

24

blob è di solito per cose come le immagini, i file binari ecc text dovrebbe essere abbastanza buono per il vostro caso, oppure è possibile utilizzare longtext che ha ancora più grande capacità di spazio, se questo è davvero un problema.

Ricerca-saggio, dal momento che si memorizzano json_encode 'd roba, avrai ancora bisogno di chiamare json_decode su di esso in ogni caso per essere utile nella vostra applicazione, non credo che la scelta di argomenti tipo di dati in questo caso.

Un modo migliore è di normalizzare la progettazione del database invece di archiviare materiale correlato in un'unica grande stringa di json.

+2

Grazie per i vostri consigli gentili. –

+1

Ho circa 2 anni e 11 mesi più tardi, ma per quanto riguarda i payload per i webhook, la memorizzazione di JSON serializzati mentre aspettavo che fosse inviata sembra un buon esempio. Ho un feedback positivo se qualcuno la pensa diversamente. – Mave

+2

Pinterest sta memorizzando JSON in 'text', anche loro [lo hanno recentemente pubblicato in questo articolo (scorri verso il basso a metà strada)] (https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled- our-mysql-flotta). – DanFromGermany

21

Come indicato nella documentazione di MySQL, dal 5.7.8 è supportato un tipo di dati JSON nativo.

Il tipo di dati JSON offre questi vantaggi rispetto memorizzare stringhe JSON-formato in una colonna stringa:

  • validazione automatica dei documenti archiviati in JSON colonne JSON. I documenti non validi producono un errore.
  • Formato di archiviazione ottimizzato. I documenti JSON memorizzati nelle colonne JSON vengono convertiti in un formato interno che consente un rapido accesso in lettura agli elementi del documento. Quando il server in seguito deve leggere un valore JSON memorizzato in questo formato binario, il valore non deve essere analizzato da una rappresentazione di testo. Il formato binario è strutturato in modo da consentire al server di cercare i sottooggetti o i valori nidificati direttamente tramite la chiave o l'indice dell'array senza leggere tutti i valori prima o dopo di essi nel documento.

Quindi, come afferma la documentazione di MySQL, è necessario utilizzare il tipo di dati JSON e non il testo.