Python object-oriented database
Latest commit e714f51 Apr 17, 2017 @jamadden jamadden committed with jimfulton Make all classes new-style. (#160)
* Make all classes new-style.

On PyPy, it's documented ( that
old-style classes are slow, and classes that derive from both old and
new are especially slow. I checked with the PyPy devs on IRC today and
they confirmed that's still true with the latest PyPy2 releases.

Unfortunately, FileStorage was one such mixed class, as was Connection.

Moving to new-style classes seems to have a positive impact in the
benchmarks. Here's zodbshootout on PyPy2 5.7.1 against a
FileStorage (running in --threads and with 5 reps to be sure we get
warmed up). First, current ZODB:

"Transaction",                fs
"Add 1000 Objects",            31,738
"Update 1000 Objects",         42,444
"Read 1000 Cold Objects",      51,894
"Read 1000 Hot Objects",       53,187
"Read 1000 Steamin' Objects", 835,877

And with this PR:

"Transaction",                fs
"Add 1000 Objects",             35,651
"Update 1000 Objects",          54,906
"Read 1000 Cold Objects",      103,484
"Read 1000 Hot Objects",        84,721
"Read 1000 Steamin' Objects", 2,112,095

The tests that hit the storage extensively are notably faster, as are
steamin and hot, Connection having been a mixed class.

I ran all tests multiple times. The data files were removed between
runs. There's some variation, but the new-style classes always seem

For comparison, here's CPython 2.7.13:

"Transaction",                fs
"Add 1000 Objects",            19,531
"Update 1000 Objects",         16,201
"Read 1000 Cold Objects",      22,111
"Read 1000 Hot Objects",       21,851
"Read 1000 Steamin' Objects", 880,582

Locally I've run the tests under 2.7 and they all passed.


ZODB, a Python object-oriented database

ZODB provides an object-oriented database for Python that provides a high-degree of transparency.

  • no separate language for database operations

  • very little impact on your code to make objects persistent

  • no database mapper that partially hides the database.

    Using an object-relational mapping is not like using an object-oriented database.

  • almost no seam between code and database.

ZODB is an ACID Transactional database.

To learn more, visit:

The github repository is: at

If you're interested in contributing to ZODB itself, see the developer notes.