2014-11-05 5 views
1

을 사용하여 MongoDBgridFS에 많은 양의 jsons를 삽입하고 일부 데이터를 수집합니다. 얼마 전 알아 차린 사실은 MongoDB가 단일 연결을 사용하는 데 막대한 양의 RAM을 소비한다는 것입니다. 이 연결을 닫으면 곧 해제됩니다. RAM 소비량은 연결시 총 10-12GB, 그렇지 않은 경우 200MB와 비슷합니다. 실제로 수집 할 수있는 크기는 ~ 300MB이며 10-18GB gridFS 저장 용량입니다.연결시 MongoDB RAM 소비량

는 왜 발생합니까? 부피가 큰 작업에 대해 새로운 연결을 열 때 모든 리소스에 단일 연결을 사용하는 것보다 리소스 의존성이 훨씬 적은 방법은 무엇입니까? 저널링과 어떻게 관련이 있습니까?

답변

2

내가 이해를 돕기 위해 여러 개의 작은 문제로이 문제를 분해해야합니다 :

잘 MongoDB를가 RAM 배고픈 것으로 알려져있다
  1. , 가능한 한 많은 RAM을 사용하려고합니다.
  2. GridFS는 fs.chunks 콜렉션의 파일과 해당 메타 데이터를 fs.files에 저장하는 경향이 있습니다. GridFS에 저장된 파일은 각각 256KB 청크로 나뉩니다.

당신이 (가 RAM에 존재하지 않는 경우) (들) 파일에 속하는 덩어리가 디스크에서 RAM에로드 할 수 있고, 연결을 열어 GridFS 데이터를 읽을 때. 따라서 RAM 사용량은 저장된 데이터의 양에 직접 비례하며 중요한 것은 GridFS 데이터 액세스의 빈도 인 입니다. GridFS 데이터가 쿼리를 참조하면 RAM으로 다시 가져옵니다.

많은 양의 GridFS 데이터에 대해 연결되어있는 경우 RAM 사용량이 많아야합니다. 그러나 쿼리 빈도가 낮 으면 (쓰기 만하고 거의 읽지 않는 경우) RAM 사용량이 상대적으로 낮습니다. 주로 데이터를 쓰는 경우 작업이 완료된 후 연결이 닫혀 있는지 확인하십시오.

  1. 열려있는 연결 수가 많을수록 RAM 사용량이 증가합니다.
  2. 이것은 저널링과 관련이 없습니다.

: GridFS도 과도한 RAM 사용의 문제를 해결하는 경향이 샤딩을 지원합니다.

희망 사항을 명확히합니다.

+0

나는서만 쓰고 있습니다. 또한 내가 삽입 한 데이터는 청크로 처리되고 읽은 후에 파일을 올바르게 닫습니다. – dimon222

+0

답변이 업데이트되었습니다. 샤딩이 문제를 해결해야합니다. – vmr