2010-02-28 4 views
13

J'ai fait des recherches sur la base de données noSQL DB et je n'ai pas été capable de répondre de manière satisfaisante: Est-il possible de construire des requêtes complexes avec noSQL DB?Est-il possible de construire des requêtes complexes contre noSQL DB

Le type de requête que je me demande serait quelque chose comme ceci:

select * from DB where 
vara > x AND 
varb = 2 AND 
varc < x AND 
vard in (x,y,z) AND 
vare like '%texthere%' AND 
varf = 2 AND 
varg = 3 and 
etc... 

NOTE: Je suis conscient que je ne peux pas utiliser SQL, comme ci-dessus, ce que je demande est de savoir comment devrais-je interroger en utilisant la logique de psuedo ci-dessus, en d'autres termes tout un tas de conditions différentes. Jusqu'à présent, la meilleure réponse que j'ai trouvée est que vous avez un SGBDR pour interroger puis récupérer des données basées sur la clé à partir du cloud. Cela ne me semble pas nécessairement plus efficace.

Donc, à titre de suivi. Si vous essayez simplement de résoudre un problème de "recherche de 4 millions de lignes" par opposition à un problème de "nous avons des milliards de lignes de données", devrais-je même prendre la peine de regarder une base de données noSQL?

Répondre

9

En mongodb, vous voulez bien faire quelque chose comme db.mytbl.find({"vara": { $gt: 10}, "varb": 2, "varc": {$lt: 100 }})

Voir here et here des exemples

1

Je ne suis pas un expert NoSQL, mais comme leur nom l'indique, ils ne dépendent pas de SQL. Vous pouvez probablement faire ce que vous voulez, mais vous aurez besoin de coder/réduire la fonction ou d'autres moyens non-SQL pour interroger les données.

Peut-être que ce blog fournissent des informations utiles pour vous: Query processing for NoSQL database

5

Cela dépend du magasin de données utilisent. J'utilise fréquemment AppEngine et leur magasin de données n'autorise l'inégalité que sur une seule colonne (cette colonne doit être le premier élément de l'ordre de tri.) Vous ne pourrez donc pas exécuter la requête que vous avez publiée, mais vous pourriez faire une de même type:.

select * from DB where 
vara > x AND 
varb = 2 AND 
varc in (t,u,v,w) 
vard in (x,y,z) AND 
varf = 2 AND 
varg = 3 

en outre, vous pouvez faire des choses comme ont une colonne qui contient une liste de chaînes et sélectionner des lignes qui ont une valeur dans la liste Alors

, la réponse officielle est « peut-être, sorta, parfois, mais pas vraiment, sauf quand oui "

0

À mon avis, vous pouvez le faire dans un magasin de données de documents, tel que MongoDB, mais pas facilement dans un magasin de données à valeur-clé tel que Cassandra. Si vous deviez le faire dans un magasin de données à valeur-clé, la clé composite devrait identifier tous les éléments de données interrogés (colonnes). En d'autres termes, une instance devrait avoir toutes les colonnes de la requête. C'est possible. Dans un magasin de valeurs-clés vanilla, il existe un élément de données (colonne) par clé, mais vous pouvez le faire pour en supporter plusieurs. Un magasin de valeur de clé le permet car la valeur est juste une valeur de chaîne et peut contenir ce que vous voulez. Je recommande plusieurs éléments de données (colonnes) par clé, mais vous devrez programmer pour cela. Si à la place vous avez les colonnes dans différentes instances de colonnes, il serait très lent de rechercher verticalement les données, même si les colonnes sont ordonnées. L'exemple de votre question n'a qu'un seul tableau. Si vous avez plusieurs tables en relationnelle, dans les magasins de valeurs-clés, vous devez créer une nouvelle famille de colonnes pour stocker les données jointes et vous devez toujours avoir plusieurs éléments de données par clé. Cependant, il devrait être pré-chargé horizontalement dans une instance dans une famille par un processus de type ETL. En d'autres termes, joignez les données avant qu'elles soient chargées dans le magasin de valeurs de clés et concevez le magasin de données Cassandra pour stocker les données déjà combinées dans une colonne avec plusieurs valeurs. Ou utilisez l'exploration de données. Je crois que les «big data analytics» traitent actuellement ce problème dans les magasins à valeur-clé.Un autre exemple, moins sophistiqué que le vôtre, est comment dans les magasins à valeur-clé pouvez-vous produire un simple rapport sur le chiffre d'affaires et le volume par client par produit par semaine?

Questions connexes