2011-11-02 27 views
37

Sto progettando una piccola app/gioco web. Cosa sarebbe meglio: tabelle MySQL o file JSON? Entrambi memorizzano le informazioni. Possono entrambi essere analizzati da PHP. Quali sono i vantaggi/svantaggi?MySQL vs. JSON - Perché?

Questo è ciò che intendo:

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

vs.

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

EDIT: Wow, Sono passati appena 3 anni da quando ho fatto questa domanda ed è sorprendente vedere quanta Sono maturato da quando ho fatto questa domanda. Da un futuro me al passato, questo è il motivo per cui i due non funzionano. (Nel caso in cui qualcuno ingenuo come me possa riferirsi a questo)

Pensavo che i due fossero intercambiabili perché erano entrambi modi di memorizzare le informazioni, anche se memorizzare e usare file JSON era più facile per me al tempo. I database sono pezzi di software separati che rendono il recupero dei dati molto più veloce e non finiscono per essere gonfiati nel tempo. Inoltre, il trasferimento di tutti i dati in uno o due file rende pericolosamente facile ottenere il furto o la perdita dei dati, laddove un database è molto più sicuro con quelli. Fondamentalmente, i dati non dovrebbero far parte del tuo codice; dovrebbe essere una cosa separata con cui funziona il tuo codice.

Inoltre, imparerai a conoscere l'hashing e la salatura per un paio di anni lungo la linea, quindi non memorizzare le password in formato testo!

+1

Esistono centinaia di metodi di archiviazione per i dati. Confrontare le tabelle mySQL con i file json è interessante, ma non molto di una domanda senza ulteriori informazioni su quali sono le vostre esigenze. Altrimenti questa domanda otterrà "opinioni e commenti" piuttosto che una "risposta" utilizzabile. –

+0

@ nicholas.hauschild Penso di sì; le righe di nome utente e password possono essere facilmente sostituite con stringhe e così via. Sono vagamente paragonabili, quindi voglio sapere quale è meglio mantenibile accessibile. – avinashbot

+0

Grazie (si prega di aggiornare la domanda). user/pass è l'autenticazione che è in realtà (un altro) argomento separato. Sebbene io memorizzassi il pw almeno con l'hash nel db e non penso che lo farei passare in giro comunque. –

risposta

20

Per essere veramente smussato, MySQL è un database mentre JSON no, quindi la risposta corretta è MySQL, senza esitazione. JSON è solo un linguaggio, e nemmeno quello.JSON non è mai stato progettato per gestire qualsiasi cosa come le connessioni simultanee o qualsiasi tipo di manipolazione dei dati, poiché la sua funzione è quella di rappresentare dati, non gestire esso.

Quindi andare con MySQL per la memorizzazione dei dati. Quindi dovresti usare un po 'di linguaggio di programmazione per leggere quel database e inviarlo come JSON, piuttosto che archiviare qualcosa in JSON.

Se si archiviano i dati nei file, sia in formato JSON o qualsiasi altra cosa, si avranno tutti i tipi di problemi che le persone hanno smesso di preoccuparsi poiché i database sono stati utilizzati per la stessa cosa. Limiti di dimensioni, serrature, nominali. È abbastanza buono quando hai un utente, ma nel momento in cui ne aggiungi altri, inizierai a risolvere così tanti problemi che probabilmente dovresti finire scrivendo un intero motore di database solo per gestire i file per te, mentre tu da sempre avrebbe potuto semplicemente usare un vero database.

14

I 2 non sono realmente confrontabili.

MySQL memorizza i dati in un database o in realtà è un database. JSON memorizza i dati in un formato da passare al e dal server al client. Javascript/jquery possono usare JSON come oggetti dati, ma esistono solo sul lato client per la durata della pagina.

Quindi, se si desidera memorizzare i dati come JSON (non consigliato), è necessario archiviarli come file di testo per salvare i dati.

È necessario memorizzare i dati in un database. Usa le funzioni per convertirlo in formato JSON, quindi passa alla pagina web per javascript da consumare e presentare all'utente.

+0

La tua risposta ha chiarito la mia confusione. Ma ho una piccola domanda. Perché dovremmo convertire i dati SQL in JSON e poi passarli alla pagina web. Invece possiamo usare le query SQL per recuperare direttamente i dati nella pagina web. La conversione in JSON e il passaggio alla pagina Web sono più efficienti? – harishannam

+0

Non dovrebbe mai chiamare il database direttamente dal lato client (creando script sql per estrarre i dati) enormi problemi di sicurezza. Se la pagina non è ancora stata renderizzata al client (che si sta ancora sviluppando sul server) è possibile chiamare in questo caso, ma dovrebbe avere un po 'di disapprovazione, dovrebbe sempre avere un qualche tipo di livello di servizio/repository da passare. –

+0

Se stai semplicemente prelevando i dati (tramite ajax) e ottenendo solo Json (non l'html completo della pagina), allora penserei che il server sarebbe più veloce a convertire in una stringa json, quindi lasciare che un client sul lato client proverà in javascript per convertire i dati in json. Ajax e Json sono usati come strumento per pubblicare/ottenere dati senza dover pubblicare o ottenere il codice HTML completo della pagina. Json è solo una stringa formattata che è più facile da contenere oggetti di dati più grandi. più orientato agli oggetti. –

17

MySQL sarà preferibile per molte ragioni, non ultimo il fatto che non si desidera che il processo del server Web disponga dell'accesso in scrittura al file system (tranne che per la registrazione), poiché è un modo semplice per sfruttarlo.

Inoltre, il team MySQL ha dedicato molto impegno ingegneristico a cose come la replica, l'accesso concorrente ai dati, la conformità ACID e l'integrità dei dati.

Immaginate se, ad esempio, aggiungete un nuovo campo che è richiesto in qualsiasi struttura dati che state memorizzando. Se si memorizzano in file JSON, sarà necessario avere un processo che apre ogni file, aggiunge il campo, quindi lo salva. Confrontate questo con la difficoltà di usare ALTER TABLE con un valore DEFAULT per il campo. (Un esempio un po 'forzato, ma quanti hacks vuoi lasciare nel tuo codebase per gestire i vecchi dati?)

+0

Wow. Ciò ha senso. Grazie! – avinashbot