ZODB

Vakaa versio kirjattiin ulos 23.5.2022 . Malleissa tai malleissa on vahvistamattomia muutoksia .
Zope-objektitietokanta
Tyyppi Olio-tietokanta
Kehittäjä Zope Corporation ja avustajat
Sisään kirjoitettu Python
Käyttöjärjestelmä Monialustainen ohjelmisto
uusin versio

4.2.0 ( 2. kesäkuuta 2015

[1] )
Luettavat tiedostomuodot Zope-vientitiedosto [d] ja ZODB-tiedostojen tallennustila (2.1) [d]
Luodut tiedostomuodot Zope-vientitiedosto [d] ja ZODB-tiedostojen tallennustila (2.1) [d]
Lisenssi Zope Public License
Verkkosivusto zodb.org

ZODB ( englanniksi  Z ope O bject Data b ase ) on oliopohjainen tietokanta (OODB) Python - objekteille. Mukana Zope - sovelluspalvelimen mukana , mutta voidaan käyttää siitä erillään. ZEO : ta ( Zope Enterprise O -objekteja ) käytetään kuormituksen tasapainottamiseen ja palvelinklusterointiin . Tämä asiakas-palvelintekniikka mahdollistaa useiden Zope-palvelimien (eli ZEO-asiakkaiden) jakamisen yhteen tietovarastoon [2] . ZODB:tä käyttävät useat sisällönhallintajärjestelmät , mukaan lukien Plone .  

Historia

Sen loi Jim Fulton Zope Corporationista 1990-luvun lopulla. Alussa, kehitettäessä Principia-järjestelmää (josta tuli myöhemmin Zope ) kutsuttiin POS ( englanninkielisestä  Persistent Object System  - stabiilien objektien järjestelmä) tai BoboPOS [3] . Toisella merkittävällä muutoksella arkkitehtuuri nimettiin uudelleen ZODB3:ksi. 2000-luvun alussa oli myös lyhytaikainen ZODB4-projekti ZODB3:n uudelleenkirjoittamiseksi "puhtaalla" Pythonilla [4] , mutta sitä ei saatu päätökseen (ei pidä sekoittaa vuonna 2012 ilmestyneeseen versioon 4 [1] ).

Ominaisuudet

Jotkut ZODB:n [5] [6] ominaisuudet :

Läpinäkyvyys

ZODB:tä käyttävän sovelluksen objekteja voidaan käsitellä kuten tavallisia Python-objekteja, mikä tarkoittaa, että tallennusmekanismit ovat lähes täysin läpinäkyviä: tietojen hallintaan ei tarvita erityisiä menetelmiä tai rajapintoja. Ainoa objektin pysyvyyden ehto on periminen Persistent. Python-kielen perustyypeille riittää, että ne soveltuvat " suolaukseen " Python-standardikirjaston menetelmillä . 

Historia ja palautus

Jopa tapahtuma, joka on suoritettu ja tallennettu tietokantaan pitkään, voidaan peruuttaa. Lisäksi ZODB ylläpitää versioita jokaiselle tallennetulle objektille, mikä mahdollistaa, ei ilman rajoituksia, versioinnin [9] .

Toimintaperiaatteet

ZODB-varasto on loogisesti Python-objektien suunnattu graafi , jonka juuri on Python- sanakirja . Objekteihin päästään kulkemalla osoittimien avulla alkaen juuresta  ja päättyen kohdeobjektiin.

ZODB käyttää Python-standardikirjaston objektien serialisointimekanismia , niin kutsuttua peittausta [ 10 ] [ 11 ] .  

Esimerkkejä

Seuraava esimerkki (käyttäen Unix-tyyppistä käyttöjärjestelmää ) havainnollistaa ohjelmointia ZODB:lle [12] . Esimerkki käyttää konfiguraatiota ZEO:n kanssa [13] . Jotta esimerkki toimisi oikein, sinun on asennettava ZODB-kirjasto (esimerkiksi Ubuntussa tämä voidaan tehdä komennolla sudo apt-get install python-zodb).

Ensin sinun on käynnistettävä ZEO-palvelin:

runzeo -a localhost:8008 -f /tmp/Data.fs

Toiseksi vaaditaan ZEO-asiakasasetustiedosto (yksinkertaisuuden vuoksi /tmp/zeo.conf), jossa palvelimen osoite määritetään:

<zodb> <zeoclient> serverlocalhost:8008 </zeoclient> </zodb>

Lopuksi Python-ohjelma kirjoittaa juureen objektin, jonka nimi my_objectja arvo on merkkijonona:

import ZODB.config tuontitapahtuma db = ZODB . _ config . tietokantaFromURL ( '/tmp/zeo.conf' ) yhteys = db . open () # muodosta yhteys root = yhteys . root () # get the root root [ 'my_object' ] = 'Oma objekti' # kirjoita tapahtumaobjekti . sitoa () # lopeta tapahtuma

Pysyvät objektit voivat olla melko monimutkaisia, kunhan serialisointi toimii niille.

Esimerkki dokumentaatiosta kuvaa pysyvän objektiluokan [14] luomista :

pysyvästä tuonnista Pysyvä luokka User ( Persistent ) : pass

Tämän esimerkin yhteydessä on huomioitava, että attribuuttien määrittäminen tai poistaminen näkyy tietokannassa. Luokan objekti, jossa on epäpuhtautta Persistent[15] , on tallennusyksikkö (katso tarkemmin tallennusyksikkö  ) ja muutosten sattuessa se ylikirjoitetaan koko tietokannassa.

Jos sekoittamattomalla objektilla Persistenton attribuutti, jolla on muuttuva arvo, kuten Pythonin sisäänrakennettu listaobjekti ( list), muutoksia luettelossa ei havaita ilman lisäponnistuksia.

userobj = Käyttäjä () root [ 'user' ] = userobj # Tämä muutos tallennetaan. userobj . ystävät = [ 'A' , 'B' ] # Yksinkertainen (eli ei Pysyvä) lista. userobj . ystävät . append ( 'C' ) # Sen muutos ei näy perus userobj : ssä . _p_changed = Tosi # ilman tätä vihjettä.

Yleisille monimutkaisille tietorakenteille on olemassa stabiileja analogeja: PersistentList (luetteloa varten), PersistentMapping (näyttöä varten) sekä tietotyypit BTree-paketista ( B-tree- toteutus ) [16] .

Joskus tarvitaan väliaikaisia ​​( eng.  volatile ) attribuutteja, joita ei vaadita (tai mahdotonta) tallentaa tietokantaan. Attribuutit erityisellä etuliitteellä _v_palvelevat tätä tarkoitusta [17] :

userobj . _v_openfile = open ( 'some_file.dat' ) # avoin tiedosto

Kytkettävien tallennusvälineiden tyypit

  • Tiedostojen tallennus ( englanniksi  tiedostojen tallennus ). Tallentaa esineitä levylle. Suunniteltu yhtä prosessia varten.
  • Verkkotallennustila - ZEO. Sallii useiden prosessien ladata ja tallentaa objekteja samanaikaisesti [18] .
  • RelStorage-tallennustila. Objektit tallennetaan relaatiotietokantajärjestelmään [19] .
  • Luetteloitu varastointi ( englanninkielinen  hakemistovarasto ). Jokainen objekti on tallennettu erilliseen tiedostojärjestelmän tiedostoon [20] .
  • Demotallennustila .  _ _ Objektien tallentamiseen alla olevan tallennustilan lisäksi, joka on vain luku -muotoinen [21] .

Python Software Catalogin ( PyPI ) mukaan on olemassa muita ZODB-varastoja erikoistuneempia tehtäviä varten.

Sovellus

ZODB:tä käytetään Zopessa , Plonessa ( rakennettu Zopelle), Grokissa [22] , Zenossissa [23] , ERP5 :ssä , KARL:ssä (Knowledge Management System) [24] ja joissakin muissa järjestelmissä. Esimerkiksi ZODB:tä ja ZEO:ta (ilman Zopea ) käytetään Indico [25]  -järjestelmässä, CERNin [26] kehittämässä ja käyttämässä symposiumien, konferenssien , luentojen jne. järjestämiseen tarkoitetussa ohjelmistossa .

Muistiinpanot

  1. 12 ZODB3 4.2.0 . Käyttöpäivä: 6. tammikuuta 2016. Arkistoitu alkuperäisestä 27. tammikuuta 2016.
  2. Bernstein, 2002 , s. 563.
  3. lähdekoodijakelun README-tiedoston historiallisen viittauksen mukaan nimi oli BoboPOS
  4. ZODB4 . Haettu 6. tammikuuta 2016. Arkistoitu alkuperäisestä 5. maaliskuuta 2016.
  5. www.zodb.org . Haettu 16. heinäkuuta 2012. Arkistoitu alkuperäisestä 8. elokuuta 2012.
  6. Zope käyttää objektitietokantaa . Käyttöpäivä: 17. heinäkuuta 2012. Arkistoitu alkuperäisestä 24. maaliskuuta 2016.
  7. Zope Foundation. ZODB ohjelmointi . Arkistoitu alkuperäisestä 16. heinäkuuta 2012.
  8. Multiversion concurrency control (MVCC) Arkistoitu alkuperäisestä 6. helmikuuta 2012.
  9. Weitershausen, 2007 , s. 84-85.
  10. Bernstein, 2002 , s. 401.
  11. Patrick O'Brien. Pythonin pysyvyyden hallinta . Arkistoitu alkuperäisestä 17. heinäkuuta 2012.
  12. Lutz, 2006 , s. 1218-1219.
  13. Johdatus ZODB:iin . Haettu 17. heinäkuuta 2012. Arkistoitu alkuperäisestä 12. elokuuta 2011.
  14. ZODB-ohjelmointi arkistoitu 9. helmikuuta 2012.
  15. Bernstein, 2002 , s. 399.
  16. ZODB-ohjelmointiopas - Aiheeseen liittyvät moduulit Arkistoitu 28. joulukuuta 2011.
  17. Bernstein, 2002 , s. 402.
  18. Lutz, 2006 , s. 1218.
  19. RelStorage-merkintä PyPI:ssä . Haettu 20. heinäkuuta 2012. Arkistoitu alkuperäisestä 26. marraskuuta 2013.
  20. DirectoryStorage-merkintä PyPI:ssä . Haettu 20. heinäkuuta 2012. Arkistoitu alkuperäisestä 9. maaliskuuta 2016.
  21. DemoStorage-merkintä PyPI:ssä . Haettu 20. heinäkuuta 2012. Arkistoitu alkuperäisestä 8. tammikuuta 2011.
  22. Grok opetusohjelma . Käyttöpäivä: 6. tammikuuta 2016. Arkistoitu alkuperäisestä 9. toukokuuta 2015.
  23. Zenoss Data Stores . Haettu 16. heinäkuuta 2012. Arkistoitu alkuperäisestä 8. elokuuta 2012.
  24. KARL - Tietojesi hallinta . Käyttöpäivä: 6. tammikuuta 2016. Arkistoitu alkuperäisestä 25. joulukuuta 2015.
  25. ZEO Arkistoitu 20. maaliskuuta 2011. (Indicon dokumentaatiosta)
  26. Indico . Haettu 17. heinäkuuta 2012. Arkistoitu alkuperäisestä 10. heinäkuuta 2012.

Kirjallisuus

  • Mark Lutz. Ohjelmointi Python, 3. painos. - O'Reilly Media, 2006. - 1600 s. - s. 1216-1226. - ISBN 978-0-596-00925-0 .
  • Michael R. Bernstein, Scott Robertson ja Coedit Development Team. Zope Raamattu . - Hungry Minds, 2002. - S.  397-411 . — ISBN 0764548573 .
  • Philip Weitershausen. Verkkokomponenttien kehittäminen Zope 3:lla. - Springer, 2007. - ISBN 978-3-540-33807-9 .
  • Carlos de la Guardia. Luku 9. Grok ja ZODB // Grok 1.0 Web Development. - Packt Publishing, 2010. - 308 s. - ISBN 978-1-847197-48-1 .

Linkit