IBM DeveloperWorks에 올라온 기사 Java development 2.0: MongoDB를 좀 더 잘 이해하기 위한 보충설명입니다. :)
<기본 용어설명>
스케일 업(Scale Up) : 서버 성능을 올리는 것. CPU 증설, 램 Up~
스케일 아웃(Scale Out): 서버 대수를 늘리는 것.
샤딩(Sharding): 데이터 베이스의 수평확장(horizontal partitioning)의 일종. 일반적으로 한 테이블의 Row를 분산시키는 것. 요금테이블 -> 1월요금테이블, 2월요금테이블.. 등등으로 나눈다고 생각하면 간단합니다. 샤딩에 대해서는 조만간 따로 글을 올리도록 하겠습니다.
<내용부연 설명>
기사 내용자체가 원체 쉽게 잘 쓰여 있습니다만, 그래도 아래 내용을 먼저 보시고 읽어보시면 더 더욱 쉽게 이해되실 겁니다. :)
"MongoDB의 API는 JSON 오브젝트와 JavaScript 함수의 혼합체이다."
네. 그렇습니다. 따라서 콘솔상에서 자바스크립트 문법을 실행하는 것이 가능합니다.
dW 기사의 mongodb 실행 명령어는 오타인듯 합니다. 아래와 같이 해야 정상실행됩니다.
기사에도 나오지만 mongodb는 document 기반 NoSql중 하나로 기본 데이터로 json 형식을 지원합니다.
find를 이용해서 컬렉션 안의 데이터를 검색합니다. 삭제는 remove를 이용합니다. find때와 마찬가지로 정규식을 지원합니다. i 는 대소문자 무구분!
다음은 Mongodb Java Driver를 이용해 만들어 본 데이터 입력에 대한 단위테스트 케이스 입니다.
Java development 2.0: MongoDB:
(적절한) RDBMS 이동 기능을 제공하는 NoSQL 데이터 저장소
http://www.ibm.com/developerworks/kr/library/j-javadev2-12/index.html
<기본 용어설명>
스케일 업(Scale Up) : 서버 성능을 올리는 것. CPU 증설, 램 Up~
스케일 아웃(Scale Out): 서버 대수를 늘리는 것.
샤딩(Sharding): 데이터 베이스의 수평확장(horizontal partitioning)의 일종. 일반적으로 한 테이블의 Row를 분산시키는 것. 요금테이블 -> 1월요금테이블, 2월요금테이블.. 등등으로 나눈다고 생각하면 간단합니다. 샤딩에 대해서는 조만간 따로 글을 올리도록 하겠습니다.
<내용부연 설명>
기사 내용자체가 원체 쉽게 잘 쓰여 있습니다만, 그래도 아래 내용을 먼저 보시고 읽어보시면 더 더욱 쉽게 이해되실 겁니다. :)
"MongoDB의 API는 JSON 오브젝트와 JavaScript 함수의 혼합체이다."
네. 그렇습니다. 따라서 콘솔상에서 자바스크립트 문법을 실행하는 것이 가능합니다.
doortts:~/Development/mongodb-osx-x86_64-1.8.0> ./bin/mongo
MongoDB shell version: 1.8.0
connecting to: test
> var a=1, b=2;
> a+b;
3
> print ('hello mongo');
hello mongo
>
MongoDB shell version: 1.8.0
connecting to: test
> var a=1, b=2;
> a+b;
3
> print ('hello mongo');
hello mongo
>
dW 기사의 mongodb 실행 명령어는 오타인듯 합니다. 아래와 같이 해야 정상실행됩니다.
./bin/mongod --dbpath ./data/db --vvvvvvv
기사에도 나오지만 mongodb는 document 기반 NoSql중 하나로 기본 데이터로 json 형식을 지원합니다.
ticket = { officer: "Kristen Ree" , location: "Walmart parking lot", vehicle_plate: "Virginia 5566", offense: "Parked in no parking zone", date: "2010/08/15"}
> db.tickets.save(ticket);
> ticket
{
"officer" : "Kristen Ree",
"location" : "Walmart parking lot",
"vehicle_plate" : "Virginia 5566",
"offense" : "Parked in no parking zone",
"date" : "2010/08/15",
"_id" : ObjectId("4d92e8f3a9770dc9e1e6a027")
}
tickets라는 컬렉션은 미리 지정해 놓지 않아도 위와 같이 명령을 쓰는 순간 만들어 집니다.> db.tickets.save(ticket);
> ticket
{
"officer" : "Kristen Ree",
"location" : "Walmart parking lot",
"vehicle_plate" : "Virginia 5566",
"offense" : "Parked in no parking zone",
"date" : "2010/08/15",
"_id" : ObjectId("4d92e8f3a9770dc9e1e6a027")
}
> db.tickets.find();
{ "_id" : ObjectId("4d92e8f3a9770dc9e1e6a027"), "officer" : "Kristen Ree", "location" : "Walmart parking lot", "vehicle_plate" : "Virginia 5566", "offense" : "Parked in no parking zone", "date" : "2010/08/15" }
> db.tickets.find({location:/walmart/})
{ "_id" : ObjectId("4d92e8f3a9770dc9e1e6a027"), "officer" : "Kristen Ree", "location" : "Walmart parking lot", "vehicle_plate" : "Virginia 5566", "offense" : "Parked in no parking zone", "date" : "2010/08/15" }
{ "_id" : ObjectId("4d92e8f3a9770dc9e1e6a027"), "officer" : "Kristen Ree", "location" : "Walmart parking lot", "vehicle_plate" : "Virginia 5566", "offense" : "Parked in no parking zone", "date" : "2010/08/15" }
> db.tickets.find({location:/walmart/})
{ "_id" : ObjectId("4d92e8f3a9770dc9e1e6a027"), "officer" : "Kristen Ree", "location" : "Walmart parking lot", "vehicle_plate" : "Virginia 5566", "offense" : "Parked in no parking zone", "date" : "2010/08/15" }
find를 이용해서 컬렉션 안의 데이터를 검색합니다. 삭제는 remove를 이용합니다. find때와 마찬가지로 정규식을 지원합니다. i 는 대소문자 무구분!
db.tickets.remove({vehicle_plate:/virginia/i});
다음은 Mongodb Java Driver를 이용해 만들어 본 데이터 입력에 대한 단위테스트 케이스 입니다.
import static org.junit.Assert.*; import org.junit.*; import com.mongodb.*; public class MongodbTest { private DB db; private Mongo m; @Before public void setUp() throws Exception { m = new Mongo(); } @After public void tearDown() throws Exception { db = m.getDB("test"); DBCollection coll = db.getCollection("tickets"); coll.drop(); } @Test public void testMongodbInsert() throws Exception { //Given BasicDBObject doc = new BasicDBObject(); doc.put("officer", "Andrew Smith"); doc.put("location", "Target Shopping Center parking lot"); doc.put("vehicle_plate", "Virginia 2345"); doc.put("offense", "Double parked"); doc.put("date", "2010/08/13"); //When db = m.getDB("test"); DBCollection coll = db.getCollection("tickets"); coll.insert(doc); //Then DBObject dbObject = coll.find(doc).next(); assertEquals(doc.keySet(), dbObject.keySet()); assertEquals("Andrew Smith", dbObject.get("officer")); assertEquals("Target Shopping Center parking lot", dbObject.get("location")); assertEquals("Virginia 2345", dbObject.get("vehicle_plate")); assertEquals("Double parked", dbObject.get("offense")); assertEquals("2010/08/13", dbObject.get("date")); } }
'Better SW Development' 카테고리의 다른 글
[dW Review] 자바 동시성 처리 학습 팁 (9) | 2011.04.28 |
---|---|
개인적으로 권장드리는 TDD 코드 작성 스타일 (2) | 2011.04.21 |
[책 일부 공개] 테스트주도개발 : TDD실천법과 도구 (9) | 2011.02.01 |
[dW Review] 평범한 Java 도구에 대해 모르고 있던 5가지 사항 (0) | 2011.01.31 |
[dW Review] 마커 인터페이스와 객체 그래프 : 자바 객체 직렬화(Java Object Serialization)를 배우기전에 알면 좋은 사전지식 (0) | 2011.01.31 |