Ответ 1
В mongodb вы просто сделаете что-то вроде db.mytbl.find({"vara": { $gt: 10}, "varb": 2, "varc": {$lt: 100 }})
Я изучал базу данных 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?
В mongodb вы просто сделаете что-то вроде db.mytbl.find({"vara": { $gt: 10}, "varb": 2, "varc": {$lt: 100 }})
Это зависит от используемого хранилища данных.
Я часто использую 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
Кроме того, вы можете делать такие вещи, как столбец, содержащий список строк, и выбирать строки, которые имеют значение в списке.
Итак, официальный ответ "может быть, иногда, иногда, но не очень, если только да"
Я не эксперт NoSQL, но, как говорится в названии, они не полагаются на SQL. Вы, вероятно, можете делать все, что хотите, но вам нужно будет использовать функцию map map/reduce или другой способ, отличный от SQL, для запроса данных.
Возможно, этот блог предоставит вам полезную информацию: Обработка запросов для базы данных NoSQL
По-моему, вы можете сделать это в хранилище данных документа, таком как MongoDB, но не легко в хранилище данных с ключевыми значениями, такое как Cassandra. Если бы вы сделали это в хранилище данных с ключом, то составной ключ должен был идентифицировать все запрошенные элементы данных (столбцы). Другими словами, один экземпляр должен иметь все столбцы запросов. Это возможно. В хранилище ключей для ванили есть один элемент данных (столбец) для каждого ключа, но вы можете сделать это для поддержки многих. Хранилище ключевых значений допускает это, потому что значение является просто строковым значением и может содержать то, что вы хотите. Я рекомендую несколько элементов данных (столбцов) на ключ, но вам нужно будет программировать для этого. Если вместо этого у вас есть столбцы в разных экземплярах столбцов, было бы очень медленно искать данные по вертикали, даже если столбцы упорядочены. Образец в вашем вопросе имеет только одну таблицу. Если у вас несколько реляционных таблиц, то в хранилищах с ключом вам нужно будет создать новое семейство столбцов для хранения объединенных данных, и вам все равно придется иметь несколько элементов данных на ключ. Тем не менее, он должен быть предварительно загружен горизонтально в одном случае в одном семействе с помощью ETL-подобного процесса. Другими словами, соедините данные перед их загрузкой в хранилище значений ключей и создайте хранилище данных Cassandra для хранения уже комбинированных данных в столбце с несколькими значениями. Или используйте интеллектуальный анализ данных. Я считаю, что "большая аналитика данных" в настоящее время решает эту проблему в хранилищах с ключевыми значениями. Другой пример, менее сложный, чем ваш, заключается в том, как в магазинах с ключевыми значениями вы можете производить простой отчет о доходах и объеме продаж по клиенту по продуктам за неделю?