문제

실행 했다는 역동적인 프로그래밍 코드(하려고 무차별을 반증 Collatz 추측=P)사용 dict 를 저장하는 길이 체인의 이미 계산됩니다.분명히 그것을 실행한 메모리에서 일부 지점입니다.수있는 쉬운 방법이 있을 사용하여 어떤 변형의 dict 는 것입니다 페이지의 부품 자체에 디스크에 그것의 방이 있는가?분명히 느린 것 보다 메모리 영어를,그리고 그것은 아마도 결국 먹는 내 하드 드라이브는 공간이지만,이 적용할 수 있는 다른 문제는 그렇게 무의미하다.

나는 디스크 기반 사전 꽤 많은 데이터베이스,그래서 나는 수동으로 구현 하나를 사용하여 sqlite3,그러나지 않았어요 그것은 어떤 스마트한 방법이 있다면 그것은 좋은 것 모양까지 모든 요소에 DB 를 하나 이번에...그것에 대해 300x 느립니다.

는 가장 현명한 방법을 만들기 내의 자신의 세트의 dicts 지만 하나 메모리에서 시간에,페이징에서 그들을 어떤 효율적인 방식으로?

도움이 되었습니까?

해결책

시 디스크에 있는 일반적으로 해결된 Berkeley DB 또는 이와 유사한 몇 가지 옵션에 나와 있는 Python 데이터는 지속성을 설명서.당신 앞에 그것은에 캐시 메모리,하지만 나는에 대해 테스트는 성능을 처음;운영 체제 캐싱하는 장소에 그것이 나오는 경우가 있습니다에 대한 동일합니다.

다른 팁

는 제 3 자 밀어 모듈은 또한 가치를 보장해드리고 있습니다.그것은 매우 비슷한 보류하는 간단하 dict-과 같은 개체는,그러나 그것을 저장할 수 있는 다양한 백엔드(와 같은 파일 SVN,and S3),제공하는 선택적인 압축,그리고 심지어다면.그것은 매우 편리 모듈

from shove import Shove

mem_store = Shove()
file_store = Shove('file://mystore')

file_store['key'] = value

마지막 시간에 직면한 문제는 다음과 같이,내가 다시 썼을 사용하 SQLite 보다는 오히려 dict,및 대량의 성능을 증가합니다.는 성능 향상에 적어도 부분적으로의 계정에 데이터베이스의 인덱싱 기능을 사용하는에 따라 알고리즘,만,느린 ftp 를 방.

얇은 래퍼는 SQLite 에서 쿼리 __getitem____setitem__ 지 코드를 작성합니다.

보류 모듈 할 수 있습니다;어떤 속도,그것은 간단해야를 시험합니다.는 대신:

self.lengths = {}

마:

import shelve
self.lengths = shelve.open('lengths.shelf')

니 그 키를 선반 문자열이어야 합,그래서 당신은 당신을 바꿔야

self.lengths[indx]

self.lengths[str(indx)]

(나는 가정은 정수로 당신의 코멘트를 찰스 Duffy 의 게시물)

없 캐싱 내장 메모리,하지만 운영 체제 할 수있는 당신을 위해 어쨌든.

[실제로는:당신이 통과 할 수 있습니 인자'writeback=True'를 창조이다.의 의도를 이은 것을 확인 저장하는 목록 및 다른 변경 가능한 것에 선반가 제대로 작동합니다.하지만 부작용은 전체 사전에 캐시 메모리에 있습니다.이 때문에 문제가 발생한,그것은 아마도 좋은 생각이 아닙:-)]

작은 생각의 비트는 것 같이 당신을 얻을 수 있었다 보류하 모듈 무엇을 원하다.

내가 읽기 당신이 생각하 보류할이 너무 느리고 당신이 시도하는 해킹을 자신의 문을 사용하여 sqlite.

다이 너무:

http://sebsauvage.net/python/snyppets/index.html#dbdict

그것은 보인다 매우 효율적인(과 sebsauvage 은 매우 좋은 coder).어쩌면 당신이 그것을 줄 수 있는 보십시오.

에 대한 답변을 읽고 이 질문에서 GvR;) 분류 백만 32 비트에 있는 정수 2MB RAM 을 사용하는 파이썬

지고 있어야 하나 이상의 항목에 시간이 있다면 어떤 휴리스틱하는 알고있는 가능성이 가장 높은 항목을 검색한 다음,그리고 잊지 않는 인덱스는 다음과 같 샤 언급하고있다.

나는 그것을 시도하지 않았지만 아직 햄스터 DB 약속하고는 파이썬 인터페이스입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top