1
讓我們舉一個facebook帖子的例子,其中多個用戶給予一個帖子喜歡。現在對於一些當前的數據庫存儲10喜歡,如果兩個用戶同時喜歡這篇文章,然後都將讀取10當前像和逐一更新11,但正確的值應該是12.如何使用mongodb和Java來實現此目的。如何從java中同時讀取和更新一個mongodb字段
讓我們舉一個facebook帖子的例子,其中多個用戶給予一個帖子喜歡。現在對於一些當前的數據庫存儲10喜歡,如果兩個用戶同時喜歡這篇文章,然後都將讀取10當前像和逐一更新11,但正確的值應該是12.如何使用mongodb和Java來實現此目的。如何從java中同時讀取和更新一個mongodb字段
檢查運營商$inc。
這裏是從這個link一個示例代碼:
// 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);
是。這將工作,如果我想增量,但我的問題是兩個併發線程正在從數據庫讀取相同的值,然後更改該值(做一些操作),然後將該值更新到數據庫。例如.. A和B是兩個用戶。 A讀取10和B同時讀取10並且A在10上執行一些計算並且先更新然後B然後B應該讀取更新的值。 – vareen 2014-09-02 06:08:50
然後,假設用戶A正在讀取和修改記錄。你期望如何處理用戶B?您可以鎖定記錄並拋出異常,說明正在使用該記錄,或者等待事務/鎖定結束。 – 2014-09-09 03:10:06