Comment faire une requête de jointure avec 2 tables ou plus dans cassandra cql
je suis nouvelle à cassandra. Ici j'ai deux tables EVENTS
et TOWER
. J'ai besoin de les rejoindre pour quelques questions. Mais je ne suis pas permettre de le faire.
Structure de EVENTS
table:
eid int PRIMARY KEY,
a_end_tow_id text,
a_home_circle text,
a_home_operator text,
a_imei text,
a_imsi text,
Structure de TOWER
table:
tid int PRIMARY KEY,
tower_address_1 text,
tower_address_2 text,
tower_azimuth text,
tower_cgi text,
tower_circle text,
tower_id_no text,
tower_lat_d text,
tower_long_d text,
tower_name text,
maintenant, je veux rejoindre ces tables par rapport à EID
et TID
pour que je puisse récupérer les données des deux tables.
3 réponses
Cassandra = Pas De Jointures. Votre modèle est 100% relationnel. Tu dois y repenser pour Cassandra. Je vous conseillerais de prendre un coup d'oeil à ces diapositives. Ils creusent profondément dans la façon de modéliser les données pour cassandra. Aussi ici webinaire couvrant le sujet. Mais arrêtez de penser à des clés étrangères et de rejoindre des tables, parce que si vous avez besoin de relations cassandra n'est pas l'outil pour le travail.
Mais Pourquoi?
Parce que vous devez vérifier la cohérence et bien d'autres choses que les bases de données relationnelles et vous lâche la performance et l'évolutivité que cassandra offre.
Que puis-je faire?
Dénormaliser! Beaucoup de données dans une table? Mais la table aura trop de colonnes!
alors? Cassandra peut gérer un très grand nombre de colonnes dans une table.
L'autre chose que vous pouvez faire est de simuler le rejoindre dans votre application cliente. Faites correspondre les deux ensembles de données dans votre code, mais ceci sera très lent parce que vous aurez à itérer sur toutes vos informations.
une autre façon consiste à effectuer des requêtes multiples. Sélectionnez l'événement que vous voulez, puis la tour correspondante.
il y a plusieurs façons de joindre les tables à Cassandra et de les interroger. Mais bien sûr, vous devez repenser la partie du modèle de données.
- Utiliser Apache Spark est SparkSQL™ avec Cassandra (open source ou dans Datatax Enterprise – DSE).
- Utiliser Datatax provided ODBC connecteurs avec Cassandra et DSE.
PlayOrm est une bonne option pour faire des jointures sur des systèmes scalables avec un langage SQL Scalable spécial dans lequel vous pouvez rejoindre des partitions (i.e.. vous ne voulez jamais joindre 1 milliard de lignes avec un autre milliard de lignes). Il a des tonnes de modèles noSQL et est une rupture complète de hibernate et JPA à imiter les modèles noSQL avec le côté client joint lorsque nécessaire.