tags:

views:

173

answers:

3

I have been researching noSQL DB and have not been able to satisfactorily answer this for myself: Is it possible to construct complex queries against noSQL DB?

The type of query I'm wondering about would be something like this:

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: I'm aware that I can't use SQL, as above, what I'm asking is how would I query using the psuedo logic above, in other words a whole bunch of different conditions. So far the best answer I have found is that you have an RDBMS to query and then grab data based on key from cloud. That doesn't necessarily seem more efficient to me.

So as a follow up. If just trying to solve a 'search 4 million rows' problem as opposed to a 'we have billions of rows of data' problem, should I even bother looking at a noSQL DB?

A: 

I'not a NoSQL expert, but as the name says, they don't rely necessary on SQL. You can probably do whatever you want, but will need to code map/reduce function or other non-SQL way to query the data.

Maybe this blog provide useful information to you: Query processing for NoSQL database

ewernli
+1  A: 

In mongodb, you would just do something like db.mytbl.find({"vara": { $gt: 10}, "varb": 2, "varc": {$lt: 100 }})

See here, and here for examples

nos
A: 

It depends on the data store you are using.

I frequently use AppEngine and their data store only allows inequality on one column (and that column must be the first element in the sort order. So you would not be able to run the query you posted, but you could do a similar one:

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

Also, you can do things like have a column that contains a list of strings and select rows that have a value in the list.

So, the official answer is "maybe, sorta, sometimes, but not really, except when yes"

Jackson Miller