2013-04-06 2 views
4

최근에 MongoDB를 실험 한 결과, 많은 양의 데이터를 콜렉션으로 가져 오거나 삽입하는 몇 가지 다른 방법을 시도했습니다. 지금까지 가장 효율적인 방법은 mongoimport입니다. 완벽하게 작동하지만 여전히 오버 헤드가 있습니다. 가져 오기가 완료된 후에도 컴퓨터를 재부팅하지 않으면 메모리를 사용할 수 없습니다.큰 파일과 데이터를 MongoDB로 가져 오는 메모리 효율적인 방법은 무엇입니까?

예 : 내 headerline 및 데이터 모습

mongoimport -d flightdata -c trajectory_data --type csv --file trjdata.csv --headerline 

: 9백메가바이트에 대해, 530 만 행

'FID','ACID','FLIGHT_INDEX','ORIG_INDEX','ORIG_TIME','CUR_LAT', ... 
'20..','J5','79977,'79977','20110116:15:53:11','1967', ... 

(20)에 의해 열, 나는이 같은 끝 :

Overhead

장기적으로는 나에게 도움이되지 않습니다. 재부팅이 항상 가능하지 않거나 결국 메모리가 부족할 수 있습니다. MongoDB로 가져 오는 더 효과적인 방법은 무엇입니까? 나는 정기적 인 RAM 플러싱에 대해 읽었다. 어떻게 위의 예제와 같이 구현할 수 있을까?

업데이트 : 내 경우는 fsync를, syncdelay, 또는 저널링을 조정에서 많은 도움이 될 생각하지 않습니다. 고차원 RAM 서버에서 실행되는 경우에도 이것이 좋은 생각이 될 때와 모범 사례에 대해 궁금합니다.

답변

2

mongoimport가 아닌 mongodb가 메모리를 사용하고 있다고 생각합니다. Mongodb은 모든 데이터를 메모리에 유지하려고 시도하고 충분한 공간이 없을 때 메모리 매핑 된 파일을 교환하기 위해 OS에 의존합니다. 그래서 나는 당신에게 충고의 두 조각을 줘야 할 것 :

  1. 당신의 OS가 "무료"얼마나 많은 메모리에 대해 말하고있는 것에 대해 너무 걱정하지 마십시오 - 현대 잘 실행 OS는 일반적으로 사용됩니다 RAM의 모든 비트를 사용할 수 있습니다.

  2. # 1을 준수 할 수 없다면 노트북에서 mongodb를 실행하지 마십시오.

+0

내 경우에는 fsync, syncdelay 또는 저널링을 조정하면 도움이되지 않을 것입니다. 고차원 RAM 서버에서 실행되는 경우에도 이것이 좋은 생각이 될 때와 모범 사례에 대해 궁금합니다. –