Как одновременно читать и обновлять поле mongodb из Java

1

Возьмем пример сообщений в facebook, где несколько пользователей дают понравившиеся сообщения. Теперь для некоторых сообщений в настоящее время хранятся хранилища 10, и если двум пользователям понравился этот пост одновременно, то оба будут читать 10 как текущие, так и обновлять 11 по одному, но правильное значение должно быть 12. Как достичь этого с помощью mongodb и java.

Теги:

1 ответ

2

Проверьте оператор $ inc.

Вот пример кода по этой ссылке:

// connect to MongoDB server.
Mongo mongo = new Mongo("localhost", 27017);
DB database = mongo.getDB("mydb");
DBCollection collection = database.getCollection("testCollection");

// create a simple db object where counter value is 0
DBObject temp = new BasicDBObject("name", "someName").append("counter", 0);

// insert it into the collection
collection.insert(temp);

// create an increment query
DBObject modifier = new BasicDBObject("counter", 1);
DBObject incQuery = new BasicDBObject("$inc", modifier);

// create a search query
DBObject searchQuery = new BasicDBObject("name", "someName");

// increment a counter value atomically
WriteResult upRes = collection.update(searchQuery, incQuery);
  • 0
    Да. это сработает, если я захочу увеличить, но моя проблема в том, что два параллельных потока считывают одно и то же значение из базы данных, затем изменяют это значение (выполняют некоторые манипуляции) и затем обновляют это значение в базе данных. например .. A и B два пользователя. A читает 10, а B читает 10 одновременно, а A делает некоторые вычисления для 10 и сначала обновляет, затем B, затем B должен прочитать обновленное значение.
  • 0
    Затем, предполагая, что пользователь A читает и изменяет запись. Как вы ожидаете справиться с пользователем B? Вы можете либо заблокировать запись и выдать исключение, сообщающее, что она используется, либо дождаться завершения транзакции / блокировки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню