2014-09-01 3 views
1

여러 사용자가 게시물에 대해 좋아하는 것을 제공하는 페이스 북 게시물의 예를 들어 보겠습니다. 이제 일부 게시물에 대해 현재 데이터베이스 저장소가 10 개이고 두 사용자가 동시에 해당 게시물을 좋아한다면 둘 다 현재 10 개를 읽고 현재 11 개를 하나씩 업데이트하지만 올바른 값은 12 개가되어야합니다. mongodb 및 java를 사용하여이를 달성하는 방법.Java에서 mongodb 필드를 동시에 읽고 업데이트하는 방법

답변

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

예 : 여기

link에서 샘플 코드입니다. 그게 내가 증가하지만 내 문제는 두 개의 동시 스레드가 데이터베이스에서 동일한 값을 읽고 다음 값을 변경 (일부 조작을하고있다)하고 데이터베이스에 그 값을 업데이 트하는 경우 작동합니다. 예를 들어 .. A와 B는 두 명의 사용자입니다. A는 10을 읽고 B는 10을 동시에 읽습니다. A가 10에서 일부 계산을 수행 한 다음 처음으로 B를 업데이트 한 다음 B가 업데이트 된 값을 읽어야합니다. – vareen

+0

그런 다음 사용자 A가 레코드를 읽고 수정하고 있다고 가정합니다. 사용자 B를 어떻게 처리 할 것으로 예상합니까? 레코드를 잠그고 레코드가 사용 중임을 알리는 예외를 던지거나 트랜잭션/잠금이 끝나기를 기다릴 수 있습니다. –

관련 문제