Zope 객체 데이터베이스

Zope Object Database
Zope 객체 데이터베이스
개발자조페 재단
안정된 릴리스
5.6.0[1] / 2020년 6월 11일, 23개월 전(2020-06-11)
저장소github.com/zopefoundation/ZODB
기입처파이썬
운영 체제크로스 플랫폼
유형오브젝트 데이터베이스
면허증.Zope 퍼블릭 라이선스
웹 사이트www.zodb.org

ZOPE Object Database(ZODB)는 Python 개체를 투명하고 지속적으로 저장하기 위한 객체 지향 데이터베이스입니다.Zope응용 프로그램 서버의 일부로 포함되지만 Zope와 독립적으로 사용할 수도 있습니다.

ZODB의 기능에는 트랜잭션, 이력/언도, 투과적으로 플러그 가능한 스토리지, 내장 캐싱, 다중 버전 동시 제어(MVCC), 네트워크 전체의 확장성(사용 방법)이 포함됩니다.ZEO)

역사

  • 90년대 후반에 Zope Corporation의 Jim Fulton이 만들었습니다.
  • Principia 개발 중 단순한 POS(Persistent Object System)로 시작(나중에 Zope가 됨)
  • ZODB 3은 아키텍처의 대폭적인 변경이 이루어졌을 때 이름이 변경되었습니다.
  • ZODB 4는 100% Python을 사용하여 전체 ZODB 3 패키지를 재실장하는 짧은 프로젝트였습니다.

실행

기본

ZODB는 Python의 기본 제공 개체 지속성(피클) 확장 버전을 사용하여 Python 개체를 저장합니다.ZODB 데이터베이스에는 단일 루트 오브젝트(일반적으로 사전)가 있으며, 이 루트 오브젝트는 데이터베이스에 의해 직접 액세스 가능한 유일한 오브젝트입니다.데이터베이스에 저장된 다른 모든 개체는 루트 개체를 통해 연결됩니다.데이터베이스에 저장된 객체가 참조하는 객체도 자동으로 데이터베이스에 저장됩니다.

ZODB는 MVCC를 사용한 동시 트랜잭션을 지원하며 오브젝트 단위로 오브젝트 변경을 추적합니다.변경된 개체만 커밋됩니다.기본적으로 트랜잭션은 비파괴적이며 되돌릴 수 있습니다.

예를 들어, 세 가지 클래스를 사용하여 설명하는 차량이 있다고 가정합니다.Car, Wheel그리고.ScrewPython에서는 다음과 같이 나타낼 수 있습니다.

학급 : [...] 학급 바퀴: [...] 학급 나사: [...]  마이카 = () 마이카.바퀴 1 = 바퀴() 마이카.바퀴 2 = 바퀴() 위해서 바퀴  (마이카.바퀴 1, 마이카.바퀴 2):     바퀴.나사 = [나사(), 나사()] 

변수 mycar가 지속성의 근원인 경우:

조드[마이카] = 마이카 

이렇게 하면 모든 객체 인스턴스(차량, 휠, 나사 등)가 저장소로 저장되며 나중에 가져올 수 있습니다.다른 프로그램이 mycar 객체를 통해 데이터베이스에 연결할 경우 다음을 수행합니다.

 = 조드[마이카] 

그리고 모든 오브젝트, 차 안에 있는 차에 대한 포인터를 가져옵니다.car변수.이후 어느 단계에서 이 오브젝트는 다음과 같은 Python 코드로 변경할 수 있습니다.

.바퀴 3 = 바퀴() .바퀴 3.나사 = [나사()] 

데이터 변경을 반영하도록 스토리지가 변경됩니다(커밋이 주문된 후).

Python이나 ZODB에는 데이터 구조의 선언이 없기 때문에 기존 오브젝트에 새로운 필드를 자유롭게 추가할 수 있습니다.

저장 단위

지속성을 유지하려면 Python Car 클래스가 지속성에서 파생되어야 합니다.영속 클래스 - 이 클래스에는 내부 객체 ID, 객체의 상태 등 영속 머신이 동작하는 데 필요한 데이터가 모두 포함되어 있지만 영속성의 경계도 정의되어 있습니다.영속 클래스가 영속적인 클래스에서 파생된 모든 객체는 스토리지의 원자 단위입니다(개체 전체가 에 복사됩니다).저장)을 수행합니다.

위의 예에서는 다음과 같습니다.CarPersistent에서 파생된 유일한 클래스입니다.wheel3차량에 추가되면 모든 객체가 스토리지에 기록되어야 합니다.반대로, 만약Wheel또, Persistent에서 유래합니다.carzz.wheel3 = Wheel새로운 레코드가 스토리지에 기록되고 새로운 값이 저장됩니다.Car단, 기존의Wheel유지되고 있습니다.또한 새로운 기록도Car이미 존재하는 것을 가리키다Wheel저장고에 기록하십시오.

ZODB 기계는 포인터 그래프를 통해 수정을 추적하지 않습니다.위의 예에서는carzz.wheel3 = something는 ZODB 머신에 의해 자동으로 추적되는 수정입니다.carzz(영구적) 클래스입니다.Car. ZODB 기계에서는 레코드를 로 표시하여 이 작업을 수행합니다.단, 리스트가 있는 경우 리스트 내의 변경은 ZODB 머신에 의해 인식되지 않으며 프로그래머는 수동으로 추가함으로써 도와야 합니다.carzz._p_changed = 1레코드가 실제로 변경되었음을 ZODB에 통지합니다.따라서 프로그래머는 영속기계의 작동에 대해 어느 정도 알고 있어야 한다.

원자성

저장 단위(즉, 클래스가 지속성에서 파생된 개체)도 원자성 단위입니다.위의 예에서는 다음과 같습니다.Cars유일한 영속 클래스이며 스레드는 휠을 수정합니다.Car통지할 필요가 있습니다).또, 다른 스레드가 다른 스레드를 변경합니다.Wheel두 번째 커밋은 실패합니다.한다면Wheel또한 지속성이 있습니다.Wheels독립적으로 두개의 다른 거래에서 두개의 다른 스레드에 의해 수정될 수 있다.

클래스의 지속성

클래스는 storage—is이 디스크에 각각의 기록으로 클래스의"정규화된"이름의 한 종류를 쓴로 특정한 개체의 클래스가 persistence—writing.파이썬에서는 클래스의 이름 디렉터리의 계층 구조에서 클래스가 상주하는 소스 파일을 포함한다.A결과 개체 유지의 소스 파일 이동할 수 없다.그렇다면, 그 ZODB 기계가 저장에서 검색하는 개체의 클래스의 위치를 알아내기 위해 부러진 상태 개체로 발생하는 수가 없다.

ZEO

여러 클라이언트 프로세스 단일 ZEO 서버에 개체를 유지하도록 하Zope 기업 개체는(ZEO)는 ZODB 저장의 구현입니다.이 투명하게 스케일링을 허용한다.

플러그형 스토리지

  • 네트워크 스토리지(ZEO Time)-과 동시에 지속적인 인스턴스를 저장한 다양한 파이톤 프로세스 부하할 수 있습니다.
  • 파일 저장소-단일 파이톤 과정 디스크의 파일에 얘기할 수 있도록 합니다.
  • relstorage - 지속성 백업스토어를 RDBMS로 합니다.
  • 디렉토리 스토리지 - 각 영속 데이터는 파일 시스템에 개별 파일로 저장됩니다.서브버전의 FSFS와 유사합니다.
  • 데모 스토리지 - 영구 저장소의 메모리 내 백엔드입니다.
  • BDBS 스토리지 - Berkeley DB 백엔드를 사용합니다.이제 버림받았다.

페일오버 테크놀로지

  • Zope Replication Services(ZRS) - 단일 장애 지점을 제거하여 쓰기에 대한 핫 백업을 제공하고 읽기에 대한 로드 밸런싱을 제공하는 상용 애드온(2013년 5월 이후 오픈 소스)입니다.
  • zeoraid - 일련의 네트워크 서버에 개체 저장 및 복구를 배포하는 프록시 네트워크 서버를 제공하는 오픈 소스 솔루션입니다.
  • relstorage - RDBMS 테크놀로지가 사용되고 있기 때문에 ZEO 서버의 필요성이 없어집니다.
  • NEO - 분산형(내결함성, 로드밸런싱) 스토리지 구현.

레퍼런스

  1. ^ "Releases · zopefoundation/ZODB". GitHub.

외부 링크