max_mara
@max_mara

CouchDB: частое обновление

Добрый вечер, Хабровчане

Пытаюсь прикрутить CouchDB к одному из наших проектов и в принципе я всем очень доволен.
Очень нравится то, что 100 миллионов записей, на скромненьком сервере 8 Cores x 32GB RAM, ворочает без проблем.

Но есть одна маленькая деталь
{
   "_id": "_design/funcs",
   "updates": {
       "addUid": "function(doc,req) {
       		if(doc!==null) {
       			req.body=JSON.parse(req.body);
       			var uids=req.body.uids;
       			for(var uid in uids) {
       				uid=uids[uid];
       				doc.uids[uid] = true
       			} 
       			
       			delete doc._rev
       		}
       		return[doc,JSON.stringify(doc)]
       	}"
   }
}


Есть у меня update handler внутри моей БД, который по несколько раз в секунду должен добавлять уникальные идентификаторы в документ.
Проблема в том, что если я начинаю вызывать этот хендлер очень часто, я получаю 409: Document update conflict

CouchDB 1.0.2

Что я пропустил и как это исправить?
  • Вопрос задан
  • 3026 просмотров
Пригласить эксперта
Ответы на вопрос 2
@1nd1go
Я могу ошибаться, но во-первых, каждый раз когда вы обновляете документ, создается его новая версия. Это значит, что при добавлении id будет новая версия документа. Из-за частых добавлений, может перестраиваться B+ дерево записей, что может сказываться на перфомансе

Кстати, у вас, я правильно понял, что id обновляется в объектах принадлежащих одному документу? Тоже может быть, что вы раз записав кому-нить id, пытаетесь в цикле обратиться к еще старому документу.
Ответ написан
@hellboy1981
а каким образом нужно корректно обрабатывать исключение "Document update conflict"? В цикле получить новую версию документа, применить к ней изменения и потом повторить?

не будет ли здесь бесконечного цикла?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы