4

Ok, donc j'ai un site avec les utilisateurs. Je souhaite qu'un utilisateur puisse envoyer un message à plusieurs utilisateurs en fonction d'une requête search.Comment/Le moyen le plus efficace d'envoyer un message à de nombreux utilisateurs?

Par exemple. John recherche pour "Florida" et cette recherche renvoie 1 million d'utilisateurs/entreprises. Quel est le meilleur moyen de laisser John envoyer un message à tous les utilisateurs/entreprises retournés par le résultat de la recherche?

Disons, Susan était 1 de ces utilisateurs. Quand elle se connecte sur le site, elle devrait voir le message que John a envoyé (parce que Susan était dans les résultats renvoyés par la recherche)

(NB: les messages sont internes au site (pas de courriels))

I avoir une table "Message" qui stocke le message principal.

Option 1: doit avoir une table Participants qui stocke le message id et user id. Cependant cela nécessiterait de faire 1 million d'insertions dans cette table.

Option 2: ????

Une idée de ce qui est le moyen le plus efficace/le meilleur pour ce faire?


**** EDIT: Pour clarifier pour l'utilisation de ce ****

Il est pas du spam..

Le site fonctionne comme un Alibaba.com où les utilisateurs/entreprises sur le site, veulent faire apparaître les messages internes. L'idée est, un utilisateur recherche quelque chose, et sur la base de cette requête, il peut envoyer un message à toutes les entreprises/utilisateurs qui apparaissent dans la recherche, par exemple une demande d'achat de contacts

+0

Je ne comprends pas la application pour une telle fonctionnalité. Pour moi, cela ressemblerait plus au spam qu'autre chose. –

+0

Ce n'est pas du spam. Les messages ne quittent jamais le site. Les utilisateurs devront donc se connecter pour les voir. C'est en fait pour un site de génération de prospects comme Alibaba.com, où les utilisateurs peuvent envoyer des messages/entrer en contact avec des tonnes de fournisseurs/entreprises. Ainsi, les entreprises qui vont être «spammé» le font parce qu'elles veulent recevoir les prospects potentiels. –

+0

Votre base de données stocke déjà des millions de lignes pour vos seuls utilisateurs. Je ne pense pas que l'insertion d'un million de plus sera un problème. –

Répondre

2

La table USER_MESSAGES est assez petite: il s'agit d'une intersection entre MESSAGES et UTILISATEURS (destinataires). Donc c'est deux colonnes de clé étrangère et peut-être un statut. Donc, même si cela peut avoir beaucoup de dossiers, ils ne prendront pas beaucoup de place. Ce n'est pas comme si vous deviez stocker une instance du message pour chaque destinataire.

Le stockage n'est donc pas un problème. Les performances peuvent être ce qui vous préoccupe, mais de nos jours tout moteur de base de données décent peut insérer des milliers d'enregistrements en une fraction de seconde. C'est juste une question d'optimisation pour l'opération d'ensemble plutôt que des lignes individuelles.


"J'étais préoccupé que la table va grandir vite."

Vous avez toujours la possibilité de l'entretien ménager la table. Si les destinataires supprimer le « » zapper le record d'intersection. Peut-être ajouter une colonne de date puis délai d'attente « messages messages » qui n'ont pas été lus dans un certain . calendrier fait qui sonne comme un élément positif: compte tenu de votre modèle d'entreprise de l'expéditeur veut probablement des réponses en temps opportun et ne sera pas intéressé par les réponses à une proposition qui est de trois mois

"J'espérais qu'il y aurait. un plus efficace/élégant un "

Tout dépend de votre définition de l'efficacité. Le stockage sur disque est bon marché mais également relativement lent. La RAM est rapide mais relativement chère (bien que le SDD soit peu coûteux dans quelques années). Alors qu'est-ce que vous voulez optimiser? Combien de temps ça prend à John pour envoyer un mailing? Combien de temps cela prend-il à Susan pour lire le message? Combien vous devez dépenser sur les disques durs? Combien de temps passez-vous à configurer votre niveau intermédiaire?

+0

Je vais regarder dans les opérations ensemble. Mais, loin de mes enquêtes, il semble que ce soit le seul moyen. Même moi, c'est juste une table de 2 colonnes contenant des identifiants, étant donné que chaque message pourrait avoir quelques milliers de messages, j'étais juste préoccupé par le fait que la table grandirait rapidement. J'espérais qu'il y aurait un plus efficace/élégant. –

1

Une solution serait de créer des groupes d'utilisateurs - en fonction du lieu de votre question - faites envoyer le message au groupe plutôt qu'à chaque individu. Pour gérer, que ce soit en lecture ou non, vous pourriez simplement avoir un "Messages au groupe 'Florida' au cours des x jours/semaines/quelque chose" qui serait assez facile à mettre en œuvre.

Cela vous éviterait d'avoir à faire un million d'insertions. Malheureusement, je ne suis pas sûr d'une meilleure façon de gérer la boîte de réception, mais je suis sûr que quelqu'un de plus compétent que moi sera en mesure d'ajouter à ce que j'ai suggéré.

+0

Le problème est, je veux permettre aux utilisateurs d'envoyer aux utilisateurs/entreprises qui apparaissent dans la liste des résultats de la requête qu'ils ont couru. Donc ce n'est pas comme c'est un ensemble prédéfini de groupes. Chaque requête peut être différente. –

0

Ceci est une caractéristique typique pour un serveur de messagerie. Donc ..

A. Une autre solution serait d'utiliser un vrai système de messagerie/serveur en arrière-plan.

Ceci est un peu plus compliqué à configurer (il faudrait que chaque utilisateur et chaque groupe de votre site ait une vraie adresse e-mail sur votre serveur local, uniquement utilisé à l'interne) et laissez le serveur de messagerie gérer plusieurs Dans tous les cas, pensez au fait que vous devez probablement fournir des fonctionnalités telles que: message lu, message non lu, message (important, etc.), suppression de message. Donc, je crois que vous ne pouvez pas échapper à un enregistrement par message par utilisateur. Maintenant, pensons combien de messages peuvent vraiment être dans cette table sur la base de données. Si un utilisateur a, en moyenne, 100 messages dans sa boîte de réception (btw qui est énorme, nous parlons d'une moyenne), cela signifierait (voir APC's response) une table avec 2 colonnes (entiers) ayant 5 milions de lignes, indexées sur user_id . Ce n'est pas un problème pour toute base de données sérieuse.

B. Maintenant, si vous êtes vraiment vraiment inquiet sur les performances, vous pouvez utiliser un stockage de hachage/DB (uniquement pour les messages) comme Memcached, Cabinet Tokio, CouchDB, MongoDB etc.

+0

Merci. Et oui, je cherchais à utiliser MongoDB pour stocker les messages. –

Questions connexes