[meta-sig] Proposal: persistence-sig
Jim Fulton
jim@zope.com
Tue, 02 Jul 2002 14:25:55 -0400
Problem
A number of projects are underway to provide persistence mechanisms
for Python. These efforts have a number of common requirements,
including:
- Transparency
Applications should not have to explicitly track object changes or
save objects. Applications should not have to explicitly query
most objects. Typically, some "root" objects will be explicitly
retrieved and other objects will be retrieved through normal
Python object traversal. Application objects should not contain
storage code, such as SQL statements or file operations, needed to
provide their persistence. Application code may need to contain
code to generate persistence-related events, but even these should
be automated to the degree possible, for example by monitoring
attribute accesses.
- Transactional storage
Data should be stored transactionally with support for rolling
back changes. Support for (optional) nested transactions should
be anticipated.
- Effective memory usage
Applications should not use undue amounts of memory. Often,
persistence applications use databases that are too large to fit
into memory. Objects should be loaded only when necessary and
should be removed from memory when they are no longer needed.
Most of these efforts are focused on providing persistence using
relational database data. The efforts are, for the most part,
proceeding independently. Each will attempt to address the above
requirements independently, with much duplication of effort.
The Zope Object Database (ZODB) has satisfied the above requirements
for some time. ZODB is currently undergoing a transition from ZODB
3, which was based on ExtensionClass, to ZODB 4, which is based on
Python 2.2 new-style classes. As a part of this effort, the ZODB
persistence and transaction frameworks are being factored out of
ZODB into separate packages, with the hope that they will be of use
to other persistence-based frameworks.
It will be a huge duplication of effort if each of the various
persistence projects has to address the above requirements
independently. Worse, the resulting systems will have independent
frameworks that are unlikely to interoperate. Objects built for one
framework will need to be rewritten to work with another.
Proposal
A new persistence-SIG is proposed to explore and, if possible,
produce persistence and transaction frameworks that can be used for
a variety of persistence implementations, including relational
database-based persistence and the ZODB.
Coordinator: Jeremy Hylton
Conclusion: When 1.0 versions of the frameworks are delivered, or
September 1, 2003, whichever is sooner.
Deliverables: PEPs documenting the frameworks created and software
implementing key parts of the frameworks.
Assuming that a satisfactory framework can be defined, then the
framework and core implementations should be included in standard
Python distributions.
Scope
The scope of this SIG includes common frameworks for:
- Transaction coordination
- Basic persistence management, in particular observing object
changes (to know when an object needs to be saved) and access
(to know when objects are used so that unused objects are removed
from memory), and
- Activation and caching, to move objects into memory when needed
and out of memory when no longer needed.
The scope does *not* include:
- Concurrency control. This is the responsibility of specific data
managers that are plugged into the frameworks. The transaction
manager simply tracks object changes and coordinates the
activities of data managers to commit (or rollback) changes in an
atomic fashion.
- Query languages. Individual data managers or applications may
provide query facilities. While it would be cool to have a common
query facility for Python, and I would support such a project,
that would be a different project than this one.
- Integrity constraints. Some data managers, such as those based on
relational data, will need to provide facilities for low-level
integrity checks, while others, such as ZODB, will not. Similarly,
garbage collection is the responsibility of the data manager, not
the framework. Application-level integrity systems would also be
interesting, but would not depend on a persistence system.
Jim
--
--
Jim Fulton mailto:jim@zope.com Python Powered!
CTO (888) 344-4332 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org