name23 http://daisovet.ru - такая штука где люди делятся всяческими проблемами и их решают)
сделано на пилонах.
и не будет а есть вроде как, но переделки требует (ибо я быдлокодер как выяснилось xDDDD)
P.S. за что платят - то и делаю)))
zheromoЯ думаю что имелось ввиду отсутствие возможности в одном запросе указать несколько пар startkey/endkey.
что выборку можно делать по одному диапазону необосновано.
zheromoskip/limit не эффективны и для паджинации не рекомендуются. А startkey/limit не всегда преименимо.
По поводу паджинации не думаю что view(_view_name, skip=N, limit=M) намного сложнее чем SELECT … LIMIT … Еще эффективней работает view(_view_name, start_key=S, limit=M). И БД не загнется :)
zheromoПроблема CouchDB в том, что для любого чиха приходится делать свою map-функцию. Т.е. изобретать велосипед, в то время как другие этот минимальный функционал уже предоставляют “из коробки”. В наше время часы программиста стоят дорого, поэтому от велосипедов отказываются.
Для меня тоже вначале казались неразрешимыми задачи сделать более менее серьезную выборку в Couch, пока я не понял как работает map/reduce и представления (views). С помощью них можно сделать сколь угодно сложную выборку. Поэтому если не получается что-то сделать, не значит что этого сделать нельзя.
zheromoНу-ну. Давай начнем с простой.
С помощью них можно сделать сколь угодно сложную выборку
LexanderВ таком случае лучше использовать ORM, например типа Django ORM (под Couch он есть). Когда его не хватит написать вьюшку. С реляционными базами поступают точно также обычно.zheromoПроблема CouchDB в том, что для любого чиха приходится делать свою map-функцию. Т.е. изобретать велосипед, в то время как другие этот минимальный функционал уже предоставляют “из коробки”. В наше время часы программиста стоят дорого, поэтому от велосипедов отказываются.
Для меня тоже вначале казались неразрешимыми задачи сделать более менее серьезную выборку в Couch, пока я не понял как работает map/reduce и представления (views). С помощью них можно сделать сколь угодно сложную выборку. Поэтому если не получается что-то сделать, не значит что этого сделать нельзя.
Вы можете аргументировать свою точку зрения, например, добавив свою колонку по CouchDB в эту табличку: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart ?
Ну и интерфейс доступа к базе (REST API) сравнительно медленный и ориентирован на специфические приложения. Архитектура CouchDB рассчитана на прямой доступ к БД извне, грубо говоря.
dimabestmap:zheromoНу-ну. Давай начнем с простой.
С помощью них можно сделать сколь угодно сложную выборку
Интересуют жесткие диски объемом от 250 Гб до 1000 Гб и по цене от 50 до 150 у.е.
Как сделать выборку?
function(hdd) {
if (hdd.capacity>= 250 && hdd.capacity<=1000 && hdd.cost>=50 && hdd.cost<=150)
emit(hdd);
}
HDD.objects.filter(capacity__gte=250,capacity__lte=1000, cost__gte=50, cost__lte=150)
DaevaornЭто тоже можно сделатьzheromoЯ думаю что имелось ввиду отсутствие возможности в одном запросе указать несколько пар startkey/endkey.
что выборку можно делать по одному диапазону необосновано.zheromoskip/limit не эффективны и для паджинации не рекомендуются. А startkey/limit не всегда преименимо.
По поводу паджинации не думаю что view(_view_name, skip=N, limit=M) намного сложнее чем SELECT … LIMIT … Еще эффективней работает view(_view_name, start_key=S, limit=M). И БД не загнется :)
zheromoЯ слежу за этим тикетом. Он ещё не разрезолвлен и данного вида запрос сделать пока нельзя.
Это тоже можно сделать
{ “ranges”: }
ссылка
https://issues.apache.org/jira/browse/COUCHDB-523
zheromoНапример когда вьюха может генерировать одинаковые ключи. Для паджинации в данном случае требуется использование ещё и startkey_docid, но это тоже не будет работать если одинаковые ключи может порождать один документ.
Если несложно, можно привести пример когда использование startkey/limit неприменимо.
zheromoВы лукавите, делать подобного рода запрос через временную вьюшку равносильно самоубийству на мало-мальски большой базе. А статически вы просто не сможете сгенерировать ключи по которым можно было бы выбрать нужные документы оним запросом (конечно, если мы говорим о ситуации когда границы задаются динамически). Двумя пожалуйста.
map:или на ORM примерно такfunction(hdd) {
if (hdd.capacity>= 250 && hdd.capacity<=1000 && hdd.cost>=50 && hdd.cost<=150)
emit(hdd);
}HDD.objects.filter(capacity__gte=250,capacity__lte=1000, cost__gte=50, cost__lte=150)