2010-11-23 3 views
1

Je cherche la meilleure solution pour implémenter la messagerie à plusieurs utilisateurs dans le système (style Facebook).Schéma de base de données pour la messagerie à plusieurs utilisateurs

Je suis venu avec l'idée suivante: où chaque message appartient au Message_Chain et dans la table Message_status l'expéditeur-utilisateur et les utilisateurs-récepteurs sont énumérés. Cependant, j'ai peur que ce schéma ne soit pas très efficace lorsqu'il y a des millions de messages dans le système.

Quelqu'un pourrait-il suggérer une autre solution au problème actuel? Ou expliquer pourquoi ma solution ira bien?

CREATE TABLE `message` (
    `msg_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `msg_text` TEXT NOT NULL , 
    `msg_date` DATETIME NOT NULL , 
    PRIMARY KEY (`msg_id`)); 

CREATE TABLE `message_chain` (
    `msgc_id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `msgc_topic` VARCHAR(255) NULL , 
    PRIMARY KEY (`msgc_id`)); 

CREATE TABLE `message_status` (
    `msgsta_msg_id` BIGINT UNSIGNED NOT NULL , 
    `msgsta_usr_id` INT UNSIGNED NOT NULL , 
    `msgsta_msgc_id` INT UNSIGNED NOT NULL , 
    `msgsta_is_sender` TINYINT(1) NULL , 
    `msgsta_is_read` TINYINT(1) NULL DEFAULT NULL , 
    `msgsta_is_deleted` TINYINT(1) NULL , 
    PRIMARY KEY (`msgsta_msg_id`, `msgsta_usr_id`); 
+3

« Je suis cependant peur que ce schéma est pas très efficace d'utiliser quand il y a des millions de messages dans le système. » .. Je pense – Jack

+2

En désaccord :) Planification mature = pas de problème de tête – Websirnik

Répondre

0

Le schéma devrait fonctionner correctement tant qu'il n'y a pas trop de destinataires du même message. Je ne vois pas comment vous pourriez le rendre beaucoup plus petit ou plus efficace.

Le seul problème de performance que je peux voir est que si vous voulez faire de la diffusion, c'est-à-dire envoyer le même message à un grand groupe ou, disons, à tous les utilisateurs du système. Envoyer un tel message sera très lent (été là, fait cela). Dans ce cas, je suivrais par erreur l'état de ces messages globaux, c'est-à-dire, créer la ligne d'état pour un utilisateur individuel seulement après qu'il ait ouvert le message. Mais si vous n'avez pas prévu une telle fonctionnalité, je dirais ignorer ce problème pour le moment.

0

Ma solution est d'éviter le stockage massif de données en utilisant plus de programmation pour déterminer quel message va à qui.

Par exemple, si vous voulez envoyer un message à tous les utilisateurs du système, vous placez un « » dans la colonne USR_ID, puis programmmatically vous pouvez chercher tous les messages où le USR_ID = current_usr_id OR « ». Ensuite, vous pouvez faire une variété de filtres et créer votre propre syntaxe pour créer des listes messager_user sans stockage de base de données.

On dirait un compromis entre le traitement/stockage ...

+0

Cela ne répond pas vraiment à la question. Si vous avez une question différente, vous pouvez le demander en cliquant sur [Poser une question] (http://stackoverflow.com/questions/ask). Vous pouvez également [ajouter une prime] (http://stackoverflow.com/help/privileges/set-bounties) pour attirer davantage l'attention sur cette question. - [À revoir] (/ review/low-quality-posts/10710438) –

+0

@EwaldHofman la «question» est: Quelqu'un pourrait-il suggérer une autre solution au problème actuel? – MikeMurko

Questions connexes