Usando PHP, ho creato una chat, e ho usato un modo non ortodosso per memorizzare i messaggi di chat in MySQL.
Il tbl_chat_messages
ha le seguenti colonne:
id | sender_id | receiver_id | message | date
I messaggi effettivi sono json_encoded e vengono quindi memorizzati nella colonna message
che ha il tipo di dati di Longtext
. È strutturato in questo modo:
{
"sender_id":"3",
"message":"This is a test message",
"date":"2017-09-17 04:47:40"
},
{
"sender_id":"11",
"message":"This is another test message",
"date":"2017-09-17 04:47:42"
}
Now, the "conventional" way to store chat messages in a MySQL database is to store 1 message per row in the MySQL table.
Ma nel mio caso, sto memorizzando 1 conversazione in 1 riga.
Ciò che mi ha portato ad usare questa tecnica è l'idea che, se si sta solo cercando e recuperando 1 riga su 1.000.000 di righe nella tabella del database MySQL, sarebbe più veloce di cercare e recuperare 10 righe su 1.000.000.
E mi ha anche indotto a credere che ciò riduce il carico della richiesta e della risposta fatte al server, perché recupera solo 1 riga dalla tabella.
Ciò di cui non mi ero reso conto allora che i messaggi di una singola conversazione potrebbero aumentare fino a, diciamo almeno 2 gigabyte di dati, per esempio. Significa che la colonna "messaggi" può contenere 2 GB di dati di testo.
Le mie domande sono:
-
Avevo ragione di ritenere che la tecnica che ho usato riducesse il carico delle richieste e delle risposte per il server?
-
L'uso del modo "tradizionale" di memorizzare i messaggi di chat, offre più vantaggi che svantaggi nel modo in cui ho fatto.
Note aggiuntive:
Non ho alcun problema nell'utilizzare nessuno dei due, proprio ora, non riesco a decidere quale sia il migliore.
Inoltre, non ho alcun problema con la scalabilità, poiché trovo entrambi i modi facili e divertenti da sviluppare anche a lungo termine.