2012-07-18 2 views
0

매우 큰 데이터의 파일로부터 입력을 받아서 간단한 처리를 한 후 쉘브 사전 형식으로 저장하는 코드를 작성했습니다. 처리 할 수있는 항목은 4 천 1 백만 개입니다. 그러나, 내가 진열장에 3 천 5 백만 항목을 쓰고 나면 갑자기 성능이 갑자기 떨어지고 결국 완전히 중단됩니다. 이 문제를 피하기 위해 내가 무엇을 할 수 있는지 아는가?시간이 지남에 따라 파이썬 성능 저하 디스크

내 데이터는 트위터에 있으며 사용자의 화면 이름을 해당 ID로 매핑합니다. 좋아요 :

Jack 12 
Mary 13 
Bob 15 

나는 이들 각각에 매우 빠르게 액세스해야합니다. 예 : my_dict[Jack]을 주면 12을 반환합니다.

+1

전체 RAM 및 스와핑? – eumiro

+0

@eumiro 네, 그게 정확히 제가하고있는 일입니다 .. – Amitash

+1

스와핑은 ** RAM에서 작업하는 것보다 많이 느립니다 **. 데이터 구조를 변경하고 DB (sqlite 만 있으면 충분)로 작성하면 데이터에 대한 정보가 없어도 도움이되지 않습니다. – eumiro

답변

1

더 낮은 수준의 것을 사용하는 것을 고려하십시오. 불행히도 선반 성능은 상당히 낮을 수 있습니다. 이것은 당신이보고있는 속도 저하를 설명하지 않습니다.

많은 디스크 기반 인덱스의 경우 은 예상 크기로 초기화 할 수있는 경우을 도와 주므로 즉석에서 재구성 할 필요가 없습니다. 나는 다양한 라이브러리의 디스크 기반 해시 테이블에 대해 거대한 성능 영향을 보았습니다. gdbm, dbhash, bsddb, dumbdbmsqlite3 모듈 특히

http://docs.python.org/library/persistence.html

: 실제 목표에 관해서는

는, 한 번 봐 가지고있다.

sqlite3은 아마도 가장 빠르지는 않지만 가장 쉽게 사용할 수 있습니다. 결국 명령 행 SQL 클라이언트가 있습니다. bsddb은 아마도 더 빠릅니다. 특히 데이터 크기가 nelem 및 이와 유사한 매개 변수를 조정하는 경우 더욱 그렇습니다. 그리고 언어 바인딩도 많이 있습니다. sqlite보다 훨씬 가능성이 높습니다.

초기 크기가 4100 만인 데이터베이스를 만들면이 크기로 최적화 할 수 있습니다.

관련 문제