2012-08-28 3 views
1

나는이 쿼리를MongoDB를 우분투 아마존 웹 서비스

db.tablebusiness.find ({ "LongitudeLatitude"가 ] "}", "indexContents": { "$ all": [ "warung"]}, "Prominent": { "$ gte": 15}}) 제한 (50);

문제 : mongodb 창에서이 쿼리는 1 초 미만으로 빠르게 실행되지만 우분투 서버에서는 아마존이 쿼리가 실행되지 않습니다. 1 분이 걸렸어.

물론 amazon 서버의 메모리가 낮을 때 (내 로컬 호스트에 8GB 메모리가있는 경우) 문제가 있습니다. 그러나 성능 차이는 매우 큽니다.

예를 들어, 로컬 서버에서 1000000 스레드를 실행할 수 있습니다. 그 아마존은 1 ~ 2 개의 쿼리 만 실행합니다.

둘 다 색인이 생성됩니다. 실제로 amazon 서버는 내 로컬 호스트의 정확한 사본입니다. 나는 localhost에서 amazon으로 파일을 간단히 업로드했다.

둘 다 색인이 생성됩니다. 사실 최근에 아마존에 추가 색인을 추가했습니다. 로컬 호스트에 대한

인덱스는 다음과 같습니다 아마존에 대한

{LongitudeLatitude :"2d",indexContents :1,Prominent:-1} 

인덱스는 다음과 같습니다

{LongitudeLatitude :"2d",indexContents :1,Prominent:-1} 

우리는 또한 누군가가 내 우분투 서버에서 잘못 알고 있나요

{LongitudeLatitude :"2d",Prominent:-1} latter to no effect 

를 추가 아마존? 다음, 데이터는 아마존에서 빠른 실행하려면이 같은 쿼리를 원하는 경우 - 로컬 호스트에서

dbserever 우분투 아마존에서

db.runCommand("buildInfo") 
{ 
     "version" : "2.0.7", 
     "gitVersion" : "875033920e8869d 
     "sysInfo" : "windows sys.getwin 
platform=2, service_pack='Service Pack 
     "versionArray" : [ 
       2, 
       0, 
       7, 
       0 
     ], 
     "bits" : 64, 
     "debug" : false, 
     "maxBsonObjectSize" : 16777216, 
     "ok" : 1 

dbserever이

db.runCommand("buildInfo"); 
{ 
     "version" : "2.0.7", 
     "gitVersion" : "875033920e8869d284f32119413543fa475227bf", 
     "sysInfo" : "Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41", 
     "versionArray" : [ 
       2, 
       0, 
       7, 
       0 
     ], 
     "bits" : 64, 
     "debug" : false, 
     "maxBsonObjectSize" : 16777216, 
     "ok" : 1 
} 

답변

2

대부분의 경우 여기에 대답은 RAM입니다입니다 작업 세트 (작업 세트라고도 함), 즉 인덱스 + 데이터는 RAM에 맞아야합니다. Amazon 인스턴스 (페이지 폴트)에서 디스크를 기록해야 할 때마다 EBS을 사용하게됩니다. 즉, 네트워크를 사용하게됩니다. 이것은 로컬 디스크에 비해 빠르지는 않을 것이며 RAM에있는 데이터에 액세스하는 것보다 확실히 느린 속도가 될 것입니다.

아마존 인스턴스에 충분한 RAM이 있지만 여전히 느린 경우 데이터 세트가 아직 메모리에 없을 수 있습니다 (로컬 시스템에있을 가능성이 높고 해당 쿼리를 여러 번 실행하기 때문에) . 첫 번째 실행과 두 번째 실행을 비교 했습니까?

또한 인스턴스에 따라 CPU 리소스가 충분하지 않을 수 있습니다. 마이크로와 작은 인스턴스는 많은 힘이 없으며 쿼리가 다소 복잡합니다. Amazon에서 CPU 사용률을 살펴보고 인스턴스 크기가 적당하다는 것을 확인합니다.

마지막으로 많은 사람들이 MongoDB를 Amazon에서 성공적으로 실행하고 있지만, EC2 환경을 최대한 활용하려면 제한 사항과 권장 사항을 알아야합니다.훌륭한 프리젠 테이션 아마존에서 실행에 대해 여기에 있습니다 :

http://www.10gen.com/presentations/MongoNYC-2012/MongoDB-on-Amazon%20EC2

을 그리고 아마존/EC2 노트 페이지가 :

http://www.mongodb.org/display/DOCS/Amazon+EC2

+0

확인 응답은 http://stackoverflow.com/questions에/12524175/why-using-all-in-mongodb-is-much-slow-me 그리고 내가 잘못했는지 알려주세요. –