web-dev-qa-db-fra.com

Cassandra - clause WHERE avec des inconvénients non essentiels

Je suis nouveau sur cassandra et je l’utilise pour des tâches d’analyse (bonne indexation nécessaire).

J'ai lu dans cet article (et d'autres): cassandra, sélectionnez via une clé non primaire que je ne peux pas interroger ma base de données avec une colonne de clé non primaire avec WHERE clause.

Pour ce faire, il semble y avoir 3 possibilités (toutes avec des inconvénients majeurs):

  • Créez un index secondaire (non recommandé pour les problèmes de performances).
  • Créez une nouvelle table (je ne veux pas de données redondantes même si ça va avec cassandra).
  • Placez la colonne que je veux interroger dans la clé primaire et dans ce cas, je dois définir toutes les parties de la clé primaire dans ma clause WHERE et je ne peux pas utiliser d'opérateur autre que IN ou =.

Existe-t-il un autre moyen de faire ce que j'essaie de faire (WHERE clause avec une colonne de clé non primaire) sans avoir les 3 contraintes ci-dessus?

11
farhawa

Depuis Cassandra même, vous êtes limité aux options que vous avez spécifiées ci-dessus. Si vous voulez savoir pourquoi jeter un oeil ici:

Un regard approfondi sur le CQL où Clause

Toutefois, si vous essayez d'exécuter des analyses sur des informations stockées dans Cassandra, avez-vous déjà envisagé d'utiliser Spark. Spark est conçu pour le traitement de données à grande échelle sur des systèmes distribués. En fait, si vous envisagez d’utiliser Datastax (voir ici ), qui possède quelques fonctionnalités d’intégration de Nice entre Spark et Cassandra, spécifiquement pour le chargement et la sauvegarde de données. Il a à la fois une édition gratuite (Communauté) et une édition payante (Entreprise). 

5
bechbd

J'ai eu un problème similaire lors de l'utilisation de la version 2.x de Cassandra, mettez à niveau votre version vers Cassandra 3.0 et versions ultérieures. C'était la seule solution pour moi. 

0
coder

Je suppose que la table est conçue dans un but différent, étant donné que les champs que vous souhaitez interroger ne font pas partie de la clé de partitionnement. Ma suggestion serait de dupliquer la table et de la saisir par les champs par lesquels vous voulez l'interroger. Je recommanderais de concevoir une nouvelle table dans le but exact pour lequel vous l'utiliserez conformément à Concepts de modélisation de données .

Cassandra offre plusieurs avantages, tels que la mise à l'échelle linéaire, etc. en imposant certaines restrictions quant à ce que vous pouvez faire avec CQL.

0
Saket