2012-03-08 7 views
-1

제 테스트에서 약 500 개의 인서트, 200 개의 쿼리, 초 당 400 개의 업데이트가 발생합니다. 이 번호를 늘리기 위해 내가 뭘 조정할 수 있는지 궁금해.mongodb 테스트 속도를 높이려면 어떻게해야합니까?

다른 사람들이 테스트에서 수천 또는 수만 개의 삽입을 얻을 수 있다는 것을 읽었습니다. 이것은 내 테스트보다 훨씬 낫습니다. 나는 기본적인 것을 놓치고 있는지 궁금해? 나는 기본 구성으로 32 비트 승리하여 MongoDB의 v2.0.3을 사용하고

  • 스프링 몽고와
  • 자바 드라이버 (2.7.3), (내가 그나마 힘 :

    그래서, 여기에 사실 수 있습니다 fsync)

  • push, pull, inc, dec, set,
  • 과 같은 삽입 및 원자 업데이트의 조합을 수행하고 이들 모두를 500k 번 반복합니다.
  • 의도는 삽입 및 업데이트와 같은 사용자 동작을 시뮬레이트하는 것입니다.
  • 특정 인덱스가 정의되어 있지는 않지만 기본적으로 ID에 항상 고유 인덱스가 있다고 생각합니까? 자바 프로세스 280메가바이트 주위 취하고 MEM 4GB의 씽크 에지
  • 제가 공지 코어 i5이다 이클립스 IDE에서 실행
  • 자바 앱
  • H/W 사양 mongod 서버와 같은 컴퓨터에서 실행되고 2012-03-08 21:50:16

    그리고 난 mongostat를 사용하여 모니터링하고 22:05:10의 시간에 도달 한 후, 난 내 완료되지 않은 응용 프로그램을 종료 : 루프의 과정에서 그 숫자 안정

시작 시간입니다 .. 그리고 마지막 출력은 O입니다.

insert query update delete getmore command flushes mapped vsize res faults locked % idx miss %  qr|qw ar|aw netIn netOut conn  time 
    499 200 400  0  0  100  0 1023m 1.06g 581m 145  8.5   0  0|0  0|0 645k 97k  3 22:05:01 
    503 201 403  0  0  102  0 1023m 1.06g 582m 154  10.7   0  0|0  0|1 651k 98k  3 22:05:02 
    520 208 415  0  0  105  0 1023m 1.06g 582m 176  11.1   0  0|0  0|0 671k 101k  3 22:05:03 
    504 202 403  0  0  102  0 1023m 1.06g 582m 167  7.2   0  0|0  0|0 651k 98k  3 22:05:04 
    524 209 419  0  0  106  0 1023m 1.06g 582m 147  8.3   0  0|0  0|0 675k 102k  3 22:05:05 
    534 213 428  0  0  107  0 1023m 1.06g 583m 176  7.4   0  0|0  0|0 690k 103k  3 22:05:06 
    531 213 424  0  0  108  0 1023m 1.06g 584m 160  4.9   0  0|0  0|0 685k 104k  3 22:05:07 
    533 213 427  0  0  107  0 1023m 1.06g 584m 164  6.9   0  0|0  0|0 689k 103k  3 22:05:08 
    518 208 414  0  0  105  0 1023m 1.06g 585m 158  7.3   0  0|0  0|0 669k 101k  3 22:05:09 
    521 208 417  0  0  105  0 1023m 1.06g 585m 154  4.7   0  0|0  0|0 673k 101k  3 22:05:10 

그리고 다음 mongostat f를 내 삽입 번호 체크 :

> db.myCollection.find().size(); 
90575 

하고 또한이 과정

> db.myCollection.findOne().pretty(); 
{ 
     "_id" : "b146189a-56a4-4035-8245-c4bd6dc2bd22", 
     "something1" : "my class is cool !", 
     "something2" : { 
       "value" : "this is a statement blah blah", 
       "name" : "myStatement" 
     }, 
     "something3" : { 
       "size" : { 
         "value" : 0, 
         "name" : "size" 
       }, 
       "value" : [ 
         "6810cb0c-fa3e-4ca9-8a27-8432f2d1e828", 
         "a8276d05-a796-4c43-bc74-edc06d074099" 
       ], 
       "name" : "myids" 
     }, 
     "something4" : { 
       "myattr" : { 
         "value" : "something", 
         "name" : "name" 
       }, 
       "attr" : { 
         "content" : { 
           "value" : "another another body body content content", 
           "name" : "content" 
         }, 
         "contentId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22", 
         "name" : "something" 
       }, 
       "subsubchildchild" : { 
         "size" : { 
           "value" : 0, 
           "name" : "size" 
         }, 
         "value" : [ ], 
         "name" : "subBodies" 
       }, 
       "myId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22", 
       "name" : "hiccups" 
     }, 
     "something5" : { 
       "value" : false, 
       "name" : "hahaha" 
     }, 
     "something6" : { 
       "name" : "okay this is just a test" 
     }, 
     "something7" : { 
       "value" : false, 
       "name" : "remove me !" 
     }, 
     "something8" : { 
       "size" : { 
         "value" : 0, 
         "name" : "size" 
       }, 
       "value" : [ ], 
       "name" : "guess what" 
     }, 
     "something9" : { 
       "size" : { 
         "value" : 0, 
         "name" : "anotherSize" 
       }, 
       "value" : [ ], 
       "name" : "tarantula" 
     }, 
     "something10" : { 
       "value" : 8, 
       "name" : "my exam score" 
     }, 
     "something11" : { 
       "size" : { 
         "value" : 0, 
         "name" : "justAnotherSize" 
       }, 
       "value" : [ ], 
       "name" : "myReference" 
     }, 
     "something12" : { 
       "size" : { 
         "value" : 0, 
         "name" : "size" 
       }, 
       "value" : [ ], 
       "name" : "myOtherReference" 
     }, 
     "something13" : { 
       "value" : "8b78fff0-50f5-4992-9972-89f9d944fee7", 
       "name" : "user" 
     }, 
     "something14" : { 
       "dateTime" : "2012-03-08 21:50:17.480000000" 
     }, 
     "something15" : { 
       "value" : false, 
       "name" : "lovely" 
     } 
} 

에 등 업데이트되는 삽입 내 문서의 예이다 그리고 여기에 내 db 통계 :

> db.stats(); 
{ 
     "db" : "qa", 
     "collections" : 7, 
     "objects" : 815197, 
     "avgObjSize" : 622.2093211824872, 
     "dataSize" : 507223172, 
     "storageSize" : 610770944, 
     "numExtents" : 57, 
     "indexes" : 5, 
     "indexSize" : 64197952, 
     "fileSize" : 1056702464, 
     "nsSizeMB" : 16, 
     "ok" : 1 
} 

또한 호기심에 대한 또 다른 질문입니다. 약 90k 레코드가있는 메인 컬렉션 크기와 크기가 커지지 않은 다른 비 실질적인 컬렉션으로 판단 할 때이 경우 약 1TB의 파일 크기를 갖는 것이 합리적입니까? 내 파일 크기를 줄이기 위해 할 수있는 일이 있습니까?

의견을 말하십시오.

+0

나는 이것이 특정 질문과 같이 보이지 않기 때문에 투표를 끝내기로 결심했다. 파일 크기에 대한 질문에는 장점이 있지만 별도의 질문으로 나누는 것이 좋습니다. –

+0

@Sean Reilly : 내 습관이 너무 많아서 내 질문에 선명도가 부족한 것을 유감스럽게 생각하지만 내 변경 사항을 확인해 주시겠습니까? 호프 퓨리 질문은 이와 비슷한 많은 다른 질문과 비교하여 현재 더 명확합니다. – bertie

+0

다소 다소 장황한 경우 실제로는 비교적 명확한 질문이라고 생각합니다.) –

답변

2

mongostat에 많은 결함이있는 것 같습니다. 왜 그런가?

가 어떻게 이러한 업데이트를 실행하는, INC 12 월을 당겨 푸시처럼 삽입 및 원자 갱신의 조합을 설정 하? 작성자 : _id?

다른 사람들은 테스트에서 수천 또는 수만개의 인서트를 얻을 수 있다는 것을 읽었습니다. 이것은 내 테스트보다 훨씬 낫습니다. 나는 기본적인 것을 놓치고 있는지 궁금해?

mongostat에 따르면 3 개의 연결 만 활성화되었으며 잠금 비율은 약 10 %에 불과합니다.

  • 입력을 멀티 스레딩하고 있습니까?
  • 이 컴퓨터를 모두 망치고 있습니까?
  • 시스템 IO는 어떻게됩니까?
  • WriteConcern.Safe 하시겠습니까?

처리량에 영향을 줄 수있는 모든 고려 사항입니다.

이 경우 약 1TB의 파일 크기를 갖는 것이 합리적입니까?

자료실 db.stats()의베이스는 약 600MB의 디스크 만 사용합니다.

"storageSize" : 610770944 // = 610,770,944 

귀하의 평균 개체 크기는 622 바이트입니다,하지만 당신은 815,197 개체가 아니라 당신이하는 주장 90K 문서가 있습니다.

내 파일 크기를 줄일 수있는 방법이 있습니까?

예, JSON 문서의 키 크기를 줄이십시오. 예를 들어 :

"something1" : "my class is cool !" => ~28 bytes 
"s1": "my class is cool !"   => ~20 bytes 

가 제대로 단축 이름이 저장되어 있는지 확인하고 당신에게 더 합리적인 이름으로 이러한 매핑의 리프팅을 데이터 액세스 프레임 워크를 할 수 있습니다.

+0

오류에 대해서는 확실하지 않지만 의사는 Linux에만 해당하며 win7을 사용하고 있다고 말합니다. 그리고 네, 순차적 인 사용자 동작을 시뮬레이트하기 위해 순차적으로이 작업을 수행해야하므로 단일 스레드에서이 작업을 수행하고 있습니다. 나는 당신의 게시물을 읽은 이후 여러 물건을 시도하고, 나는 내가 int 카운터를 사용하는 것보다 느린 ID로 오래 uuid를 사용하는 것과 같은 많은 나쁜 일들이 계속 있었음을 주목한다. 또한 쿼리 된 필드는 인덱싱되지 않는다. SAFE (나는 이것을 피할 수는 없지만), 그리고 skip (많은 필드 유형 정렬)을 사용하는 악명 높은 페이징. 통찰력에 감사드립니다. – bertie

관련 문제