zodb, the zope object database (may 2003)
DESCRIPTION
A presentation on the Zope Obect Database, made to the Bangalore LUG in May 2003. ZODB was an early entrant to what is called NoSQL these days.TRANSCRIPT
An introduction to the open source object database, by
Kiran Jonnalagadda <[email protected]>http://jace.seacrow.com/
ZODBThe Zope Object Database
Where relational databases are unwieldy
The object database methodology
A brief introduction to Python
Mechanics of ZODB
Limitations
Resources
Agenda
Relational Database Records
Field Record 1 Record 2 ...
First Name Atul Kiran ...
Last Name Chitnis Jonnalagadda ...
Age 41 24 ...
Phone No. 344 0397 658 2921 ...
Exte
nsib
le
Individual Record Is Not Extensible
Issues with Relational DBs
Can’t store multiple values in a single field
Can’t add extra fields to individual records
Solved by adding extra relational tables
With complex data, this gets unmanageable
Developer time is wasted writing a database interaction layer
Object Hierarchy
Address BookDatabase
KiranJonnalagadda
Atul Chitnis
...
...
First Name
Last Name
Age
Phone Number
...
...
An object oriented database stores objects instead of database records
Objects contain variables (data) and methods to act on these variables; may be inherited
Objects are usually organised hierarchically
Most object databases are bound to a specific language because each language implements OOP differently
Object Concepts
High performance
Transparent Operation and Caching
Transactional: Unlimited Undo
Multi-threaded
Storage plugins
Needs Python
Introducing ZODB
Python is a dynamic typed and a strong typed language
Python is dynamic: everything can be modified at run-time. Class members, base classes, whatever
Why Python?
What Dynamic Means
Variables Are: Dynamic Typed Static Typed
Strong Typed Python C, C++, Java
Weak Typed Perl, PHP, JS,Shell Script *
Not a relational database
No SQL support
No security model
No query interface:
Objects must be accessed via container
A separate search engine is available
What ZODB is Not
ZODB: The Mechanics
All classes must be derived from the “Persistent” base class provided by ZODB
At the start of your program, open a ZODB connection
Commit the transaction periodically
That is all!
Code need not be ZODB aware
Really Simple Usage
Example Code
# Necessary importsfrom ZODB import FileStorage, DBfrom Persistence import Persistent
# Connect to a databasestorage = FileStorage.FileStorage('/tmp/test-filestorage.fs')db = DB(storage)conn = db.open()
# Get the root of the databasedbroot = conn.root()
# Defining user classesclass UserDataClass(Persistent): pass
# Commit or abort after making a changeget_transaction().commit()get_transaction().abort()
ZEO is Zope Enterprise Objects
One ZEO serves multiple ZODB clients
Databases can be mounted on each other, just like file systems
No replicated storage yet
Remote Storage: ZEO
FileStorage (standard)The entire database is stored in a single file
DirectoryStorageEach object is stored as a separate file
BerkeleyDB StorageThe database is stored in BerkeleyDB
ClientStorageDatabase is stored in a remote ZEO database
Available ZODB Storages
Only available via Python
Transparency is sometimes undesirable
Cannot detect changes in objects not derived from the Persistent base class, like a list or dictionary
Programmer has to flag such objects as dirty
ZEO is optimised for heavy reads, not writes
Limitations
ZODB Product Page:http://zope.org/Products/StandaloneZODB
ZEO Product Page:http://zope.org/Products/ZEO/
An introduction to ZODB and ZEO:http://www.amk.ca/zodb/zodb-zeo.html
The Indian Zope and Python User Group:http://groups.yahoo.com/group/izpug
Resources
This presentation is available online at:http://jace.seacrow.com/tech/zope/blug-zodb
Thank You!