In order to decrease the load on the database and heap from large attachments, 
I would like to
propose a filesystem based storage mechanism. I propose the addition of 2 
interfaces for storing
large binary content, a database table to track the files on the filesystem, a 
new configuration
parameter for the location of persistent filesystem storage, and an 
implementation of each interface.

The reason for writing an abstract binary storage interface rather than a new 
implementation of
AttachmentStore, AttachmentVersioningStore, and AttachmentRecycleBinStore is 
that the code would be
duplicated or should I say triplicated. BinaryStore will provide a means for 
not only storage of
attachments but storage of other large items which we may decide we want in the 
future.

I plan to keep the current implementations of AttachmentStore, 
AttachmentVersioningStore and
AttachmentRecycleBinStore intact so it will be the user's choice how they store 
attachments.


interface com.xpn.xwiki.store.BinaryStore will contain:

@param toLoad a binary object with an id number set, will be loaded.
void loadObject(BinaryObject toLoad)

@param toStore a binary object, if no id is present then it will be given one 
upon successful
               store, if id is present then that id number will be used.
void storeObject(BinaryObject toStore)
This will be implemented by: com.xpn.xwiki.store.hibernate.HibernateBinaryStore


com.xpn.xwiki.doc.BinaryObject would contain:

void addContent(InputStream content)

OutputStream addContent()

void clear()

InputStream getContent()

void getContent(OutputStream writeTo)


clear() would clear the underlying file whereas addContent would always append 
to it.

The added column would look like this:

<class name="com.xpn.xwiki.store.doc.FilesystemBinaryObject" 
table="filesystembinaryobject">
    <id name="id" column="id">
        <generator class="native" />
    </id>

    <property name="fileURI" type="string">
        <column name="fileuri" length="255" not-null="true"/>
    </property>
</class>



WDYT?

Caleb

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to