2011-03-30 2 views
5

저는 파이썬 스크립트가 거의 없기 때문에 사전에 5-10 백만 문자열 키 값 쌍을 저장하고 있으며이 사전에 5 백만 ~ 10 만 번 쿼리합니다. 나는 파이썬 사전이 잘 작동하지 않는다는 것을 알아 차렸다. 문자열 키에 가장 적합한 다른 구현이 있습니까?Python : Best Dictionary implementation

편집 :

나는 사람 이름의 두 개의 큰 목록을 가지고 그리고 난 그들을 일치 할, 그래서 참조 목록으로 그들 중 하나를 가지고 알아 내기 위해 두 번째 목록에서 각 이름에 다른 휴리스틱을 적용 시도 그것이 첫 번째 목록에있는 경우. 그래서 두 번째 목록의 모든 이름에 대해 첫 번째 목록을 2-3 번 쿼리해야합니다. 희망, 이것이 의미가 있습니다.

+0

왜 데이터베이스를 사용하지 않습니까? – Geo

+1

데이터베이스가 이해가되지 않습니다. – Boolean

+1

사전 검색이 병목 현상이라고 생각하는 것이 어렵습니다.파이썬 사전은 빠르며 모든 키가 문자열 인 경우에도 최적화되어 있습니다. 시간이 '다른 발견 적 적용법'을 적용하지 않는 것이 확실합니까? 사전 조회를 사용하거나 사용하지 않고 벤치마킹 해 보셨습니까? – Duncan

답변

1

와우. 해시 맵 (사전) 이 아닌 구조 일 수 있습니다.

문자열을 사용하는 대신 훌륭하고 빠른 해시를 제공하는 표현을 사용해보십시오. 아니면 정말로 문자열을 저장하고 있습니까? 그렇다면 이전 문장에서 "힘"을 뺍니다.

문제 해결에 대한 세부 정보를 제공해 주시겠습니까?

+0

님이 질문을 수정했습니다. – Boolean

0

Santiago Lezica가 말했듯이, 사전은 당신이 찾고있는 구조가 아닙니다.

아마도 Redis : http://redis.io을 시도해야합니다. 고급 키 - 값 저장소입니다.

파이썬 here 용 라이브러리가 있습니다.

0

PyTables http://www.pytables.org/moin 큰 데이터 세트를 저장하도록 만들어졌습니다.

set(names1).intersection(set(names2)) 

오른쪽 : 당신은뿐만 아니라 할 수처럼 경우에, 하나의 사전 = 하나 개의 테이블은 설명에서

0

들린다?

어느 쪽이든, 문제는 알고리즘이 파이썬의 해시 테이블 구현이 아니라 느리다는 것입니다.

0

클래스 또는 메서드 호출을 사용하지 않는 경우에도 코드를 함수에 넣고 해당 함수를 호출하십시오. 파이썬의 함수는 부분적으로 전역 변수보다 지역 변수에 접근하기 때문에 고도로 최적화되어 있습니다.

Python Performance Tips 파이썬 위키에 대한 글은이 주제에 대한 훌륭한 참고 자료입니다.

1

질문 : 스케일링 문제입니까? 두 배의 데이터가있을 때 코드 실행 속도가 두 배 이상 빨라진다는 것을 알고 계십니까? 실제 메모리가 부족하여 스왑 메모리를 사용할 가능성이 있습니까?

각 100 자의 문자열은 1 기가 바이트입니다. 2 세트가 있다면 2 기가 바이트가되며 32 비트 WinXP 프로세스의 한계에 가깝습니다.

이 질문에 대한 답을 아직 모르는 경우 다양한 크기 (10 또는 2의 제곱)로 데이터베이스에서 테스트를 실행하고 성능 곡선에 불연속이 있는지 확인하는 것이 좋습니다.