2016-07-28 1 views
3

은 현재 내가 문서를 가져 pymongo MongoDB의 모든 문서를 가져 오는 방법 : 주위 소요 데이터 (700 만 기록)의 동일한 세트에 fetchall을 수행, 참고로신속하게 예를 들어, pymongo에 커서를 반복하여

for d in db.docs.find(): 
    mylist.append(d) 

위의 방법이 몇 분이 걸리는 동안 20 초.

mongo에서 대량 데이터를 더 빠르게 읽을 수 있습니까? 미안 해요. 몽고를 처음 보시고, 더 많은 정보가 필요하시면 알려주세요.

답변

3

$ natural sort를 사용하면 색인을 무시하고 디스크에 저장된 순서대로 문서를 반환하므로 mongo가 디스크에서 임의의 읽기와 함께 쓰레기를 할 필요가 없습니다. 쿼리를 사용하려면

https://docs.mongodb.com/manual/reference/method/cursor.sort/#return-natural-order

성능이 심각하게 저하된다. FIFO 순서에 의존해서는 안됩니다. Mongo는 저장 영역 내에서 문서를 이동할 수 있습니다. 순서에 관심이 없다면 그렇게하십시오.

이 순서는 내부 구현 기능, 당신은

for d in db.docs.find().sort({ $natural: 1 }): 
    mylist.append(d) 

파이썬에서, 당신은 또한 EXHAUST 커서 유형을 사용하려면 내가 내 특정 구조에 의존해서는 안 그 mongo 서버에게 pymongo 드라이버가 각 배치를 확인하기를 기다리지 않고 결과를 스트리밍하도록 지시합니다.

https://api.mongodb.com/python/current/api/pymongo/cursor.html#pymongo.cursor.CursorType.EXHAUST

걱정하지 마세요. 절대로 쉘만큼 빠르지 않을 것입니다. mongo/bson-> pymongo-> 사이에서 가장 느린 데이터 이동은 파이썬에서 UTF8 문자열 디코딩입니다.

+0

감사 list() 기능 캐스트를 확인해야합니다. –

0

는 당신은 확실히 도움이 자연 플래그를 사용하여,

pymongo_cursor = db.collection.find() 
all_data = list(pymongo_cursor)