LINUX.ORG.RU

Почему mongo может терять данные

 


0

1

Есть многопоточная программа, в ней идет сохранение данных в mongodb. Есть объект в котором есть массив и в этот массив добавляется элемент

profile.getTasks().add(cycleTask);
profilesDao.save(profile);
Проблема в том, что иногда в 2% случаев новый элемент в массиве не появляется. Но при этом если сразу же после вставки сделать выборку
Profile tmpProfile = profilesDao.getById(profile.getId());
boolean find = false;
for (Task tmpTask : tmpProfile.getTasks()) {
    if (tmpTask.getId().equals(cycleTask.getId())) {
        find = true;
    }
}
т.е. найти элемент по свежевставленому id, элемент найдется. В программе точно нигде нету удаление объекта, но тем не мениее если потом спустя какой то время сделать выборку вручную, этого элемента нету.

Вопрос, может ли монго терять данные?


race conditions? ты случайно не делаешь через чтение-запись апдейт массива из нескольких мест?

Вроде сама по себе монга не должна ничего терять.

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

Вроде нет, только если lock объекта который изначально вытащил работает не правильно.

Сейчас сделал ради эксперимента перед тем как сохранить объект с новым значением вытащит его из базы а не из кеша.

Если поможет то получается что lock не корректно работает.

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

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

Ну или постарайся хотя бы атомарные операции использовать, вроде push.

Vit ★★★★★
()

eventually consistent?

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