В CouchDB вы используете карту/уменьшить просмотров. В SQL вы должны явно указать, для какого поля будет создан индекс. В CouchDB вы создаете индекс создания специальных функций, поэтому он может быть более конкретным для ваших нужд. Если вы хотите, чтобы индекс для такой простой вещи, как поиск с именем, государством и страной полого вида просто карта функция:
function (doc) {
if (doc.name && doc.state && doc.country)
emit([doc.name, doc.state, doc.country], doc);
}
Для поиска с использованием этой точки зрения вы поиск по ключевому ["my_name", "my_state", "my_country"]
. Вы можете использовать его для запросов с подмножеством имени, состояния и страны, если они являются префиксом испускаемого массива (например, поиск с name
, но не с state
и country
), потому что результат поиска, сопоставляемый с результатами поиска, сортируется лексикографически.
В принципе, представление представляет собой индекс с некоторыми возможностями запросов, но не такими гибкими, как SQL-запросы. Они выполняются один раз и сохраняются на диске и инкрементно вычисляются для новых/измененных данных. Имейте в виду, что трудно делать вещи, которые неэффективны в распределенной системе (для которых разработан CouchDB): более сложные объединения, поиск без индекса ... Хотя во многих случаях искусственное разделение для таблиц в реляционной модели необязательно при структурировании документы доступны, и некоторые из них не нужны.
Для получения более подробной информации о ценах на CouchDB по сравнению с SQL, см. this chapter of The Definitive Guide и других главах и официальной информации wiki.
Я думаю, что реальный вопрос здесь, что делать, когда у вас есть высокие й количество полей, и вы не знаете, какая комбинацию критериев поиска вашего пользователя собирается фильтровать. Если у вас 20 полей, вы не можете создать 2.432902e + 18 просмотров, необходимых для обработки всех комбинаций потенциальных критериев поиска. Можете ли вы иметь 20 просмотров, а затем попытаться каким-то образом пересечь взгляды? –
CouchDB не является универсальной базой данных. Вы должны спроектировать структуру данных (схему и представления документов) для конкретного варианта использования. Хотя многомерные запросы и недоступны без дополнительных плагинов (например, GeoCouch или с использованием lucene/elasticsearch), вы можете попытаться избежать этого. Простой перевод SQL в представления и отображение реляционного дизайна в документы JSON недостаточно. –