2011-11-02 33 views
37

Estoy diseñando una pequeña aplicación web/juego. ¿Qué sería mejor: tablas MySQL o archivos json? Ambos almacenan información. Ambos pueden ser analizados por PHP. ¿Cuáles son las ventajas/desventajas?MySQL vs. JSON - ¿Por qué?

Esto es lo que quiero decir:

username | password 
------------------- 
seefour | abc123 

vs

{ 
    "username":"seefour", 
    "password":"abc123" 
} 

EDIT: Wow, ha sido sólo 3 años desde que hice esta pregunta y es sorprendente ver la cantidad de He madurado desde cuando hice esta pregunta. Desde un futuro yo hasta el pasado yo, esta es la razón por la cual los dos no funcionan. (En caso de que alguien ingenuo como yo en ese momento pueda referirse a esto)

Solía ​​pensar que los dos eran intercambiables porque ambas eran formas bastante sencillas de almacenar información, aunque el almacenamiento y uso de archivos JSON era más fácil para mí en el hora. Las bases de datos son piezas separadas de software que hacen que la recuperación de datos sea mucho más rápida y que no termine siendo inflada con el tiempo. Además, transportar todos los datos en uno o dos archivos hace que sea peligrosamente fácil terminar robándole o perdiendo sus datos, mientras que una base de datos es mucho más segura con ellos. Fundamentalmente, los datos no deberían ser parte de su código; debería ser algo separado con lo que tu código funciona.

Además, aprenderá a usar hashing y salazón hace un par de años, ¡así que no almacene las contraseñas en texto sin formato!

+1

Hay cientos de métodos de almacenamiento para los datos. Comparar tablas mySQL con archivos json es interesante, pero no es una gran pregunta sin demasiada información acerca de cuáles son sus necesidades. De lo contrario, esta pregunta obtendrá "opiniones y comentarios" en lugar de una "respuesta" utilizable. –

+0

@ nicholas.hauschild Creo que sí; las filas de nombre de usuario y contraseña pueden reemplazarse fácilmente con cadenas y tal. Son vagamente comparables, por lo que quiero saber cuál es mejor mantenible. – avinashbot

+0

Gracias (actualice la pregunta). user/pass es autenticación que es realmente (otro) tema separado. Aunque almacenaría el pw al menos hash en el DB y no creo que vaya a pasarlo de todos modos. –

Respuesta

20

Para ser franco, MySQL es una base de datos mientras que JSON no lo es, por lo que la respuesta correcta es MySQL, sin dudarlo. JSON es solo un lenguaje, y apenas eso.JSON nunca fue diseñado para manejar nada como conexiones concurrentes o cualquier tipo de manipulación de datos, ya que su propia función es representar datos, no a administrar.

Vaya con MySQL para almacenar los datos. Luego debe usar algún lenguaje de programación para leer esa base de datos y enviar esa información como JSON, en lugar de almacenar algo en JSON.

Si almacena los datos en archivos, ya sea en formato JSON o en cualquier otra cosa, tendrá todo tipo de problemas que la gente ha dejado de preocuparse desde que las bases de datos comenzaron a usarse para lo mismo. Limitaciones de tamaño, bloqueos, nómbrelo. Es lo suficientemente bueno cuando tiene un usuario, pero en el momento en que agrega más de ellos, comenzará a resolver tantos problemas que probablemente termine escribiendo un motor de base de datos completo solo para manejar los archivos por usted, mientras todo el tiempo podría simplemente haber usado una base de datos real.

14

Los 2 no son realmente comparables.

MySQL almacena datos en una base de datos o en realidad es una base de datos. JSON almacena los datos en un formato para pasarlos al servidor y desde el servidor al mismo. JavaScript/jquery puede usar JSON como objetos de datos, pero solo existen en el lado del cliente durante la vida de la página.

Por lo tanto, si desea almacenar datos como JSON (no recomendado) probablemente tenga que almacenarlos como archivos de texto para guardar los datos.

Debe almacenar los datos en una base de datos. Use las funciones para convertirlo a formato JSON, luego páselo a la página web para que javascript lo consuma y lo presente al usuario.

+0

Tu respuesta despejó mi confusión. Pero tengo una pequeña pregunta. ¿Por qué deberíamos convertir datos SQL a JSON y luego pasarlos a la página web? En su lugar, podemos usar consultas SQL para buscar directamente los datos en la página web. ¿Es más eficiente convertir a JSON y luego pasarlo a la página web? – harishannam

+0

Nunca debe llamar a la base de datos directamente desde el lado del cliente (creando scripts sql para extraer datos) grandes problemas de seguridad. Si la página aún no se ha procesado para el cliente (aún se está construyendo en el servidor) puede llamarla entonces, pero mal visto, siempre debe tener algún tipo de capa de servicio/repositorio por la que pase. –

+0

Si acaba de extraer los datos (a través de ajax) y obtiene solo Json (no el html completo de la página), entonces pensaría que el servidor sería más rápido convirtiendo a json, luego dejaría que una computadora del lado del cliente pruebe en javascript a convertir datos a json. Ajax y Json se utilizan como una herramienta para publicar/obtener datos sin tener que publicar u obtener el html completo de la página. Json es solo una cadena formateada que es más fácil de contener objetos de datos más grandes. más orientado a objetos –

17

MySQL será preferible por muchas razones, una de las cuales es que no desea que su proceso de servidor web tenga acceso de escritura al sistema de archivos (excepto el posible registro) porque es una forma fácil de ser explotado.

Además, el equipo de MySQL ha puesto mucho esfuerzo de ingeniería en cosas como la replicación, el acceso simultáneo a los datos, el cumplimiento de ACID y la integridad de los datos.

Imagine si, por ejemplo, agrega un nuevo campo que se requiere en cualquier estructura de datos que esté almacenando. Si almacena en archivos JSON, tendrá que tener algún proceso que abra cada archivo, agregue el campo y luego lo guarde. Compare esto con la dificultad de usar ALTER TABLE con un valor DEFAULT para el campo. (Un poco de un ejemplo artificial, pero ¿cuántos hacks quieres dejar en tu base de código para manejar datos viejos?)

+0

Wow. Eso tiene sentido. ¡Gracias! – avinashbot