DaevaornА как двумя? По запросу на каждый диапазон, а затем руками слить две выборки?
Двумя пожалуйста
DaevaornА как двумя? По запросу на каждый диапазон, а затем руками слить две выборки?
Двумя пожалуйста
zheromoЭлементарно. Когда нужно отсортировать документы по двум полям, НО первое поле по возрастанию, а второе по спаданию.
Если несложно, можно привести пример когда использование startkey/limit неприменимо.
zheromoDaevaorn прав, от такого запроса мало-мальски большая база загнется.
map:function(hdd) {
if (hdd.capacity>= 250 && hdd.capacity<=1000 && hdd.cost>=50 && hdd.cost<=150)
emit(hdd);
}
zheromoДа, мы избавимся от одного недостатка и наткнемся на второй. Реляционные дают 2 возможности: ОРМ с известным ограничением по скорости или native библиотеки. Couch заведомо предлагает более медленный способ работы с базой.
В таком случае лучше использовать ORM, например типа Django ORM (под Couch он есть). Когда его не хватит написать вьюшку. С реляционными базами поступают точно также обычно.
zheromoЯ прекрасно понимаю разницу. В том числе, между моделями использования. Просто сейчас сложилась ситуация, когда для NoSQL СУБД требуются некоторые возможности SQL СУБД, в основном, касающиеся выборки данных.
Пользы от притягивания абстракций реляционный модели к документо-ориентированной практически нет, это просто разные подходы. Соответственно и архитектура приложения будет разной.
zheromoДля систем, доступных из Интернет,- обычное дело: фронт - БД. Сервер БД расположен в локальной сети и доступен для фронта (и других систем, если это не ограничено политикой безопасности), снаружи он не виден.
А что - бывает какойто другой непрямой вид доступа?
o7412369815963Он имел в виду использование временных вьюх - котрые действительно работают очень медленно и нужны только для разработки. При использовании постоянной вьюхи ничего плохого не произойдет, так как функция выполняется только при вставке или модификации документа. Тотже mysql тоже создает и обновляет индексы. Кстати, никто не мешает писать вьюхи на Python или на C++.zheromoDaevaorn прав, от такого запроса мало-мальски большая база загнется.
map:function(hdd) {
if (hdd.capacity>= 250 && hdd.capacity<=1000 && hdd.cost>=50 && hdd.cost<=150)
emit(hdd);
}
я активно использую map-reduce, и знаю что эта штука сравнимо медленная, map-reduce нужен для других целей, его нужно выполнять только на подготовленных/отсеянных данных.
в данном запросе на каждый объект будет выполняться эта ф-ия, в настоящее время js не быстрее python'a, и в итоге время выполнения этого запроса будет примерно равна тому: если извлечь все объекты из базы и вручную питоном их профильтровать. (это при условии что бд не распределенная и находиться локально)
DaevaornЕстественно вьюха должна быть постоянная. Для динамических диапазонов полностью согласен - ключ должен быть один - для одного запроса. Есть конечно варианты привидения нескольких ключей к одному - например то же geohash. Также ситуация упрощается если часть ключей перечислима полностью - например марки товаров, их цвета, те же варианты объема винтов, диагонали мониторов и т.д. Тогда тоже можно уложиться в один запрос.
Вы лукавите, делать подобного рода запрос через временную вьюшку равносильно самоубийству на мало-мальски большой базе. А статически вы просто не сможете сгенерировать ключи по которым можно было бы выбрать нужные документы оним запросом (конечно, если мы говорим о ситуации когда границы задаются динамически). Двумя пожалуйста.
Кстати, для подобного рода запросов более эффективно использовать couchdb-lucene.
zheromoЭто практически никак не скажется на производительности.
Кстати, никто не мешает писать вьюхи на Python или на C++.
dimabestЭто не совсем такzheromoЭлементарно. Когда нужно отсортировать документы по двум полям, НО первое поле по возрастанию, а второе по спаданию.
Если несложно, можно привести пример когда использование startkey/limit неприменимо.
Проблема в том, что ключи в CouchDB можно сортировать только в одну сторону - либо ASC, либо DESC.
zheromoНет. Этот тикет тоже не разрезолвлен.
Это не совсем так
см. https://issues.apache.org/jira/browse/COUCHDB-158
Т.е. можно сортировать по элементам составного ключа.
DaevaornКак я понял, существует патч, который решает данный вопрос. А в официальном коде его нет.zheromoНет. Этот тикет тоже не разрезолвлен.
Это не совсем так
см. https://issues.apache.org/jira/browse/COUCHDB-158
Т.е. можно сортировать по элементам составного ключа.