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 .
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] ).
Jotkut ZODB:n [5] [6] ominaisuudet :
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ä .
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] .
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 ] .
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.fsToiseksi 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 tapahtumaPysyvä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 ) : passTä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 tiedostoPython Software Catalogin ( PyPI ) mukaan on olemassa muita ZODB-varastoja erikoistuneempia tehtäviä varten.
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 .
Tietokannan hallintajärjestelmät (DBMS) | |
---|---|
Asiakas-palvelin | |
Moottorit | |
Tiedosto palvelin |
Tietokanta | |
---|---|
Käsitteet |
|
Objektit |
|
Avaimet | |
SQL | |
Komponentit |