2010-02-28 3 views
13

Я изучал базу данных noSQL и не смог удовлетворительно ответить на это сам: возможно ли построить сложные запросы к базе данных noSQL?Возможно ли построить сложные запросы против noSQL DB

Тип запроса я задаюсь вопросом о том, будет что-то вроде этого:

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... 

Примечание: Я знаю, что я не могу использовать SQL, как и выше, о чем я спрашиваю, как я бы запросил, используя вышеприведенную логику psudeo, другими словами целую кучу разных условий. Пока что лучший ответ, который я нашел, заключается в том, что у вас есть RDBMS для запроса и затем захвата данных на основе ключа из облака. Для меня это не обязательно кажется более эффективным.

Так как последующие меры. Если просто попытаться решить проблему поиска «4 миллиона строк» ​​в отличие от проблемы «у нас есть миллиарды строк», я должен даже потрудиться, глядя на базу данных noSQL?

ответ

9

В mongodb, вы бы просто сделать что-то вроде db.mytbl.find({"vara": { $gt: 10}, "varb": 2, "varc": {$lt: 100 }})

См here и here примеры

1

Я не эксперт NoSQL, но, как говорится в названии, они не полагаются на SQL. Вы, вероятно, можете делать все, что хотите, но вам нужно будет использовать функцию map map/reduce или другой способ, отличный от SQL, для запроса данных.

Может быть, этот блог предоставить полезную информацию для Вас: Query processing for NoSQL database

5

Это зависит от магазина данных, которые вы используются.

Я часто использую AppEngine, и их хранилище данных допускает неравенство только в одном столбце (и этот столбец должен быть первым элементом в порядке сортировки. Таким образом, вы не сможете запустить запрос, который вы разместили, но вы можете сделать похожи один:.

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 

Кроме того, вы можете сделать что-то вроде есть столбец, который содержит список строк и выберите строки, которые имеют значение в списке

Итак, официальный ответ «, может быть, sorta, иногда, но не реально, кроме случаев, когда да "

0

На мой взгляд, вы можете сделать это в хранилище данных документа, таком как MongoDB, но не легко в хранилище данных с ключевыми значениями, такое как Cassandra. Если бы вы сделали это в хранилище данных с ключом, то составной ключ должен был идентифицировать все запрошенные элементы данных (столбцы). Другими словами, один экземпляр должен иметь все столбцы запросов. Это возможно. В хранилище ключей для ванили есть один элемент данных (столбец) для каждого ключа, но вы можете сделать это для поддержки многих. Хранилище ключевых значений допускает это, потому что значение является просто строковым значением и может содержать то, что вы хотите. Я рекомендую несколько элементов данных (столбцов) на ключ, но вам нужно будет программировать для этого. Если вместо этого у вас есть столбцы в разных экземплярах столбцов, было бы очень медленно искать данные по вертикали, даже если столбцы упорядочены. Образец в вашем вопросе имеет только одну таблицу. Если у вас несколько реляционных таблиц, то в хранилищах с ключом вам нужно будет создать новое семейство столбцов для хранения объединенных данных, и вам все равно придется иметь несколько элементов данных на ключ. Тем не менее, он должен быть предварительно загружен горизонтально в одном случае в одном семействе с помощью ETL-подобного процесса. Другими словами, соедините данные перед их загрузкой в ​​хранилище значений ключей и создайте хранилище данных Cassandra для хранения уже комбинированных данных в столбце с несколькими значениями. Или используйте интеллектуальный анализ данных. Я считаю, что «большая аналитика данных» в настоящее время решает эту проблему в хранилищах с ключевыми значениями.Другой пример, менее сложный, чем ваш, заключается в том, как в магазинах с ключевыми значениями вы можете производить простой отчет о доходах и объеме продаж по клиенту по продуктам за неделю?

Смежные вопросы