2014-05-23 1 views
0

나는 mongodb로 시작합니다. 3400000 줄의 데이터가있는 텍스트 파일이 있고 해당 데이터를 mongodb 데이터베이스에 업로드하려고합니다.모든 텍스트 파일 내용을 mongodb에 업로드하십시오 (pymongo 사용)

360715;157.55.34.97;Mozilla/5.0;/pub/index.asp;NULL 
3360714;157.55.32.233;Mozilla/5.0;/pub/index.asp;NULL 
.... 

나는 다음과 같은 구조의 MongoDB를 데이터베이스에 넣어하려면 :

은 텍스트 파일은 다음과 같습니다

{'log' : '360715;157.55.34.97;Mozilla/5.0;/pub/index.asp;NULL'} 
{'log' : '3360714;157.55.32.233;Mozilla/5.0;/pub/index.asp;NULL'} 
.... 

이 사실 나는이 같은 라인으로 업로드 라인입니다 :

for data_line in records: 
    parsed_line = re.sub(r'[^a-zA-Z0-9,.\;():/]', '', data_line) 
    to_insert = unicode(parsed_line, "utf-8") 
    db.data_source.insert({'log':to_insert}) 

한 번에 모든 줄을 원하는 형식으로 업로드 할 수 있습니까? "줄 단위"방식은 훨씬 느려집니다.

이전에, 내가 텍스트 파일을 구문 분석하는 파이썬 스크립트를 코딩했고, 실제로, 100000 개 라인에 1 초 걸리고 나는 프로세스를 개선하되하여 MongoDB를 사용하는 것으로 간주 3400000.

65 초 정도 걸립니다 , mongodb를 사용하면 스크립트에 모든 데이터를 수행하도록 100000 라인을 데이터베이스에 업로드하는 것과 동일한 시간이 걸립니다. 그래서 mongodb에 뭔가 잘못되어 있다고 말하기는 어렵지 않습니다.

누군가가 나를 도울 수 있으면 고맙습니다.

Greetings, João

+0

그리고 당신의 질문은? MongoDB에서 당신이 잘못하고있는 것은 무엇입니까? 내가하는 일을 보여주는 코드가 보이지 않습니다. 아마도 실제로 어떤 것을 추가하여 잘못된 점을 알려줄 수 있습니다. –

답변

0

데이터를 mongodb에 대량 삽입하려고합니다. 지금 당신은 비싼 텍스트 파일의 모든 단일 라인에 대해 insert()를 한 번 호출합니다.

mongoDB 버전 2.6.x를 실행하는 경우 대량 삽입 http://api.mongodb.org/python/current/examples/bulk.html을 사용할 수 있습니다. 튜토리얼에서하기 실시 예 번호 : 이때

>>> import pymongo 
>>> db = pymongo.MongoClient().bulk_example 
>>> db.test.insert(({'i': i} for i in xrange(10000))) 
[...] 
>>> db.test.count() 
10000 

단일 인서트()를 호출하여 MongoDB으로 만 문서를 삽입 하였다.

또 다른 아래 예 :

>>> new_posts = [{"author": "Mike", 
...    "text": "Another post!", 
...    "tags": ["bulk", "insert"], 
...    "date": datetime.datetime(2009, 11, 12, 11, 14)}, 
...    {"author": "Eliot", 
...    "title": "MongoDB is fun", 
...    "text": "and pretty easy too!", 
...    "date": datetime.datetime(2009, 11, 10, 10, 45)}] 
>>> posts.insert(new_posts) 
[ObjectId('...'), ObjectId('...')] 

http://api.mongodb.org/python/current/tutorial.html

+0

존 감사합니다. 나는 두 번째 예제를 사용했고 프로세스가 빨라졌습니다. 사전 목록 구성에 약 55 초가 걸리고 데이터베이스에 삽입하는 데 60 초가 걸립니다. 120 초가 많은 시간이라고 생각하지 않아? –

+0

메모리에로드 할 때 120 초, 3.4M 레코드를 mongodb 데이터베이스에 삽입하면 초당 30k 문서가 삽입됩니다. 어떤 하드웨어를 사용하고 있거나이 컬렉션에 어떤 인덱스를 설정했는지 (두 가지 모두 삽입 속도에 큰 영향을 미친다) 알지 못하지만, 나에게는 꽤 빠른 것처럼 보입니다. –

+0

현재 울트라 북 (Intel Core i7-3517UCPU @ 1.9GHz 2.4GHz | 8GB RAM)을 사용하고 있습니다. 인덱스를 설정하지 않았는데 설정해야합니까? mongoDB 최적화에 관한 몇 가지 논문, 자습서 또는 기타 내용을 알고 있습니까? –

관련 문제