Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 6, 2010 15:05:00

HolyGeek
От:
Зарегистрирован: 2010-07-23
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

NoSQL

name23 http://daisovet.ru - такая штука где люди делятся всяческими проблемами и их решают)
сделано на пилонах.
и не будет а есть вроде как, но переделки требует (ибо я быдлокодер как выяснилось xDDDD)
P.S. за что платят - то и делаю)))



Отредактировано (Сен. 6, 2010 15:07:02)

Офлайн

#2 Окт. 2, 2010 23:00:21

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

NoSQL

Всем здравствуйте!
Почитал эту и еще несколько веток, касающихся CouchDB и решил зарегистрироваться :)

Обидно стало за то, что некоторые товарищи не разобравшись до конца в теме делают скорополительные выводы по поводу применимости технологии для тех или иных задач.

Касается это высказыванию что “CouchDB умеет делать только совсем простые выборки” и так далее
Нужно понимать что работа с CouchDB несколько отличается от работы с обычными реляционными базами (в этом плане освоение Mongo намного проще). Для меня тоже вначале казались неразрешимыми задачи сделать более менее серьезную выборку в Couch, пока я не понял как работает map/reduce и представления (views). С помощью них можно сделать сколь угодно сложную выборку. Поэтому если не получается что-то сделать, не значит что этого сделать нельзя.

Ключ может состоять из нескольких значений документа, в том числе быть результатом вычислений над ними - поэтому высказывание, что выборку можно делать по одному диапазону необосновано.
По поводу паджинации не думаю что view(_view_name, skip=N, limit=M) намного сложнее чем SELECT … LIMIT … Еще эффективней работает view(_view_name, start_key=S, limit=M). И БД не загнется :)

Сам использую CouchDB в продакшене - поэтому могу высказать свое мнение по некоторым аспектам использования:
лучше действительно сразу запршивать документ из базы напрямую, так как все равно придется отдавать результат через HTTP, почему не сделать этого сразу. Couch нормально отдает и статику (аттачи к документам) с поддержкой If-Modified ETag и прочими прелестями, включая и gzip сжатие.
С авторизацией там также все нормально, есть и сесиии и OAuth и т.д.
Так что можно разрешить и запись каким либо пользователям, а если планируется только чтение - то вообще нет никаких проблем.



Офлайн

#3 Окт. 3, 2010 00:06:08

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

NoSQL

zheromo
что выборку можно делать по одному диапазону необосновано.
Я думаю что имелось ввиду отсутствие возможности в одном запросе указать несколько пар startkey/endkey.
zheromo
По поводу паджинации не думаю что view(_view_name, skip=N, limit=M) намного сложнее чем SELECT … LIMIT … Еще эффективней работает view(_view_name, start_key=S, limit=M). И БД не загнется :)
skip/limit не эффективны и для паджинации не рекомендуются. А startkey/limit не всегда преименимо.



Офлайн

#4 Окт. 3, 2010 00:33:08

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

NoSQL

zheromo
Для меня тоже вначале казались неразрешимыми задачи сделать более менее серьезную выборку в Couch, пока я не понял как работает map/reduce и представления (views). С помощью них можно сделать сколь угодно сложную выборку. Поэтому если не получается что-то сделать, не значит что этого сделать нельзя.
Проблема CouchDB в том, что для любого чиха приходится делать свою map-функцию. Т.е. изобретать велосипед, в то время как другие этот минимальный функционал уже предоставляют “из коробки”. В наше время часы программиста стоят дорого, поэтому от велосипедов отказываются.
Вы можете аргументировать свою точку зрения, например, добавив свою колонку по CouchDB в эту табличку: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart ?

Ну и интерфейс доступа к базе (REST API) сравнительно медленный и ориентирован на специфические приложения. Архитектура CouchDB рассчитана на прямой доступ к БД извне, грубо говоря.



Офлайн

#5 Окт. 3, 2010 01:37:03

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

NoSQL

zheromo
С помощью них можно сделать сколь угодно сложную выборку
Ну-ну. Давай начнем с простой.
Интересуют жесткие диски объемом от 250 Гб до 1000 Гб и по цене от 50 до 150 у.е.

Как сделать выборку?



Офлайн

#6 Окт. 3, 2010 02:13:53

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

NoSQL

Lexander
zheromo
Для меня тоже вначале казались неразрешимыми задачи сделать более менее серьезную выборку в Couch, пока я не понял как работает map/reduce и представления (views). С помощью них можно сделать сколь угодно сложную выборку. Поэтому если не получается что-то сделать, не значит что этого сделать нельзя.
Проблема CouchDB в том, что для любого чиха приходится делать свою map-функцию. Т.е. изобретать велосипед, в то время как другие этот минимальный функционал уже предоставляют “из коробки”. В наше время часы программиста стоят дорого, поэтому от велосипедов отказываются.
Вы можете аргументировать свою точку зрения, например, добавив свою колонку по CouchDB в эту табличку: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart ?

Ну и интерфейс доступа к базе (REST API) сравнительно медленный и ориентирован на специфические приложения. Архитектура CouchDB рассчитана на прямой доступ к БД извне, грубо говоря.
В таком случае лучше использовать ORM, например типа Django ORM (под Couch он есть). Когда его не хватит написать вьюшку. С реляционными базами поступают точно также обычно.

Пользы от притягивания абстракций реляционный модели к документо-ориентированной практически нет, это просто разные подходы. Соответственно и архитектура приложения будет разной.

А что - бывает какойто другой непрямой вид доступа? Просто в качестве транспортного протокола выбран HTTP и в этом нет ничего плохого на мой взгляд. Это дает очень простое кэширование например. Ну и при правильном проектировании не надо будет делать тучу запросов к базе - чтобы например получить права доступа, потом допустим товар из каталога, кучу его свойств и т.д. Достаточно сделать один запрос. Ту же проверку прав доступа можно включить в саму вьюшку, т.е. минимум запросов и проверка доступа на уровне документа в самой базе. Сам REST кстати не медленный, это просто архитектурное решение, можно только сказать что конкретная реализация медленней какой-то другой.

Согласен полностью что задачи бывают разные и где-то лучше использовать то, а где-то это. Самое главное чтобы выбор был.



Офлайн

#7 Окт. 3, 2010 02:24:18

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

NoSQL

dimabest
zheromo
С помощью них можно сделать сколь угодно сложную выборку
Ну-ну. Давай начнем с простой.
Интересуют жесткие диски объемом от 250 Гб до 1000 Гб и по цене от 50 до 150 у.е.

Как сделать выборку?
map:
function(hdd) {
if (hdd.capacity>= 250 && hdd.capacity<=1000 && hdd.cost>=50 && hdd.cost<=150)
emit(hdd);
}
или на ORM примерно так
HDD.objects.filter(capacity__gte=250,capacity__lte=1000, cost__gte=50, cost__lte=150)



Офлайн

#8 Окт. 3, 2010 02:43:36

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

NoSQL

Daevaorn
zheromo
что выборку можно делать по одному диапазону необосновано.
Я думаю что имелось ввиду отсутствие возможности в одном запросе указать несколько пар startkey/endkey.
zheromo
По поводу паджинации не думаю что view(_view_name, skip=N, limit=M) намного сложнее чем SELECT … LIMIT … Еще эффективней работает view(_view_name, start_key=S, limit=M). И БД не загнется :)
skip/limit не эффективны и для паджинации не рекомендуются. А startkey/limit не всегда преименимо.
Это тоже можно сделать
{ “ranges”: }

ссылка
https://issues.apache.org/jira/browse/COUCHDB-523

Если несложно, можно привести пример когда использование startkey/limit неприменимо.



Офлайн

#9 Окт. 3, 2010 03:20:21

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

NoSQL

zheromo
Это тоже можно сделать
{ “ranges”: }

ссылка
https://issues.apache.org/jira/browse/COUCHDB-523
Я слежу за этим тикетом. Он ещё не разрезолвлен и данного вида запрос сделать пока нельзя.
zheromo
Если несложно, можно привести пример когда использование startkey/limit неприменимо.
Например когда вьюха может генерировать одинаковые ключи. Для паджинации в данном случае требуется использование ещё и startkey_docid, но это тоже не будет работать если одинаковые ключи может порождать один документ.



Офлайн

#10 Окт. 3, 2010 03:24:45

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

NoSQL

zheromo
map:
function(hdd) {
if (hdd.capacity>= 250 && hdd.capacity<=1000 && hdd.cost>=50 && hdd.cost<=150)
emit(hdd);
}
или на ORM примерно так
HDD.objects.filter(capacity__gte=250,capacity__lte=1000, cost__gte=50, cost__lte=150)
Вы лукавите, делать подобного рода запрос через временную вьюшку равносильно самоубийству на мало-мальски большой базе. А статически вы просто не сможете сгенерировать ключи по которым можно было бы выбрать нужные документы оним запросом (конечно, если мы говорим о ситуации когда границы задаются динамически). Двумя пожалуйста.

Кстати, для подобного рода запросов более эффективно использовать couchdb-lucene.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version