डेटा की दृढ़ता - ZODB
ZODB (Zope object Database) पायथन वस्तुओं के भंडारण के लिए डेटाबेस है। यह एसीआईडी कंप्लेंट है - यह सुविधा एनओएसक्यूएल डेटाबेस में नहीं मिली है। ZODB भी कई NoSQL डेटाबेस की तरह खुला स्रोत, क्षैतिज रूप से स्केलेबल और स्कीमा-मुक्त है। हालांकि, यह वितरित नहीं है और आसान प्रतिकृति प्रदान नहीं करता है। यह पायथन वस्तुओं के लिए दृढ़ता तंत्र प्रदान करता है। यह ज़ोप एप्लिकेशन सर्वर का एक हिस्सा है, लेकिन इसे स्वतंत्र रूप से भी इस्तेमाल किया जा सकता है।
ZODB को Zope Corporation के जिम फुल्टन ने बनाया था। यह साधारण स्थायी वस्तु प्रणाली के रूप में शुरू हुआ। इसका वर्तमान संस्करण 5.5.0 है और यह पूरी तरह से पायथन में लिखा गया है। पायथन की अंतर्निहित वस्तु दृढ़ता (अचार) के विस्तारित संस्करण का उपयोग करना।
ZODB की कुछ मुख्य विशेषताएं हैं -
- transactions
- history/undo
- पारदर्शी रूप से प्लग करने योग्य भंडारण
- अंतर्निहित कैशिंग
- मल्टीवर्सन कंसीवेंसी कंट्रोल (MVCC)
- एक नेटवर्क में स्केलेबिलिटी
ZODB एक है hierarchicalडेटाबेस। एक रूट ऑब्जेक्ट है, जब एक डेटाबेस बनाया जाता है तो इनिशियलाइज़ किया जाता है। रूट ऑब्जेक्ट को पायथन डिक्शनरी की तरह इस्तेमाल किया जाता है और इसमें अन्य ऑब्जेक्ट्स (जो खुद डिक्शनरी हो सकते हैं) हो सकते हैं। डेटाबेस में किसी ऑब्जेक्ट को स्टोर करने के लिए, यह उसके कंटेनर के अंदर एक नई कुंजी को असाइन करने के लिए पर्याप्त है।
ZODB उन अनुप्रयोगों के लिए उपयोगी है जहां डेटा पदानुक्रमित है और लिखने की तुलना में अधिक रीड होने की संभावना है। ZODB अचार वस्तु का एक विस्तार है। इसलिए इसे पायथन लिपि के माध्यम से ही संसाधित किया जा सकता है।
ZODB के नवीनतम संस्करण को स्थापित करने के लिए पाइप उपयोगिता का उपयोग करें -
pip install zodb
निम्नलिखित निर्भरताएं भी स्थापित हैं -
- BTrees==4.6.1
- cffi==1.13.2
- persistent==4.5.1
- pycparser==2.19
- six==1.13.0
- transaction==2.4.0
ZODB निम्नलिखित भंडारण विकल्प प्रदान करता है -
फ़ाइल भंडारण
यह डिफ़ॉल्ट है। सब कुछ एक बड़े Data.fs फ़ाइल में संग्रहीत किया जाता है, जो अनिवार्य रूप से एक लेनदेन लॉग है।
DirectoryStorage
यह ऑब्जेक्ट प्रति संशोधन के लिए एक फ़ाइल संग्रहीत करता है। इस स्थिति में, यह अशुद्ध शटडाउन पर Data.fs.index को फिर से बनाने की आवश्यकता नहीं है।
RelStorage
यह एक रिलेशनल डेटाबेस में अचार को स्टोर करता है। PostgreSQL, MySQL और Oracle समर्थित हैं।
ZODB डेटाबेस बनाने के लिए हमें एक स्टोरेज, एक डेटाबेस और अंत में एक कनेक्शन की आवश्यकता होती है।
पहला कदम स्टोरेज ऑब्जेक्ट है।
import ZODB, ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('mydata.fs')
DB ऑब्जेक्ट डेटाबेस ऑब्जेक्ट प्राप्त करने के लिए इस संग्रहण ऑब्जेक्ट का उपयोग करता है।
db = ZODB.DB(storage)
इन-मेमोरी डेटाबेस बनाने के लिए DB कंस्ट्रक्टर से कोई भी पास न करें।
Db=ZODB.DB(None)
अंत में, हम डेटाबेस के साथ संबंध स्थापित करते हैं।
conn=db.open()
कनेक्शन ऑब्जेक्ट तब आपको 'रूट' () विधि के साथ डेटाबेस के 'रूट' तक पहुंच देता है। 'रूट' ऑब्जेक्ट वह डिक्शनरी है जो आपकी सभी स्थायी वस्तुओं को रखती है।
root = conn.root()
उदाहरण के लिए, हम छात्रों की सूची को रूट ऑब्जेक्ट में जोड़ते हैं -
root['students'] = ['Mary', 'Maya', 'Meet']
जब तक हम लेनदेन नहीं करते तब तक यह परिवर्तन डेटाबेस में स्थायी रूप से सहेजा नहीं जाता है।
import transaction
transaction.commit()
उपयोगकर्ता परिभाषित वर्ग की वस्तु को संग्रहीत करने के लिए, वर्ग को स्थायी से अलग होना चाहिए। स्थायी माता-पिता वर्ग।
उपवर्ग के लाभ
उपवर्गों के निरंतर वर्ग के अपने फायदे इस प्रकार हैं -
डेटाबेस स्वचालित रूप से विशेषताओं को सेट करके किए गए ऑब्जेक्ट परिवर्तनों को ट्रैक करेगा।
डेटा को अपने स्वयं के डेटाबेस रिकॉर्ड में सहेजा जाएगा।
आप उन डेटा को सेव कर सकते हैं जो पर्सेंटाइल को उप-वर्ग नहीं करते हैं, लेकिन यह डेटाबेस रिकॉर्ड में संग्रहीत किया जाएगा जो भी लगातार ऑब्जेक्ट इसे संदर्भित करता है। गैर-स्थिर वस्तुओं का स्वामित्व उनकी स्थिर वस्तु से होता है और यदि कई लगातार वस्तुएं एक ही गैर-स्थिर सबोबेजेक्ट का उल्लेख करती हैं, तो वे अपनी प्रतियां प्राप्त करेंगे।
निम्नानुसार एक छात्र वर्ग उपवर्गीय कक्षा को परिभाषित करने का उपयोग करें -
import persistent
class student(persistent.Persistent):
def __init__(self, name):
self.name = name
def __repr__(self):
return str(self.name)
इस वर्ग के ऑब्जेक्ट को जोड़ने के लिए, पहले ऊपर दिए गए अनुसार कनेक्शन सेट करें।
import ZODB, ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('studentdata.fs')
db = ZODB.DB(storage)
conn=db.open()
root = conn.root()
एक ऐड को रूट करने की घोषणा करें और फिर लेनदेन करें
s1=student("Akash")
root['s1']=s1
import transaction
transaction.commit()
conn.close()
रूट में जोड़े गए सभी ऑब्जेक्ट्स की सूची को आइटम () विधि की सहायता से व्यू ऑब्जेक्ट के रूप में प्राप्त किया जा सकता है क्योंकि रूट ऑब्जेक्ट डिक्शनरी में बनाया गया है।
print (root.items())
ItemsView({'s1': Akash})
मूल से विशिष्ट वस्तु की विशेषता लाने के लिए,
print (root['s1'].name)
Akash
ऑब्जेक्ट को आसानी से अपडेट किया जा सकता है। चूंकि ZODB API एक शुद्ध पायथन पैकेज है, इसलिए इसे उपयोग करने के लिए किसी बाहरी SQL प्रकार की भाषा की आवश्यकता नहीं होती है।
root['s1'].name='Abhishek'
import transaction
transaction.commit()
डेटाबेस को तुरंत अपडेट किया जाएगा। ध्यान दें कि लेन-देन वर्ग एबॉर्ट () फ़ंक्शन को भी परिभाषित करता है जो एसक्यूएल में रोलबैक () लेनदेन नियंत्रण के समान है।