On Mar 4, 2008, at 4:12 PM, Sergiu Dumitriu wrote: > 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?
yep -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/ > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

