2014-10-15 4 views
1

거대한 사전을 만들었습니다. 아마도 수 백 기가 바이트 정도 였을 것입니다. 그러한 객체를 저장하는 현명한 방법이 있습니까? 여기bson을 디스크에 쓸 때 메모리 부족 오류가 발생했습니다.

print "Writing to file..." 
       jsontext = bson.dumps(sample_dict) 
       f = open(predump_file, 'wb+') 
       f.write(jsontext) 
       f.close() 

내가 얻을 스택 추적한다 :

Writing to file... 
Traceback (most recent call last): 
    File "Combine.py", line 1331, in <module> 
    jsontext = bson.dumps(sample_dict) 
    File "/mnt/opt/Centos5.8/python-2.7.8/lib/python2.7/site-packages/bson/__init__.py", line 69, in dumps 
    return encode_document(obj, [], generator_func = generator) 
    File "/mnt/opt/Centos5.8/python-2.7.8/lib/python2.7/site-packages/bson/codec.py", line 207, in encode_document 
    encode_value(name, value, buf, traversal_stack, generator_func) 
    File "/mnt/opt/Centos5.8/python-2.7.8/lib/python2.7/site-packages/bson/codec.py", line 177, in encode_value 
    traversal_stack, generator_func)) 
MemoryError: out of memory 

선택 사항 (I는 현재이 생각할 수) :

    을 나는 디스크에 밀어 다음과 같은 루틴을 사용하고 있습니다
  1. 사전은 중첩되어 있으므로 기본적으로 사전을 레이어로 나눕니다.
  2. 첫 번째 키에서 사전을 분할하고 이러한 기본 사전에 다른 색인을 제공하십시오. 그런 다음 N 사전을 독립적으로 저장할 수 있습니다. 이것이 좋은 경우 키 사전을 분리하고 최상위 계층 색인 사전을 생성하는 권장 방법이 있습니다. 나는 각 하위 사전이 변수 여야한다고 생각하고있다. 그래서 우리가 중첩 된 큰 사전을 갖게되면 그것을 N 개의 더 작은 사전으로 나누고 매핑 색인을 맨 위에 놓을 수 있습니다.
  3. 여기 MongoDB는 잠재적 인 솔루션입니까?
+0

사전 콘텐츠를 표시 할 수 있습니까? 중첩 된 사전의 깊이는 얼마입니까? 개인적으로이 작업을 수행하기 위해 데이터베이스를 사용합니다. – Anzel

답변

2

mongo db maximum (bson) 문서 크기는 16MB입니다. 크기보다 큰 데이터는 저장할 수 없습니다. 각 key value을 문서로 저장할 수 있습니다. key 필드를 _id 속성으로 사용할 수 있습니다.

+0

이 제한에 대해 알아두면 좋습니다. – disruptive

0

나는 그것이 당신의 사전의 내용과 나중에 데이터를 검색하는 방법에 달려 있다고 생각합니다. 나는 너라면 두 번째 방법을 택할 것이다.

관련 문제