110 votes

Meilleure façon de stocker des messages de chat dans une base de données?

Je construis une application de chat et je veux un historique complet de tous les messages jamais envoyés dans la conversation de chat. Pour le moment, je stocke chaque message comme une seule ligne dans une table appelée 'messages'. Je suis conscient que cette table pourrait devenir immense car même de petits messages comme 'Salut' auraient leur propre enregistrement dans la base de données.

Quelqu'un peut-il recommander une solution mysql plus évolutive ? Je n'ai pas besoin que les messages individuels soient recherchables, modifiables ou supprimables. Est-ce que toute la conversation pourrait être stockée dans un seul champ énorme ?

J'aimerais entendre vos idées !

64voto

jasalguero Points 1920

Il n'y a rien de mal à enregistrer toute l’histoire dans la base de données, elles sont préparées pour ce genre de tâches.

En fait, vous pouvez trouver ici sur Stack Overflow un lien vers un schéma d'exemple pour un chat : exemple

Si vous êtes encore préoccupé par la taille, vous pourriez appliquer quelques optimisations pour regrouper les messages, comme ajouter un tampon à votre application que vous ne poussez qu'après un certain temps (comme 1 minute environ); de cette façon, vous éviteriez d'avoir uniquement des messages d'une seule ligne.

4voto

Bernhard Kircher Points 1609

Vous pourriez créer une base de données pour x conversations contenant tous les messages de ces conversations. Cela vous permettrait d'ajouter une nouvelle base de données (ou serveur) à chaque fois que x est dépassé. X est le nombre de conversations que votre infrastructure supporte (en fonction de votre matériel,...).

Le problème demeure, car il peut y avoir de grandes conversations (avec beaucoup de messages) sur la même base de données. Par exemple, vous avez la base de données A et la base de données B qui stockent chacune 1000 conversations. Il se peut qu'il y ait beaucoup plus de "grandes" conversations sur le serveur A que sur le serveur B (puisque c'est un contenu créé par l'utilisateur). Vous pourriez ajouter une "base de données maître" contenant une table de recherche, indiquant sur quelle base de données/serveur se trouvent les conversations individuelles (ou vous avez un schéma pour attribuer une base de données à partir d'un hachage/modulo ou autre).

Peut-être pouvez-vous trouver des architectures du monde réel qui traitent des mêmes problèmes (vous n'êtes peut-être pas le premier), et qui ont déjà été résolus.

3voto

Kevin Burton Points 5460

Si nous supposons que vous ne lisez pas les données non plus.

Cela me semble être une exigence d'audit\journalisation, si c'est le cas, vous n'avez pas besoin d'une base de données pour stocker les messages de chat.

Il suffit d'ajouter la conversation à un fichier texte (1 fichier par jour?). Le fichier pourrait ressembler à ceci :

chat-1-bob 201101011029, salut
chat-1-jen 201101011030, comment vas-tu?
chat-1-bob 201101011030, bien merci.    
chat-1-jen 201101011035, as-tu récemment parlé à bill?    
chat-2-bob 201101021200, salut
chat-2-bill 201101021201, Salut Bob,
chat-2-bill 201101021203, tu appelles à quelle heure?
chat-2-bob 201101021222, vers 12h22

Je pense que vous aurez du mal à trouver une solution d'audit plus simple et évolutive.

Si vos besoins changent et que vous avez besoin de rechercher\modifier\supprimer, alors une base de données serait plus appropriée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X