Vincent Massol wrote:
On Mar 4, 2008, at 10:07 AM, Paul Libbrecht wrote:
Could I add yet another idea which is hanging
around since long, I
think: java content repository ?
It may have catches in licenses (just as any of these JCR efforts)
but I believe this is a sturdy way to expose streams of varying
size. Indeed, it'd need a file-system-storage but that's a good
thing certainly or?
I am not really an expert there unfortunately, but last I played
with jackRabbit it really seemed like a sturdy piece you could rely
on.
Yes, agreed. BTW JCR doesn't mandate a file system storage. It
abstracts it. The Exo implementation for example has several different
implementations available.
Even better, it's already been implemented for more than a year! If
you check the source code you'll see it's there and even bundled in
the XWiki since the 1.0 release...
Now the bad news: I don't think it's working and would need someone
working on it.
Could be a SoC project?
-Vincent
> Le 3 mars 08 à 17:28, Sergiu Dumitriu a écrit :
>
>> Vincent Massol wrote:
>>> Nice work Sergiu. We should transform this into a jira issue to not
>>> forget it.
>>>
>> We should vote for it first.
>>
>>> One other idea: store attachments on the file system and not in
>>> the DB.
>>>
>>> Thanks
>>> -Vincent
>>>
>>> On Feb 27, 2008, at 3:48 PM, Sergiu Dumitriu wrote:
>>>
>>>> Hi devs,
>>>>
>>>> Last night I checked what happens when uploading a file, and why
>>>> does
>>>> that action require huge amounts of memory.
>>>>
>>>> So, whenever uploading a file, there are several places where the
>>>> file
>>>> content is loaded into memory:
>>>> - as an XWikiAttachment as byte[] ~= filesize
>>>> - as an XWikiAttachmentArchive as Base64 encoded string ~=
>>>> 2*4*filesize
>>>> - as hibernate tokens that are sent to the database, clones of the
>>>> XWikiAttachment and XWikiAttachmentArchive data ~= 9*filesize
>>>> - as Cached attachments and attachment archive, clones of the
>>>> same 2
>>>> objects ~= 9*filesize
>>>>
>>>> Total: ~27*filesize bytes in memory.
>>>>
>>>> So, out of a 10M file, we get at least 270M of needed memory.
>>>>
>>>> Worse, if this is not the first version of the attachment, then the
>>>> complete attachment history is loaded in memory, so add another
>>>> 24*versionsize*versions of memory needed during upload.
>>>>
>>>> After the upload is done, most of these are cleared, only the
>>>> cached
>>>> objects will remain in memory.
>>>>
>>>> However, a problem still remains with the cache. It is a LRU cache
>>>> with
>>>> a fixed capacity, so even if the memory is full, the cached
>>>> attachments
>>>> will not be released.
>>>>
>>>> Things we can improve:
>>>> - Make the cache use References. This will allow cached
>>>> attachments to
>>>> be removed from memory when there's a need for more memory
>>>> - Do a better attachment archive system. I'm not sure it is a good
>>>> idea
>>>> to have diff-based versioning of attachments. In theory, it saves
>>>> space
>>>> when versions are much alike, but it does not really work in
>>>> practice
>>>> because it does a line-diff, and a base64 encoded string does not
>>>> have
>>>> newlines. What's more, the space gain would be efficient when there
>>>> are
>>>> many versions, as one version alone takes 4 times more space than a
>>>> binary dump of the content.
>>>>
>>>> Suppose we switch to a "one version per table row" for
attachment
>>>> history, with direct binary dump, then the memory needed for
>>>> uploading
>>>> would be 6*filesize, which is much less.
--
Sergiu Dumitriu
http://purl.org/net/sergiu/