2016-11-11 9 views
2

일반적인 사전 형식 (키, 값) 형식의 대용량 데이터 저장에는 Zodb를 사용하고있었습니다. 그러나 나는 다음과 같은 경고 메시지가 도착 ZODB에 저장하는 동안 :ZODB 또는 Python의 대용량 데이터 저장을위한 다른 데이터베이스

C : 연결 \ \ 파이썬 3.5.2.amd64 \ lib 디렉토리의 \ 사이트 - 패키지 \ ZODB를. py : 550 : UserWarning : 저장중인 개체 이 큽니다. (510241658 바이트)

아마도 당신은 얼룩에 저장되어야하는 미디어를 저장하고있을 것입니다.

아마도 PersistentMapping 또는 PersistentList와 같은 확장 가능하지 않은 데이터 구조를 사용하고있을 것입니다.

아마도 데이터가 영구적이지 않은 개체에 저장되어있는 것일 수 있습니다. 이와 같은 경우에는 데이터가 포함 된 영구 개체의 레코드에 데이터가 저장됩니다.

어쨌든이 기록을 저장하는 것은 나쁜 생각 일 수 있습니다. 당신이 주장이 경고를 제거하려면

는 더 큰 크기를 지정합니다 ZODB.DB 생성자 (또는 구성 파일의 큰 레코드 사이즈 옵션)의 large_record_size 옵션을 사용합니다.

warnings.warn (large_object_message의 % (OBJ. 클래스, 렌 (P)))

내가 ZODB에 많은 데이터를 저장할 수있는 방법을 제안하거나 이러한 목적으로

답변

1

큰 데이터를 저장하기 위해 ZODB에서 BLOB 지원을 사용합니다. 로컬 파일 시스템에서 지원할 수없는 일종의 클라우드 저장소에 대한 응용 프로그램 별 요구 사항이 없으면 다른 패턴은입니다.

저장 대상 또는 저장 장치 구성이 어떻게되어 있는지에 대해서는 언급하지 않았지만 올바른 접근 방식 인 BLOB 사용에 대한 불변이라고 생각합니다.

작동 방식 : Blob API는 래퍼 영속 객체 (일반적으로 기본 지속 객체의 속성으로 참조되는)의 OID를 사용하여 객체를 저장합니다. 랩핑 오브젝트의 OID (내부 ZODB 오브젝트 ID)는 구성된 BLOB 저장 영역에서 BLOB 데이터를 찾거나 가져 오는 등의 키로 사용됩니다.

일반적으로 이는 응용 프로그램의 파일 시스템에있는 파일 일 뿐이지 만 데이터베이스 서버의 파일 시스템 (구성에 따라 ZEO 또는 RelStorage 뒤의 RDBMS)에도 저장할 수 있습니다. 일부 데이터베이스 (예 : PostgreSQL 백엔드에서 RelStorage)는 ZODB (RelStorage를 통해)가 오프로드하는 기본 BLOB 저장소 메커니즘을 사용하여 BLOB를 저장할 수 있습니다.

참고 :

  1. https://ziade.org/2007/09/14/to-blob-or-not-to-blob/

  2. https://stackoverflow.com/a/14645205/835961

  3. 유용한 라이브러리 :

    을 수행합니다. z3c.blobfile (ZPL- 라이센스)

    b. plone.namedfile (BSD 라이선스)

+1

@WAS 내가 언급해야 할 것은, 지금하고있는 일은 한꺼번에 불러 와서 스트리밍 할 수없는 대형 피클을 저장하는 것입니다. 쇼 스토퍼 인 HTTP 범위 요청 (점진적 스트리밍)과 같은 경우 대규모 제작 응용 프로그램에서 ZODB를 사용하는 사람들은 BLOB를 사용하고 웹/네트워크 응용 프로그램에서 작동하는 파일 저장소 반복기에 파일 데이터를 스트리밍합니다. 이것은 Zope 2에서 매우 잘 작동하지만, 애플리케이션을 우회하여 BLOB로 바로 가기 위해 프론트 엔드 웹 서버에서 X-Sendfile과 같은 것을 사용하기 위해 애플리케이션이 취할 수있는 몇 가지 접근법이 있습니다. – sdupton

1
위해 다른 라이브러리를 제안 해주십시오

파일 시스템에 객체를 저장하고 일반 데이터베이스를 사용하는 것처럼 zodb에 객체를 추가해야합니다.

+0

자세히 설명해 주시겠습니까? – WAS

+0

이것은 "거의"대답입니다. ZODB에는 BLOB 데이터가 참조 및로드되는 올바른 방법 인 BLOB API가 있습니다. 다른 종류의 "참조"를 파일에 사용하는 것은 가능성이 높습니다. – sdupton