Overview of ZFS
Overview of ZFS
ZFS came out of a conversation with Paul Everitt (its all his fault :) regarding all the file system objects out there. "Wouldn't it be nice if we had a generic method of using the file system so people didnt keep making their own products?" I said. "Good idea, why dont you do that?" he said with a knowing smile. A few months later I got into a discussion about Local FS and my opinion of how it should be done. Then I got very annoyed with the CMF FS objects that cant be cached... So I had to go and write it, to prove it could be done.
What does it do?
- Simply it lets you edit one property of an object on the file system. This sounds underwhelming but most of the time you only edit the bit in the text area. Thats the most important and commonly edited part.
So what does this do that all other objects doesnt?
- Its much faster than all the other FS systems
- It uses the ZODB to "sort of" cache objects, they are only reread from the file system when they change...
- It uses standard Zope objects, no new objects...
- You can create and edit objects directly on the file system, Zope sucks them all in
- How an object is stored is based on its container not its object type
- It provides an interface for other product authors to plug their product into
Give me some examples?
- You can cut and paste a DTML Document into the ZFS. Edit it on the file system. Then cut and paste it back into another folder.
- The main part of an object can be stored in a source control system.
- You can use any editor you want, with no fiddling to edit Python Scripts, Page Templates etc...
This sounds too good to be true!
- It is there are problems. Some of the features are not quite the way you would expect. For example: Deleting the ZFS object in Zope deletes all the files on the file system that the ZFS points to.
- ZFS hacks lots of objects. This might slow overall performance (it wont improve it), chances are you won't notice it though.
- There are possible security and database holes, its new give it time.
- Undo and history are broken, when you change an object undo gets updated, but the objects "main" data is not saved, so you only get a partial undo.
So why not give it a try, but only use it testing at the moment.