카테고리 없음2010. 8. 29. 16:57
카우치디비(couchdb) 1.0 이 나왔다는 소식을 전했더랬습니다. 거기서 300배가 빨라졌다고 주장하네,라고 썼는데, 얼마나 빨라졌는지 궁금해서 테스트를 돌려봤슴다. 이번에도 지난번처럼 몽고디비(mongodb)와 비교했습니다.


테스트 환경 / 설치
-------------------
하드웨어는 메모리 4G, CPU는 2GHz Xeon (2core) 이었구요. (네, 이제 퇴역할 때가 다가오고 있는 기곕니다..)

데비안에서 테스트를 해보고 싶어서 고생좀했습니다. apt-pin 으로 testing, unstable을 열어주는 수밖에는 없는것 같습니다. 다른 시도들은 모두 실패했는데, apt-pin 을 한 후에

[code shell]sudo apt-get install build-essential libmozjs-dev
sudo apt-get install libicu-dev libcurl4-openssl-dev erlang
tar -zxvf apache-couchdb-1.0.1.tar.gz
cd apache-couchdb-1.0.1
./configure --prefix=/opt/couchdb
make
sudo /opt/couchdb/bin/couchdb [/code]

로 성공했습니다. 다른 방식들은 자바스크립트 관련한 오묘한 오류가 발생하네요.

mongodb는 apt-pin 설정만 해주면 최신버전인 1.6.1이 잘 설치됩니다. unstable이지만 패키지에는 들어가있습니다.




테스트 데이터
--------------
얼마나 속도가 향상되었는지만 궁금했기 때문에, 어떤 게시판의 게시물 251723개를 디비에 넣어보는 테스트만 해보았습니다. 지난번에는 이 테스트에 8시간정도가 걸렸었었습니다. 당시에 벌크 인서트를 사용하면 30분정도 였고, 동일한 테스트를 mongodb에서 수행하면 13분이었슴다.

결과부터 살짝 공개하면, 8시간 걸리던 테스트가 이번에는 49분이네요!  (300배는 아니지만, 환경이 바뀌었기 때문일 수도 있으니까, 카우치팀이 꽤 열심히 일한것 같습니다.)


뷰 엔진
-------
인서트도 빨라졌지만, 더 감동적인 것은 map/reduce 함수입니다.

[code javascript]function(doc) {
 emit(doc.doc_type, 1);
}

function(key, values) {
 return sum(values);
}[/code]

전에는 데이터를 수정하고 뷰를 갱신하면, 기다리는 시간이 너무 길어서, 테스트던 뭐던 도저히 실무에는 적용하기 힘들겠다는 정도였습니다.

다행히 1.0.1 버전은 그렇지는 않습니다. 데이터 변형이나 추가가 엄청나게 많은 경우에는 어떨지 모르겠지만. 만개 정도의 데이터를 추가한 다음, 뷰를 갱신해보니 1초이내에 응답을 만들어냅니다. 천개정도 추가에 4초까지 걸렸던 지난 버전보다는 좋아졌습니다. (뷰화면을 갱신해도 인서트 작업이 느려지는 등의 부작용도 보이지 않았구요.)

데이터 갱신할 때 인덱스를 건드려주는 타입보다는 느릴 수밖에 없겠지만, 체감속도는 견딜만 한 정도네요.




속도비교
--------
데이터 삽입 속도
CouchDB : 49분
CouchDB bulk : 16분
MongoDB : 3 분

MongoDB가 CouchDB보다 16배 빠릅니다.
지난번 비교에서는 (mongodb : 14 분, couchdb: 8시간) 몽고디비가 34배 빨랐었다.
삽입속도와 더불어 뷰엔진에서 인덱스처리도 훨씬 견딜만해졌다는 점도 기억해줘야겠습니다.


데이터 파일크기
CouchDB : 2.5G
MongoDB : 4.2G

몽고디비쪽에 파일 크기와 관련해서 무언가가 달라진 것 같습니다. 꽤 커졌고, 파일 크기에 대해 컴플레인하는 글도 보입니다. 뭐, 부담스러울 정도는 아닙니다만.



결론
----
전에는.... 카우치디비에서 자바스크립트로 Map/Reduce 라는 것을 공부해보고 싶었지만, 조금만 데이터가 많아도 속도가 느려서 공부할 맛이 안났었습니다.

이제 1.0.1 을 설치해보시면 그런대로 테스트/실무에서 사용해볼만한 속도를 내줍니다. 다행입니다.

시작부터 여러가지로 차이가 나는 시스템들이기 때문에 어느 것을 선택할지 계속 망설이는 중이기는 하지만, 현재로써는 둘다 실무의 한부분 (문제가 생기면 서비스에서 빠져도 되는 부분에만..) 에 적용해보기로 했습니다.

실무에서 어떤 문제/성과가 있는지는 다음번에 올리겠습니다. (테스트할 사이트는 3만/1일 PV 라서 헤비한 사이트에서도 견디는가 따위보다는 써보니까 어느쪽이 더 편하더라, 정도가 될것 같습니다. 누군가도 분명히 테스트해봤을 것 같은데... 한글 자료는 별로 없네요.)


----
P.S. 카우치/몽고 모두 우분투용으로는 최신버전이 있지만, 데비안에서는 조금 헤매야 합니다. 게다가 apt-pin은 별로 내키지 않구요. 그래서. 서버 OS를 바꿔볼까.. 또 망설이다가, http://qa.debian.org/developer.php?login=nslater%40tumbolia.org 를 발견했다. 아래쪽에 현재까지 알려진 (아직 수정되지않은) couchdb의 버그갯수가 나와있습니다. 그렇습니다. 데비안이 더 보수적입니다. 다시한번 데비안으로 주저앉기로 했습니다. 조금만 기다리면 1.1 쯤부터는 프로덕션 서버에도 설치할 수 있을지도...

P.P.S  테스트는 굳이 그루비로 진행했습니다. 몽고디비쪽의 드라이버가 그루비 1.7.1 에서만 제대로 동작한다는 점만 빼면 여전히 쓰기 편하더군요.
Posted by jintopark