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

je construis une application de chat et je veux une histoire complète de tous les messages jamais envoyés dans la conversation de chat. À l'heure actuelle, je stocke chaque message sous une seule rangée dans une table appelée "messages". Je suis conscient que cette table pourrait croître énorme que même les petits messages comme 'Hi' auraient leur propre enregistrement de base de données.

est-ce que quelqu'un peut recommander une solution mysql plus évolutive? Je n'exige pas que les messages individuels soient consultables, modifiables ou délétères. Peut-on l' la conversation sera stockée dans un énorme champ?

adorerait entendre vos idées!

48
demandé sur wilsonpage 2011-08-15 12:41:54

3 réponses

il n'y a rien de mal à sauvegarder toute l'histoire dans la base de données, ils sont préparés pour ce genre de tâches.

en fait, vous pouvez trouver ici dans Stack Overflow un lien vers un exemple de schéma pour un chat: exemple

si vous êtes toujours inquiet pour la taille, vous pouvez appliquer quelques optimisations aux messages de groupe, comme Ajouter un tampon à votre application que vous poussez seulement après un certain temps (comme 1 minute ou plus); de cette façon vous éviteriez d'avoir seulement 1 messages de ligne

32
répondu jasalguero 2017-05-23 12:26:33

si vous pouvez éviter la nécessité d'Écritures simultanées à un seul fichier, il semble que 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 utilisateur\conversation). et ont une structure de répertoire/ fichier

Voici une vue simplifiée de la structure du fichier:

chat-1-bob.txt
        201101011029, hi
        201101011030, fine thanks.

chat-1-jen.txt
        201101011030, how are you?
        201101011035, have you spoken to bill recently?

chat-2-bob.txt
        201101021200, hi
        201101021222, about 12:22
chat-2-bill.txt
        201101021201, Hey Bob,
        201101021203, what time do you call this?

vous n'auriez alors besoin de stocker que l'identifiant de l'utilisateur, ID de conversation (guid ?) et une référence à le nom de fichier.

je pense que vous aurez du mal à trouver une solution plus simple et évolutive.

vous pouvez utiliser LOAD_FILE pour obtenir les données aussi voir: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

si vous avez une exigence de reconstruire une conversation, vous aurez besoin de mettre une valeur (date time) à côté de votre message de chat envoyé (dans le fichier) pour vous permettre de fusionner et trier les fichiers, mais à ce il est probablement une bonne idée d'envisager l'utilisation d'une base de données.

19
répondu Kevin Burton 2018-06-28 07:55:12

vous pouvez créer une base de données pour X conversations qui contient tous les messages de ces conversations. Cela vous permettrait d'ajouter une nouvelle base de données (ou un nouveau serveur) chaque fois que x dépasse. X est le nombre de conversations que votre infrastructure prend en charge (en fonction de votre matériel,...).

le problème est toujours, qu'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 an chaque magasins par exemple 1000 conversations. Il il est possible qu'il y ait beaucoup plus de "grosses" conversations sur le serveur A que sur le serveur B (puisqu'il s'agit de contenu créé par l'utilisateur). Vous pouvez ajouter une base de données" maître " qui contient une recherche, sur laquelle la base de données/Serveur les conversations simples peuvent être trouvées (ou vous avez un schéma pour assigner une base de données à partir de hash/modulo ou quelque chose).

peut-être que vous pouvez 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.

1
répondu Bernhard Kircher 2011-08-15 08:55:21