2012-04-18 23 views
28

Estoy planeando almacenar una cadena json_encoded en mi base de datos. No puedo precisar exactamente cuánto tiempo va a ser, pero estoy bastante seguro de que será largo. Mi preocupación es qué tipo de campo voy a usar para esto, ¿es blob o text?¿Debo usar blob o texto para JSON en MySQL?

Prefiero el que puedo ahorrar espacio tanto como sea posible en la búsqueda rápida, en cualquier caso tengo otra columna donde debería indexar.

Respuesta

24

blob generalmente es usado para cosas como imágenes, archivos binarios, etc. text deben ser lo suficientemente bueno para su caso, o puede utilizar longtext que tiene aún mayor capacidad de espacio si eso es realmente una preocupación.

searching-sabia, puesto que está almacenando json_encode 'cosas d, todavía tendrá que llamar json_decode en él de todos modos para que sea útil en su aplicación, no creo que la elección de los asuntos de tipo de datos en este caso.

Una forma mejor es normalizar el diseño de su base de datos en lugar de almacenar cosas relacionadas en una gran cadena de json.

+2

Gracias por su comprensión. –

+1

Tengo alrededor de 2 años y 11 meses más tarde, pero en cuanto a las cargas útiles para webhooks, almacenar JSON en serie mientras se espera que se envíe parece ser un buen caso de uso. Me encantan los comentarios si alguien piensa de manera diferente. – Mave

+2

Pinterest también almacena JSON en 'text', [lo publicaron recientemente en este artículo (desplácese hacia abajo hasta la mitad)] (https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled- nuestra-mysql-flota). – DanFromGermany

21

Como se indica en la documentación de MySQL, desde 5.7.8 se admite un tipo de datos JSON nativo.

El tipo de datos JSON ofrece estas ventajas sobre el almacenamiento de cadenas JSON-formato en una columna de cadena:

  • la validación automática de documentos almacenados en columnas JSON JSON. Los documentos no válidos producen un error.
  • Formato de almacenamiento optimizado. Los documentos JSON almacenados en columnas JSON se convierten a un formato interno que permite un acceso de lectura rápido a los elementos del documento. Cuando el servidor más tarde debe leer un valor JSON almacenado en este formato binario, no es necesario analizar el valor desde una representación de texto. El formato binario está estructurado para permitir que el servidor busque subobjetos o valores anidados directamente por clave o índice de matriz sin leer todos los valores antes o después de ellos en el documento.

Por lo tanto, como indica la documentación de MySQL, se debe utilizar el tipo de datos JSON y no el texto.