2011-02-02 5 views
3

Hii there,Comment stocker des données relatives aux membres de groupes dans un forum, en utilisant Cassandra?

Ma question est liée à Groupes dans un forum, très similaire aux groupes LinkedIn.

Comment stockez-vous la liste de tous les utilisateurs d'un groupe dans un forum de discussion? ... et quand la taille des groupes est assez grande comme dans des dizaines de milliers de membres dans un groupe?

De même, comment pouvez-vous trouver les connexions mutuelles de l'utilisateur dans ce groupe?

Répondre

2

Je suggère de le faire comme une ligne par groupe, avec une colonne pour chaque membre du groupe. Cela fonctionnera bien pour n'importe quel nombre d'utilisateurs dans le groupe. En ce qui concerne la recherche de "connexions mutuelles", la manière la plus simple de gérer cela est de parcourir les connexions du second utilisateur et de comparer les deux.

Voici une autre stratégie: supposons que nous voulons trouver toutes les connexions mutuelles pour l'utilisateur 'A' dans le groupe 'G'. Si les colonnes de la ligne de connexion d'un utiliser les noms d'utilisateurs des connexions (ou ids utilisateur) comme les noms de colonnes, vous pouvez le faire (dans la syntaxe pycassa):

group_members = GROUPS.get('G').keys() 
group_members.remove('A') 
user_connections = USERS.get('A').keys() 
mutual_connections = USERS.multiget(group_members, columns=connections) 

Fondamentalement, cela va aller à une ligne pour chaque utilisateur dans le groupe et extrayez uniquement les colonnes correspondant aux connexions de l'utilisateur d'origine. Cela fera passer le travail du client à Cassandra, mais il est difficile de dire combien de travail supplémentaire ce serait pour Cassandra sans test de performance.

+0

Merci Tyler! (1.) Wont une seule rangée pour stocker tous les membres en tant que noms de colonnes serait trop grand parce que, à la fois, quelques membres doivent être affichés. et parfois, si le nombre de membres devient encore plus élevé, comme dans 6 chiffres, alors cela ne mènera pas à des problèmes de performance? Oui, j'ai entendu dire qu'il est possible de stocker des millions de colonnes sur une seule ligne, mais cela signifie-t-il vraiment que cela n'a pas d'impact négatif sur la performance du cassandra? –

+0

(2.) Voulez-vous dire quelque chose comme ça pour les calculs de connexion mutuelle: - D'abord trouver toutes les connexions de l'utilisateur en tant que UserIds-> Puis trouver toutes les colonnes avec ces noms, dans la ligne du groupe. -> Alors, quelles que soient les colonnes, vous obtenez les connexions mutuelles, n'est-ce pas? Donc, si un nom de colonne existait dans la ligne de connexion utilisateur et que vous demandiez une colonne avec le même nom dans la rangée du groupe et si elle existait alors vous obtenez une connexion mutuelle et si elle n'existait pas vous n'obtenez rien. Est-ce que Cassandra peut ignorer silencieusement tous les noms de colonnes qui ont été demandés mais ils n'existaient pas dans cette rangée? –

+0

(1) Stocker des millions de colonnes dans une rangée ne devient un problème de performance que si vous prévoyez de lire la ligne entièrement, fréquemment et rapidement (sans une bonne mise en cache); même alors, ce n'est peut-être pas un problème. Vous pouvez tirer très efficacement les N premières ou dernières colonnes d'une ligne. –

Questions connexes