Độ bền dữ liệu - ZODB

ZODB (Zope object Database) là cơ sở dữ liệu để lưu trữ các đối tượng Python. Nó tuân thủ ACID - tính năng không được tìm thấy trong cơ sở dữ liệu NOSQL. ZODB cũng là mã nguồn mở, có thể mở rộng theo chiều ngang và không có lược đồ, giống như nhiều cơ sở dữ liệu NoSQL. Tuy nhiên, nó không được phân phối và không dễ dàng sao chép. Nó cung cấp cơ chế bền bỉ cho các đối tượng Python. Nó là một phần của máy chủ Ứng dụng Zope, nhưng cũng có thể được sử dụng độc lập.

ZODB được tạo ra bởi Jim Fulton của Zope Corporation. Nó bắt đầu như một Hệ thống đối tượng liên tục đơn giản. Phiên bản hiện tại của nó là 5.5.0 và được viết hoàn toàn bằng Python. bằng cách sử dụng phiên bản mở rộng của tính kiên trì đối tượng tích hợp sẵn của Python (pickle).

Một số tính năng chính của ZODB là:

  • transactions
  • history/undo
  • bộ nhớ có thể cắm được trong suốt
  • bộ nhớ đệm tích hợp
  • kiểm soát đồng thời đa vũ trụ (MVCC)
  • khả năng mở rộng trên mạng

ZODB là một hierarchicalcơ sở dữ liệu. Có một đối tượng gốc, được khởi tạo khi một cơ sở dữ liệu được tạo. Đối tượng gốc được sử dụng giống như từ điển Python và nó có thể chứa các đối tượng khác (có thể giống như từ điển). Để lưu trữ một đối tượng trong cơ sở dữ liệu, chỉ cần gán nó cho một khóa mới bên trong vùng chứa là đủ.

ZODB hữu ích cho các ứng dụng mà dữ liệu được phân cấp và có khả năng đọc nhiều hơn ghi. ZODB là một phần mở rộng của đối tượng dưa chua. Đó là lý do tại sao nó chỉ có thể được xử lý thông qua tập lệnh Python.

Để cài đặt phiên bản mới nhất của ZODB, hãy sử dụng tiện ích pip -

pip install zodb

Các phần phụ thuộc sau cũng được cài đặt:

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

ZODB cung cấp các tùy chọn lưu trữ sau:

Lưu trữ tập tin

Đây là mặc định. Mọi thứ được lưu trữ trong một tệp Data.fs lớn, về cơ bản là một nhật ký giao dịch.

DirectoryStorage

Điều này lưu trữ một tệp cho mỗi bản sửa đổi đối tượng. Trong trường hợp này, nó không yêu cầu Data.fs.index phải được xây dựng lại khi tắt máy không sạch.

RelStorage

Điều này lưu trữ dưa chua trong một cơ sở dữ liệu quan hệ. PostgreSQL, MySQL và Oracle được hỗ trợ.

Để tạo cơ sở dữ liệu ZODB, chúng ta cần một bộ nhớ, một cơ sở dữ liệu và cuối cùng là một kết nối.

Bước đầu tiên là có đối tượng lưu trữ.

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

Lớp DB sử dụng đối tượng lưu trữ này để lấy đối tượng cơ sở dữ liệu.

db = ZODB.DB(storage)

Truyền Không có cho phương thức khởi tạo DB để tạo cơ sở dữ liệu trong bộ nhớ.

Db=ZODB.DB(None)

Cuối cùng, chúng tôi thiết lập kết nối với cơ sở dữ liệu.

conn=db.open()

Đối tượng kết nối sau đó cung cấp cho bạn quyền truy cập vào 'gốc' của cơ sở dữ liệu bằng phương thức 'root ()'. Đối tượng 'gốc' là từ điển chứa tất cả các đối tượng liên tục của bạn.

root = conn.root()

Ví dụ, chúng tôi thêm một danh sách sinh viên vào đối tượng gốc như sau:

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

Thay đổi này không được lưu vĩnh viễn trong cơ sở dữ liệu cho đến khi chúng tôi thực hiện giao dịch.

import transaction
transaction.commit()

Để lưu trữ đối tượng của một lớp do người dùng xác định, lớp đó phải được kế thừa từ lớp cha dai dẳng.Persiste.

Ưu điểm của Phân lớp con

Lớp con Lớp bền vững có những ưu điểm như sau:

  • Cơ sở dữ liệu sẽ tự động theo dõi các thay đổi đối tượng được thực hiện bằng cách thiết lập các thuộc tính.

  • Dữ liệu sẽ được lưu trong bản ghi cơ sở dữ liệu của chính nó.

  • Bạn có thể lưu dữ liệu không thuộc lớp con Kiên trì, nhưng nó sẽ được lưu trữ trong bản ghi cơ sở dữ liệu của bất kỳ đối tượng liên tục nào tham chiếu đến nó. Các đối tượng không liên tục được sở hữu bởi đối tượng liên tục có chứa của chúng và nếu nhiều đối tượng liên tục tham chiếu đến cùng một đối tượng không liên tục, chúng sẽ nhận được các bản sao của riêng chúng.

Hãy sử dụng xác định một lớp con của lớp sinh viên Lớp bền vững dưới dạng -

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

Để thêm đối tượng của lớp này, trước tiên chúng ta hãy thiết lập kết nối như mô tả ở trên.

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

Khai báo đối tượng một phần thêm vào root và sau đó thực hiện giao dịch

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

Danh sách tất cả các đối tượng được thêm vào root có thể được truy xuất như một đối tượng dạng xem với sự trợ giúp của phương thức items () vì đối tượng gốc tương tự như được xây dựng trong từ điển.

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

Để tìm nạp thuộc tính của đối tượng cụ thể từ gốc,

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

Đối tượng có thể được cập nhật dễ dàng. Vì ZODB API là một gói Python thuần túy nên nó không yêu cầu sử dụng bất kỳ ngôn ngữ kiểu SQL bên ngoài nào.

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

Cơ sở dữ liệu sẽ được cập nhật ngay lập tức. Lưu ý rằng lớp giao dịch cũng định nghĩa hàm abort () tương tự như điều khiển giao dịch rollback () trong SQL.