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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.