Кіріспе

Zope Object Database (ZODB) – Python объектілерін ашық түрде және тұрақты сақтауға арналған объектіге бағытталған деректер базасы. Ол Zope веб-қосымша серверінің құрамына кіреді, бірақ Zope-тан тәуелсіз де қолданылуы мүмкін. ZODB мүмкіндіктері: транзакциялар, тарих/кері қайтару, ашық түрде қосылатын сақтағыш, ендірілген кэштеу, көп нұсқалы бір мезгілде басқару (MVCC) және желідегі кеңейтімділік (қолдану арқылы).

Негізгі білім

ZODB Python объектілерін Python-ның кіріктірілген объектілерді сақтау механизмінің (pickle) кеңейтілген нұсқасын қолдана отырып сақтайды. ZODB дерекқорының бір түбірлік объектісі болады (әдетте сөздік), және дерекқор осы объектіге ғана тікелей қол жеткізуді қамтамасыз етеді. Дерекқорда сақталған барлық басқа объектілерге түбірлік объекті арқылы жетеді. Дерекқорда сақталған объектілер сілтеме жасайтын объектілер де автоматты түрде дерекқорда сақталады. ZODB MVCC қолданысын пайдалана отырып, бір уақытта жүзеге асырылатын транзакцияларды қолдайды және әрбір объект бойынша өзгерістерді қадағалайды. Тек өзгертілген объектілер ғана тіркеледі. Транзакциялар әдепкі бойынша бұзбалық емес және кері қайтарылуы мүмкін.

Сақтау бірлігі

Тұрақтылықты қамтамасыз ету үшін Python-дағы Car класы тұрақтылықтан (persistence) алынуы керек. Тұрақты сынып – бұл сынып тұрақтылық механизмінің жұмыс істеуі үшін қажетті деректерді, мысалы, ішкі объектінің идентификаторы, объектінің күйі және т.б. сақтайды, сонымен қатар тұрақтылықтың шекарасын былай анықтайды: Persistent класынан алынған әрбір объекті – сақтаудың атомдық бірлігі (көрсеткіштердің графигі арқылы өтетін өзгерістер емес, егер бір сала өзгерсе, бүкіл объект сақтауға көшіріледі). Мысалы, егер Car – Persistent-тен алынған жалғыз сынып болса, wheel3 Car-ға қосылғанда барлық объектілер сақтау құралына жазылуы керек. Керісінше, егер Wheel де Persistent-тен алынса, carzz.wheel3 = Wheel орындалғанда, Car-дың жаңа мәнін сақтау үшін сақтау орнына жаңа жазба жазылады, бірақ бұрынғы Wheel сақталады, ал Car-дың жаңа жазбасы сақтау орнындағы Wheel-дің бұрыннан бар жазбасына сілтеме жасайды. ZODB механизмі көрсеткіштер графигі арқылы өзгерістерді іздемейді. Мысалда, carzz.wheel3 = something өзгерісі ZODB механизмімен автоматты түрде қадағаланады, өйткені carzz (Persistent) Car класына жатады. ZODB механизмі бұл жазбаны «өзгерген» деп белгілейді. Дегенмен, тізім болса, тізімдегі кез келген өзгеріс ZODB механизміне байқаусыз өтеді, сондықтан бағдарламашы carzz.p өзгерді = 1 деп қолмен қосып, ZODB-ге жазбаның шын мәнінде өзгергенін хабарлауы керек. Осылайша, бағдарламашы тұрақтылық механизмінің жұмыс істеу принципін білуі қажет.

Атомдық

Сақтау бірлігі (яғни, Persistent класынан мұраласқан объект) сонымен қатар атомдық бірлік болып табылады. Жоғарыдағы мысалда, егер Cars жалғыз Persistent класы болса, бір жіп дөңгелекті өзгертеді (Car деректемесіне хабарлама жіберу қажет), ал басқа жіп басқа транзакция ішіндегі басқа дөңгелекті өзгертеді, екінші жазу сәтсіз аяқталады. Егер Дөңгелек те Persistent болса, екі дөңгелекті екі түрлі транзакциядағы екі түрлі жіп арқылы тәуелсіз түрде өзгертуге болады.

Сыныптың тұрақтылығы

Сыныптың тұрақтылығы — нақты бір объектінің класын сақтау құрылғысына жазу — кластың әрбір жазбасына «толыққанды» атауын жазу арқылы қамтамасыз етіледі. Python-да кластың атауы, кластың бастапқы коды орналасқан каталогтардың иерархиясын да қамтиды. Осының салдарынан, тұрақты объектінің бастапқы кодының файлын жылжытуға болмайды. Егер жылжытылса, ZODB жүйесі сақтаудан объектіні алған кезде оның класын анықтай алмайды, нәтижесінде бұзылған объекті пайда болады.

ЗEO

Zope Enterprise Objects (ZEO) — бірнеше клиенттік процестерге бір ZEO серверінде объектілерді сақтауға мүмкіндік беретін ZODB сақтау жүйесінің іске асырылуы. Бұл көлденең кеңейтуді қамтамасыз етеді.

Қосылатын қоймалар

Желілік сақтау (ZEO) Бірнеше Python процестерінің тұрақты инстанцияларды бірден жүктеуіне және сақтауына мүмкіндік береді. Файлдарды сақтау Дискідегі файлмен байланысуға бір Python процесін мүмкіндік береді. relstorage Тұрақты сақтау қоймасын RDBMS ретінде пайдалануға мүмкіндік береді. Каталогтық сақтау Әрбір тұрақты дерек файлдық жүйеде жеке файл ретінде сақталады. Subversion-дағы FSFS-ке ұқсас. Демонстрациялық сақтау Тұрақты сақтау үшін жадтағы қосалқы жүйе. BDBStorage – Berkeley DB қосалқы жүйесін пайдаланады. Қазір қолданылмайды.

Ақаулықтарды жою технологиялары

Zope Replication Services (ZRS) Коммерциялық қосымша (2013 жылдың мамыр айынан бастап ашық кодты) бір ғана сәтсіздік нүктесін жояды, жазу операциялары үшін жедел резервтік көшірме ұсынады және оқу операциялары үшін жүктемені бөліп береді. zeoraid Желілік серверлер тізбегі бойынша нысандарды сақтау және қалпына келтіруді бөлісетін прокси желілік серверді ұсынатын ашық кодты шешім. relstorage RDBMS технологиялары қолданылғандықтан, ZEO серверіне қажеттілік туындамайды. NEO Таратылған (қатеге төзімділік, жүктемені теңдестіру) сақтау жүзеге асырылуы.