Veri Sürekliliği - ZODB

ZODB (Zope object Database) Python nesnelerini depolamak için kullanılan veritabanıdır. ACID uyumludur - özellik NOSQL veritabanlarında bulunmaz. ZODB ayrıca birçok NoSQL veritabanı gibi açık kaynaklıdır, yatay olarak ölçeklenebilir ve şemasızdır. Ancak, dağıtılmaz ve kolay bir çoğaltma sunmaz. Python nesneleri için kalıcılık mekanizması sağlar. Zope Uygulama sunucusunun bir parçasıdır, ancak bağımsız olarak da kullanılabilir.

ZODB, Zope Corporation'dan Jim Fulton tarafından yaratılmıştır. Basit Kalıcı Nesne Sistemi olarak başladı. Mevcut sürümü 5.5.0'dır ve tamamen Python ile yazılmıştır. Python'un yerleşik nesne kalıcılığının (turşu) genişletilmiş bir sürümünü kullanarak.

ZODB'nin temel özelliklerinden bazıları şunlardır:

  • transactions
  • history/undo
  • şeffaf takılabilir depolama
  • yerleşik önbelleğe alma
  • multiversion eşzamanlılık kontrolü (MVCC)
  • bir ağda ölçeklenebilirlik

ZODB bir hierarchicalveri tabanı. Bir veritabanı oluşturulduğunda başlatılan bir kök nesne var. Kök nesne bir Python sözlüğü gibi kullanılır ve başka nesneler de içerebilir (bunlar kendileri sözlük gibi olabilir). Bir nesneyi veritabanında depolamak için, onu konteynerinin içindeki yeni bir anahtara atamak yeterlidir.

ZODB, verilerin hiyerarşik olduğu ve yazma sayısından daha fazla okunma olasılığı bulunan uygulamalar için kullanışlıdır. ZODB, turşu nesnesinin bir uzantısıdır. Bu yüzden sadece Python betiği ile işlenebilir.

ZODB'nin en son sürümünü yüklemek için pip yardımcı programını kullanalım -

pip install zodb

Aşağıdaki bağımlılıklar da yüklenir -

  • BTrees==4.6.1
  • cffi==1.13.2
  • persistent==4.5.1
  • pycparser==2.19
  • six==1.13.0
  • transaction==2.4.0

ZODB, aşağıdaki depolama seçeneklerini sunar -

FileStorage

Bu varsayılandır. Her şey tek bir büyük Data.fs dosyasında saklanır, ki bu aslında bir işlem günlüğüdür.

DirectoryStorage

Bu, nesne revizyonu başına bir dosya saklar. Bu durumda, Data.fs.index'in temiz olmayan bir kapatma durumunda yeniden oluşturulmasını gerektirmez.

RelStorage

Bu turşuları ilişkisel bir veritabanında depolar. PostgreSQL, MySQL ve Oracle desteklenmektedir.

ZODB veritabanı oluşturmak için bir depolamaya, bir veritabanına ve son olarak bir bağlantıya ihtiyacımız var.

İlk adım, depolama nesnesine sahip olmaktır.

import ZODB, ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('mydata.fs')

DB sınıfı, veritabanı nesnesini elde etmek için bu depolama nesnesini kullanır.

db = ZODB.DB(storage)

Bellek içi veritabanı oluşturmak için Yok'u DB yapıcısına geçirin.

Db=ZODB.DB(None)

Son olarak veritabanı ile bağlantı kuruyoruz.

conn=db.open()

Bağlantı nesnesi daha sonra veritabanının 'köküne' 'root ()' yöntemiyle erişmenizi sağlar. 'Kök' nesnesi, tüm kalıcı nesnelerinizi tutan sözlüktür.

root = conn.root()

Örneğin, kök nesneye aşağıdaki gibi bir öğrenci listesi ekliyoruz -

root['students'] = ['Mary', 'Maya', 'Meet']

İşlemi gerçekleştirene kadar bu değişiklik veritabanına kalıcı olarak kaydedilmez.

import transaction
transaction.commit()

Kullanıcı tanımlı bir sınıfın nesnesini depolamak için, sınıf kalıcı.Persistent üst sınıftan miras alınmalıdır.

Alt Sınıflandırmanın Avantajları

Alt sınıflandırma Persistent sınıfının avantajları aşağıdaki gibidir:

  • Veritabanı, öznitelikleri ayarlayarak yapılan nesne değişikliklerini otomatik olarak izleyecektir.

  • Veriler, kendi veritabanı kaydına kaydedilecektir.

  • Persistent alt sınıfı olmayan verileri kaydedebilirsiniz, ancak kalıcı nesnenin kendisine başvurduğu her şeyin veritabanı kaydında saklanacaktır. Kalıcı olmayan nesneler, içerdikleri kalıcı nesneye aittir ve birden fazla kalıcı nesne aynı kalıcı olmayan alt nesneye atıfta bulunursa, kendi kopyalarını alırlar.

Kalıcı sınıfın altında olduğu gibi bir öğrenci sınıfını tanımlayalım:

import persistent
   class student(persistent.Persistent):
   def __init__(self, name):
      self.name = name
   def __repr__(self):
      return str(self.name)

Bu sınıfın nesnesini eklemek için önce bağlantıyı yukarıda anlatıldığı gibi ayarlayalım.

import ZODB, ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('studentdata.fs')
db = ZODB.DB(storage)
conn=db.open()
root = conn.root()

Nesneyi köke ekleme olarak bildirin ve ardından işlemi gerçekleştirin

s1=student("Akash")
root['s1']=s1
import transaction
transaction.commit()
conn.close()

Kök nesnesi yerleşik sözlüğe benzer olduğundan, köke eklenen tüm nesnelerin listesi items () yöntemi yardımıyla bir görünüm nesnesi olarak alınabilir.

print (root.items())
ItemsView({'s1': Akash})

Belirli bir nesnenin özniteliğini kökten getirmek için,

print (root['s1'].name)
Akash

Nesne kolaylıkla güncellenebilir. ZODB API saf bir Python paketi olduğundan, herhangi bir harici SQL türü dil kullanılmasını gerektirmez.

root['s1'].name='Abhishek'
import transaction
transaction.commit()

Veritabanı anında güncellenecektir. İşlem sınıfının, SQL'deki rollback () işlem kontrolüne benzer abort () işlevini de tanımladığını unutmayın.