[ZODB-Dev] CMS on top of ZODB
Chris McDonough
chrism@zope.com
10 Feb 2003 09:11:16 -0500
Dieter,
I am curious whether you think there is an opportunity here to develop a
"standardized" XML-to-Zope-object serialization of large SGML/XML
documents. ParsedXML doesn't really fit the bill, as it doesn't do
anything special to break nodes across database records. XMLDocument
probably doesn't have enough features, and I don't even know whether it
works or not anymore.
I am also wondering whether you think you might be able to use the
application level version control system written by Brian Lloyd at
http://cvs.zope.org/Products/ZopeVersionControl/ instead of hacking
ZODB to do this.
On Sun, 2003-02-09 at 03:36, Dieter Maurer wrote:
> The company I am working for used S=F6rman-CMS (formerly POET-CMS),
> an SGML/XML Content Management System on top of the POET object database.
> Unfortunately, S=F6rman Germany went bankrupt and
> we do not trust the company that took over the CMS to fulfill our
> support requirements (as it took over only the software but no people
> involved with its development). Therefore, I am exploring the possibility
> to implement our core requirements on top of ZODB.
>=20
> Core requirements are:
>=20
> * management of many (in the order of hundreds of thousands) SGML/XML
> documents, some of them in the order of several MB in size
>=20
> * documents are made up of components with versions (called
> "history" in Zope/ZODB) which can be shared between
> documents
>=20
> * highly concurrent use (about 200 concurrent active users with
> write access; steadily increasing)
>=20
> * stress read access during production (of publications produced
> out of the CMS)
>=20
> * X-Metal integration (on top of an intranet protocol).
>=20
> * High availability/replication
>=20
>=20
> I think I will be able to implement about 90 percent of these core
> requirements on top of ZODB in a matter of weeks.
>=20
> However, there are some tricky issues, I would like to discuss:
>=20
> * ZODB's optimistic concurrency control
>=20
> It requires that the probability of conflicts is low (fullfilled
> in our setup) and the effect of conflicts is not desastrous
> (not fullfilled in our setup; checkins can take many minutes
> and it were bad when they had to be retried due to conflicts).
>=20
> If necessary (after having exhausted application specific conflict
> resolution), I would implement (object) locks in the ZODB:
>=20
> Read locks would do nothing except prevent to acquire a write lock
> (by a different connection) and to write the object.
>=20
> Write locks would prevent to acquire other locks on the object
> and behave like a simulated write (with identical content)
> with respect to cache control.
>=20
>=20
> * Versioning/History
>=20
> ZODB's version/history support is almost identical to that implement=
ed
> by S=F6rman-CMS. Its only drawback: it gives us only very limited
> control over the versions.
>=20
> I think, we could enhance the packing process to recognize
> special objects (based on classname) to hold references
> to older versions. We could then use a standard marking
> garbage collection for packing: current versions and
> versions referenced by (current) special objects are
> in use; any version referenced by a version in use is in
> use.
>=20
> The "version referenced by a version" is a bit tricky, as
> a version references another version only indirectly:
> it directly references an object and it is associated with a time;
> it references the object's version that was current at this time.
>=20
> Of course, packing would become considerably more expensive...
>=20
>=20
> What do you think about the prospects of these extensions?
>=20
>=20
> I can make extensions to ZODB (with respect to programming skills
> and employment contract obligations) and donate them back to the core,
> when you are interested...
>=20
>=20
> Dieter
>=20
> _______________________________________________
> For more information about ZODB, see the ZODB Wiki:
> http://www.zope.org/Wikis/ZODB/
>=20
> ZODB-Dev mailing list - ZODB-Dev@zope.org
> http://mail.zope.org/mailman/listinfo/zodb-dev