Si je comprends bien votre cas d'utilisation correcte, c'est ce que vous voulez faire
docteur A a assisté à des patients x, y, z ...
docteur B a assisté à des patients x, y, z ...
Docteur C ont assisté patients x, y, k ... (le médecin C n'a pas consulté le patient z).
Docteur D a assisté à des patients x, y, z ...
Maintenant, vous regardez dans la liste des patients suivis par le médecin A, et vous supprimé z patient de cette liste. Ainsi, le patient z devrait être supprimé de la liste des médecins B et D. Vous voulez modéliser les données pour la base de données Cassandra.
Nous devons nous souvenir des objectifs tout en modélisant le schéma de Cassandra.
Premier but- Connaître vos données de requête.
Deuxième objectif - Essayez de distribuer les données à travers le cluster.
Troisième objectif - Réduire le nombre de lectures de partition. Nos questions seraient -
1 - Obtenez tous les patients fréquentés par le Docteur A (B, C, D).
2 - Supprimer l'historique du patient (à partir de n'importe quelle liste).
Donnons un essai -
CREATE TABLE VISITS_BY_DOCTOR(
Doctor_name text ,
Patient_name text ,
.
.
.
Other columns
PRIMARY KEY (Doctor_name, Patient_name )
)
Cela satisfera nos deux objectifs. Premier objectif, dans une requête, nous pouvons obtenir la liste des patients suivis par le docteur A.
Sélectionnez * dans VISITS_BY_DOCTOR où Doctor_name = A;
Supprimer de VISITS_BY_DOCTOR où patient_name = z; Deuxième objectif, il minimise également le nombre de lectures de partition car nous pouvons obtenir des données basées sur la clé de partition "doctor_name". Mais cette conception ne satisfait pas au troisième objectif, répartir les données à travers le cluster. Alors améliorons-le.
CREATE TABLE VISITS_BY_DOCTOR(
Doctor_name text ,
Patient_name text ,
Visit_date bigint,
.
Other columns
PRIMARY KEY ((Doctor_name, Patient_name), Visit_date )
) WITH CLUSTERING ORDER BY (Visit_date DESC).
Cela répondra à l'objectif de «répartir les données dans le cluster». En outre, il peut être utilisé pour obtenir l'histoire en fonction de la date de visite.
Je suppose que même cela peut répartir des données entre les clusters ((PRIMARY KEY (Doctor_name, Patient_name)) sans ajouter le paramètre Visit_date Êtes-vous d'accord? –
En outre, vous ne pouvez pas supprimer Delete from VISITS_BY_DOCTOR où patient_name = z; comme il manque la clé de parition –