ZODB

ZODB
Zope Object DataBase
Тип

Объектно-ориентированная база данных

Разработчик

Zope Corporation и соавторы

Написана на

Python

Операционная система

Кроссплатформенное ПО

Последняя версия

3.10.5 (19 ноября 2011 [1])

Лицензия

Zope Public License

Сайт

zodb.org (англ.)

ZODB (англ. Zope Object Database) — объектно-ориентированная база данных (ООБД) для Python-объектов. Входит в поставку сервера приложений Zope, но может использоваться и отдельно от него. Для балансировки нагрузки и кластеризации серверов служит ZEO (от англ. Zope Enterprise Objects). Эта клиент-серверная технология позволяет нескольким Zope-серверам (то есть ZEO-клиентам) разделять единое хранилище данных[2].

ZODB используется в Zope, Plone (построен на Zope), Grok[3], Zenoss[4], ERP5 и некоторых других системах. Например, ZODB и ZEO (без Zope) используются в системе Indico[5] — программном обеспечении для организации симпозиумов, конференций, лекций и т. п., разработанном и используемом ЦЕРНом[6].

Содержание

История

Создана Джимом Фултоном из Zope Corporation в конце 1990-х годов. В начале, в процессе разработки системы Principia (ставшей позднее именоваться Zope) называлась POS (от англ. Persistent Object System — система устойчивых объектов) или BoboPOS[7]. При очередном значительном изменении архитектуры была переименована в ZODB 3. Был также короткоживущий проект ZODB 4 по переписыванию ZODB 3 на «чистом» Python, но он не был завершён.

Свойства

Некоторые свойства ZODB[8][9]:

  • прозрачное длительное хранение объектов Python;
  • транзакции, полная поддержка ACID, включая точки сохранения[10];
  • многоверсионное управление конкурентным доступом (MVCC)[11];
  • история и откат изменений (англ. undo);
  • поддержка больших двоичных объектов (BLOB);
  • масштабируемая архитектура (при использовании ZEO).

Прозрачность

С объектами приложения, использующего ZODB, можно работать как с обычными объектами языка Python, то есть, механизмы хранения почти полностью прозрачны: не требуется специальных методов или интерфейсов для управления данными. Единственным условием для обеспечения устойчивости объектов является наследование от класса Persistent. Для базовых типов языка Python достаточно, чтобы они поддавались «консервированию» (англ. pickle) методами стандартной библиотеки Python.

История и откат изменений

Даже давно выполненная и сохранённая в базе данных транзакция может быть отменена. Более того, ZODB хранит версии для каждого хранимого объекта, что позволяет, не без некоторых ограничений, управлять версиями[12].

Принципы работы

Хранилище ZODB логически представляет из себя ориентированный граф объектов языка Python, корнем которого является словарь Python. Доступ к объектам осуществляется обходом (англ. traverse) по указателям, начиная с корня и заканчивая целевым объектом.

ZODB использует механизм сериализации объектов из стандартной библиотеки Python, так называемое консервирование (англ. "pickling")[13][14].

Примеры

Следующий пример (использована Unix-подобная ОС) иллюстрирует программирование для ZODB[15]. В примере использована конфигурация с ZEO[16]. Для правильной работы примера необходимо установить библиотеку ZODB (скажем, в Ubuntu, это можно сделать командой sudo apt-get install python-zodb).

Во-первых, необходимо запустить ZEO-сервер:

runzeo -a localhost:8008 -f /tmp/Data.fs

Во-вторых, требуется файл конфигурации ZEO-клиента (для простоты, /tmp/zeo.conf), где будет указан адрес сервера:

<zodb>
   <zeoclient>
   server localhost:8008
   </zeoclient>
</zodb>

Наконец, программа на Python записывает в корень объект с именем my_object и значением в виде строки:

 import ZODB.config
 import transaction
 db = ZODB.config.databaseFromURL('/tmp/zeo.conf')
 connection = db.open()           # устанавливаем соединение
 root = connection.root()         # получаем корень
 root['my_object'] = 'My object'  # записываем объект
 transaction.commit()             # окончание транзакции

Сохраняемые объекты могут быть достаточно сложными, главное, чтобы для них работала сериализация.

Пример из документации описывает создание класса устойчивых объектов[17]:

from persistent import Persistent
class User(Persistent):
    pass

В связи с эти примером необходимо заметить, что присваивание атрибутам или их удаление отражается в базе данных. Объект класса, в котором присутствует примесь Persistent[18], является единицей хранения (подробнее см. storage unit (англ.)) и в случае изменений перезаписывается в базе данных как единое целое.

Если объект без примеси Persistent имеет атрибут с изменчивым значением, например, встроенный в Python объект типа список (list), изменения внутри списка не будут замечены без дополнительных усилий.

userobj = User()
root['user'] = userobj        # Это изменение будет записано.
userobj.friends = ['A', 'B']  # Простой (т.е. не Persistent) список.
userobj.friends.append('C')   # Его изменение не отражается в базе
userobj._p_changed = True     # без этой подсказки.

Для распространённых сложных структур данных имеются устойчивые аналоги: PersistentList (для списка), PersistentMapping (для отображения), а также типы данных из пакета BTree (реализация B-дерева)[19].

Иногда возникает необходимость во вре́менных (англ. volatile) атрибутах, которые не требуется (или невозможно) сохранять в базе данных. Атрибуты со специальным префиксом _v_ как раз служат этой цели[20]:

userobj._v_openfile = open('some_file.dat')     # открытый файл

Виды подключаемых хранилищ

  • Файловое хранилище (англ. file storage). Сохраняет объекты на диске. Рассчитано на один процесс.
  • Сетевое хранилище — ZEO. Позволяет многим процессам загружать и хранить объекты одновременно[21].
  • Хранилище RelStorage. Объекты сохраняются в реляционной СУБД[22].
  • Каталогизированное хранилище (англ. directory storage). Каждый объект хранится в отдельном файле файловой системы[23].
  • Демо-хранилище (англ. demo storage). Для хранения объектов дополнительно к базовому хранилищу, которое доступно только для чтения[24].

По данным каталога программного обеспечения для Python (PyPI) имеются и другие ZODB-хранилища, решающие более специализированные задачи.

Примечания

  1. ZODB3 3.10.5
  2. Bernstein, 2002, p. 563
  3. [grok.zope.org/documentation/tutorial/adder-an-adding-machine-sample-application/a-grok-application-and-grok-model/ Grok tutorial]
  4. Zenoss Data Stores
  5. ZEO (из документации по Indico)
  6. Indico
  7. по данным исторической справки в README-файле в поставке исходного кода название было BoboPOS
  8. www.zodb.org
  9. Zope использует объектную базу данных
  10. Zope Foundation ZODB Programming. Архивировано из первоисточника 16 июля 2012.
  11. Multiversion concurrency control (MVCC)
  12. Weitershausen, 2007, pp. 84-85
  13. Bernstein, 2002, p. 401
  14. Патрик О'Брайен (Patrick O'Brien) Управление персистентностью Python. Архивировано из первоисточника 17 июля 2012.
  15. Lutz, 2006, pp. 1218-1219
  16. Введение в ZODB
  17. ZODB Programming
  18. Bernstein, p. 399
  19. ZODB programming guide — Related modules
  20. Bernstein, p. 402
  21. Lutz, 2006, p. 1218
  22. Запись о RelStorage на PyPI
  23. Запись о DirectoryStorage на PyPI
  24. Запись о DemoStorage на PyPI

Ссылки

Литература

  • Mark Lutz. Programming Python, 3rd Edition. — O'Reilly Media, 2006. — 1600 с. — ISBN 978-0-596-00925-0, pp. 1216—1226
  • Michael R. Bernstein, Scott Robertson and Coedit Development Team. Zope Bible. — Hungry Minds, 2002. — ISBN 0764548573, pp. 397—411
  • Philipp Weitershausen. Web Component Development With Zope 3. — Springer, 2007. — ISBN 978-3-540-33807-9



Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "ZODB" в других словарях:

  • ZODB — Zope Object Database Développeur Zope Corporation Écrit en Python (langage) Environnements Multiplate forme …   Wikipédia en Français

  • ZODB — Die Zope Object Database (engl. für „Zope Objekt Datenbank“, auch ZODB) ist eine objektorientierte Datenbank, die vom Zope Webanwendungsserver dazu genutzt wird, Daten persistent zu speichern. Dafür werden Python Objekte direkt in die Datenbank… …   Deutsch Wikipedia

  • ZODB — abbr. ZOPE Object Database …   Dictionary of abbreviations

  • Zope Object Database — Infobox Software name = Zope Object Database caption = collapsible = yes developer = Zope Corporation status = latest release version = latest release date = latest preview version = latest preview date = operating system = Cross platform size =… …   Wikipedia

  • Zope Object Database — Desarrollador Zope Corporation http://www.zodb.org/ Información general Última versión estable 3.10.3 12 de abril de 2011 …   Wikipedia Español

  • Zope — 2 Интерфейс управления Zope в окне веб браузера. Тип Сервер приложений …   Википедия

  • Zope Object Database — Die Zope Object Database (engl. für „Zope Objekt Datenbank“, auch ZODB) ist eine objektorientierte Datenbank, die vom Zope Webanwendungsserver dazu genutzt wird, Daten persistent zu speichern. Dafür werden Python Objekte direkt in die Datenbank… …   Deutsch Wikipedia

  • Comparison of web application frameworks — This is a comparison of notable web application frameworks. Contents 1 General 1.1 Perl 1.2 PHP 1.3 Java 1.4 Python …   Wikipedia

  • Z Object Publishing Environment — Zope (Z Object Publishing Environment) ist ein objektorientierter, in der Programmiersprache Python geschriebener, freier Webanwendungs Server mit offenem Quelltext. Zope stellt eine Plattform für die Realisierung von Webanwendungen dar und… …   Deutsch Wikipedia

  • Сравнение каркасов веб-приложений — Это сравнительная таблица фреймворков веб приложений. Содержание 1 Фреймворки 1.1 ASP.NET 1.2 C++ 1.3 ColdFusion Markup Language (CFML) …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»