Carico / capacità del server in base alla struttura dei dati

0

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:

  1. Avevo ragione di ritenere che la tecnica che ho usato riducesse il carico delle richieste e delle risposte per il server?

  2. 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.

    
posta Seighth Hellsing 13.02.2018 - 09:58
fonte

1 risposta

1
  1. Was I correct to think that the technique that I used reduces the load of the requests and response for the server?

No, non proprio. Ma è complicato e dipende da come stai usando il database. Dopo tutto non hai davvero bisogno di un database per questa applicazione. semplicemente invia i messaggi direttamente al cliente e non li memorizza.

Se stai aggiornando la riga ogni volta che qualcuno invia un messaggio, sarà molto più intenso dell'inserimento di una nuova riga.

Inoltre, come ora ti rendi conto, il download dell'intera conversazione è molto più lento degli ultimi 10 messaggi.

  1. Does using the "conventional" way of storing chat messages, give more advantages than disadvantages to the way that I did.

Ciò che hai implementato è effettivamente una soluzione di storage no-sql. È possibile utilizzare mongoDB o qualcosa per farlo in modo più efficiente di mySql e risolve il problema di avere un singolo database che deve conoscere tutti i messaggi. Che, se ci pensi, non ne hai davvero bisogno. Tutto quello che ti interessa è che il databse conosce tutti i messaggi di una conversazione. Non tutti i messaggi di sempre.

Quindi potrebbe essere sensato dividere il database dai partecipanti. Quindi puoi avere database di suddivisione più piccoli, forse uno per paese o gruppo di utenti.

    
risposta data 13.02.2018 - 11:40
fonte

Leggi altre domande sui tag