2012-06-13 3 views
3

저는 파이썬을 처음 접했고 3 개월 전부터 학습 유형, 기능 및 알고리즘을 학습 해 왔습니다. 이제 GAE 프레임 워크로 웹 앱 개발을 실습하기 시작했습니다.파이썬 : 모든 앱에서 액세스 할 수있는 사전을 가지고있는 방법

목표 : 웹 응용 프로그램의 모든 .py 파일에서 두 번 이상 저장하지 않거나 다른 사람이 응용 프로그램의 URL을 방문 할 때마다 다시 만들지 않고도 매우 큰 사전을 사용할 수 있습니다.

메모리에있을 때와 같이 속도가 향상되기를 기대하면서 간단한 DB 테이블을 사전에 렌더링하려고합니다.

은 또한 I 메모리 임마에서 작성에 기획하고 - 트라이

나는, 나는 그것이 한 번에 메모리에 저장하려면이 사전 페이지가 호출 될 때마다 생성되지 않게하려면,이 보관하고 사용 및 모든 세션에 의해 액세스 및 가능한 경우 수정.

내가 어떻게 이것을 달성 할 수 있습니까? 메모리 DB 에서처럼 간단하지만 사실 파이썬 사전처럼?

감사합니다.

답변

0

나는 이것에 찌를 것이고 앞으로 표준 파이썬 shelve 모듈을 넣을 것이다. 이것은 dbm 파일이 뒷받침하는 간단한 영속 사전을 제공합니다.

특히 동시성과 관련된 몇 가지주의 사항이 있습니다. 쓰기 되돌림을 사용하는 경우 캐싱을 제공하지만 다시 메모리 소비에 대한 우려가있을 수 있습니다. 한 가지 다른 제한 사항은 키가 문자열이어야한다는 것입니다.

여전히 가치있을 것입니다. "pure Python hack"에 대한 설명을 확실히 수행합니다.

간단한 예 :

import shelve 

d = shelve.open('my_shelf') 
for i in range(100000): 
    d[str(i)] = 'Item %s' % i 
d.close() 
d = shelve.open('my_shelf') 
>>> d['50000'] 
'Item 50000' 
+1

App Engine의 파일 시스템에 쓸 수 없으므로 작동하지 않습니다. – geoffspear

+0

안녕하세요. 감사합니다. 이것은 GAE에 적합하지 않지만 (아마도 memcache 또는 redis로 갈 것입니다.) 제가 궁금해 한 것입니다, 나는 믿습니다! 방금 선반의 문서를 읽었습니다. 문자열이 아닌 객체를 저장하고 싶다면 문자열 만 사용하는 dbm이 아니라면 어떤 유형의 파일을 사용해야합니까? – Phil

+0

개체를 저장할 수 있습니다. 문자열 일 필요가있는 것은 키입니다. 내부 선반에는 절인 개체가 저장되지만 걱정할 필요가 없습니다. – mhawke

-2

이것은 불가능합니다 (외부 서비스 없음). DB는 하나의 요청보다 긴 데이터를 저장하기 위해 만들어졌습니다. 당신이 할 수있는 일은 ""사용자 세션에서 사전에 안전하지만, 나는 그것을 권장하지 않습니다. 수백만 개의 항목이 없으면 모든 DB가 sqlite조차 충분히 빠릅니다.

+1

요청을 들보 다 오래 남았습니다 메모리에 뭔가를 유지할 수있다, 당신은 왜 그 사건이 아니에요 주장 것인가? –

+0

그렇지 않습니다. 심각한 웹 서버에서는 스레드를 중지하고 새 요청에서 새 스레드를 시작할 수 없습니다. – dav1d

+0

그것은 : 다른 포트에서 실행중인'memcached' 또는 다른 서비스를 생각하십시오. 단순히 이러한 서비스에 액세스 할 수 있으며 대신 데이터를 메모리에 보관합니다. –

7

memcache을 사용하십시오. pickcled dict을 memcache에 저장할 수 있지만, 키/값을 memcache에 직접 저장할 수도 있습니다. 아직 memcache에없는 데이터 저장소의 값로드를 보장하는 래퍼 클래스를 작성합니다.

더 좋게도 012c을 사용하면 memcache의 값이 자동으로 캐시됩니다. 이 방법으로 데이터 저장소에서 값을 쿼리하면 ndb가 자동으로 값을 메모리에 캐시합니다 (여러 요청에서).

+0

+1 : 그러나 끈기는 어떨까요? 그 OP _kind of_ 가능성을 암시로 – mhawke

+0

안녕하세요! 귀하의 의견에 진심으로 감사드립니다. 그러나 나는 그것이 원하지 않는 GAE에 대한 나의 lockdown을 의미 할 것이지만 ndb를 보았다. 지금은 Python에 대한 더 나은 지식을 얻기 위해 연습용으로 사용하고 있습니다. 나는 또한 redis와 memcache를 살펴 보았고, 그 중 하나가 해결책이 될 것처럼 보이지만 여기서 순수 파이썬 핵을 선호한다. – Phil

+0

외부 서비스가없는 Pure Python은 불가능합니다 ... – dav1d

관련 문제