LINUX.ORG.RU

CouchDB как лучше сделать?


0

1

Играюсь с CouchDB. Написал бложик и пытаюсь добавить теги.

По тегам должна вываливаться такая, же лента как и главная но только с этим тегом.

Делаю вот такой VIEW:

function(doc) {
  if (doc.type =='post')
     emit([doc.created,doc.tag], doc._id);
}
doc.created нужен чтоб лента была отсортирована по дате создания постов.

Но вот проблема я не могу начать выбирать по тегу не зная первого doc.created. Ключ ведь составной.

Тут надо либо делать view с reduce который ключом имеет имя тега, а значением doc.created

Либо делать документ у которого в полях имя тега и значение doc.created и обновлять его при добавлении поста.

Кто имеет опыт, как лучше делать. Мне кажется документ с ключами не лучший выбор


Если вывод подразумевает только один тег, тогда просто поменяй местами created и tag в ключе.

baverman ★★★
()
Ответ на: комментарий от baverman

И что я тогда могу запросить по неполному ключу и получить первое значение?

demmsnt
() автор топика
Ответ на: комментарий от baverman

А да. тут косяк я согласен. Но у меня скажем три тега. Книги Фильмы Музыка. Индекс получается

((Книги,121210),(Книги,121211),(Книги,121212),(Музыка,121210),(Музыка,1212112),(Фильмы,121210),....)

Я хочу отобрать тех кто (Музыка,*) Я могу запомнить 121210 в некотором документе и тогда я скажу что начинать с ключа (Музыка,121210). Или я могу сделалть reduce чтоб получить ({Книги:121210},{Музыка:121210},{Фильмы,121210})

Проблема в том, что любое изменение документа в CouchDB вызывает перестройку ВСЕХ индексов. Это раз. Во вторых частые обновления документа с 1000 полями могут привести к конфликтам и чем больше документ и чем чаще тем больше.

Вот мне и интерестно кто как делает.

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

Проблема в том, что любое изменение документа в CouchDB вызывает перестройку ВСЕХ индексов. Это раз.

На самом деле это не очень большая проблема.

Во вторых частые обновления документа с 1000 полями могут привести к конфликтам и чем больше документ и чем чаще тем больше.

И это тоже.

Вот мне и интерестно кто как делает.

Я забил на couchdb. Слишком много телодвижений по каждому пустяку. Тоже самое, но в гораздо меньшей степени, относится к mongodb.

baverman ★★★
()
Ответ на: комментарий от trashymichael

это намек взять монго или сразу и на него забить?

Лично мне в mongo не хватило инкрементального map/reduce, но я и задачу решал достаточно специфичную — аккаунтинг. А так впечатления очень даже приятные, может найти применение вместо реляционной БД.

baverman ★★★
()
Ответ на: комментарий от anonymous

О, полгода не прошло, а всё забыл. Вот правильное решение.

baverman ★★★
()
Ответ на: комментарий от anonymous

не. Старткей startkey=[музыка] не существует. Существует startkey=[музыка,20111227]

Два элемента. Я редьюсом сделал. Но я ведь учусь. Вот и спрашиваю вас.

demmsnt
() автор топика
Ответ на: комментарий от baverman

А так впечатления очень даже приятные, может найти применение вместо реляционной БД.

У меня ощущения что скажем MySQL + MongoDB или CouchDB это айс. Только в 99% если сильно извратится обойдешься только MySQL. А старик Оккам ведь не дурак был.

Ну и по делу если кто интересуется может хоть мэйл лист замутим?

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

не. Старткей startkey=[музыка] не существует. Существует startkey=[музыка,20111227]

Должно работать и так.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.