nous avons deux entités utilisateur et rôle. Un utilisateur peut avoir plusieurs rôles, et un seul rôle peut être partagé par de nombreux utilisateurs - relation type m: n. Les rôles sont également dynamiques et nous attendons beaucoup (en millions).Modèle de conception Cassandra pour enregistrement partagé (m: n)
Il est simple de modéliser de telles données dans une base de données relationnelle. Je voudrais savoir à chaque fois que ce serait possible à Cassandra.
Actuellement je vois deux solutions:
A) Utiliser le modèle normalisé et de créer quelque chose de similaire à centre-rejoindre
Créer chaque rôle unique dans CF séparés et stocker dans les clés étrangères d'enregistrement d'utilisateur référencés rôles .
pro: Les rôles ne sont pas répliqués et l'entretien est simple
contra: Afin d'obtenir tous les rôles pour les appels de réseau multiples unique de l'utilisateur sont nécessaires. L'enregistrement d'utilisateur contient seulement FK, les rôles sont stockés utilisant le séparateur aléatoire, dans ce cas chaque rôle pourrait être stocké sur le noeud différent de cassandra.
B) Dénormaliser modèle et reproduire les rôles pour éviter les allers-retours Dans ce scénario enregistrement utilisateur dans tous les rôles cassandra contient de l'utilisateur comme copie.
pro: Il est possible de lire l'utilisateur avec tous les rôles dans une seule requête. Cela garantit des temps de chargement courts. Chaque rôle partagé est copié plusieurs fois - sur chaque utilisateur lié. Chaque rôle partagé est copié plusieurs fois. Maintenir des rôles est très difficile, surtout si nous avons quantité importante de données. Par exemple: un rôle est partagé par 1000 utilisateurs. Les modifications de ce rôle nécessitent une mise à jour sur 1000 enregistrements utilisateur. Pour les ensembles de données très volumineux, ces mises à jour doivent être exécutées en tant que travail asynchrone.
Solutions ci-dessus sont très limitées, meybie Cassandra n'est pas bonne solution pour m: n relations? Connaissez-vous un motif de design cassandra pour un tel problème?
Merci, Maciej
Cassandra peut être finalement cohérent, mais ce n'est pas obligatoire. Une meilleure description est qu'il a une cohérence accordable basée sur le facteur de réplication et votre niveau de cohérence en lecture et écriture ([R + W> Niveau de cohérence vous donne une forte cohérence] (http://wiki.apache.org/cassandra/API#ConsistencyLevel) – psanford
merci pour la bonne réponse! - Je m'attendais à ça. Dans mon cas, le maintien de tels rôles sera douloureux - surtout, quand j'ai besoin de mettre à jour ce rôle qui est partagé par quelques millions d'utilisateurs .... mais je ne vois pas d'autre option aussi bien –