* Matthew Toseland <toad at amphibian.dyndns.org> [2008-05-17 19:00:13]:
> On Saturday 17 May 2008 00:29, Matthew Toseland wrote: > > Ian and I have eventually come to the conclusion that we should include > db4o, > > and use it for our various persistence needs. I eventually reached the > > conclusion that while we can do most of what we need to do with simple > > flatfile databases, there are big chunks that will require a real database > of > > some kind (even if it's only a persistent hash table). db4o has various > > advantages: > > - Robust in real-world use. See for example this testimonial from a company > > who used it on cell phones: > > http://www.db4o.com/about/customers/success/mandalait.aspx > > BDBJE has not met our expectations in this regard. It seems very sensitive > to > > unusual situations - in particular, it will spontaneously corrupt and lose > > all data on running out of disk space. > > - True object database: no SQL, simple and powerful queries, etc. > > - Transparent or manual activation of objects from storage. > > - 800K jar, so not big enough to be a problem. > > - Mature and actively maintained. > > - Allows for future expansion (e.g. passive requests will need to store a > fair > > amount of persistent data). > > - Much more flexible than the hand-coded solution I was thinking of. We can > > persistent the entire queue (not just the splitfiles), if it's useful to do > > that. > > - Transactions (although this requires some juggling of in-memory objects > > on > > rollback). > > > > Tasks: > > - Add db4o to freenet-ext.jar. > > - Think about using it for the datastore. We don't want to have two > databases! > > Sdiz's new datastore may be the One True Store, or it may not be. If it's > > not, we don't want to keep BDBJE: we could build a db4o-based store, with > > or > > without LRU replacement. It would have the advantage of filling up more > > quickly than sdiz's store. It should require reconstructing less frequently > > than BDBJE! > > - Migrate the client layer, including splitfiles, pendingKeys, and so on, > > to > > be persisted via db4o. Of course there will be latency here when objects > > are > > not cached, so we will need to cache a few request choices in advance for > > each RequestStarter. And we will need to devise some way to deal with > > requests that don't want to be persisted - presumably we'd keep them in RAM. > > > It turns out that db4o does indeed unrecoverably self-corrupt when it runs > out > of disk space. (Thanks nextgens for getting me to test this!) > > http://amphibian.dyndns.org/bdb4o-test.log > muhahahaha. Last time I checked the bdb database was recoverable... Okay it lost some^wmost of the data in the process but at least it did attempt to recover! > We will therefore have to keep a fallback. IMHO for the client layer the > fallback should be downloads.dat.gz. We are careful not to lose that when we > run out of disk space, and it should only contain what is needed to restart > requests from the beginning (in practice a lot will come from the store). > ... While we are at it, what's wrong with bdb-je's persistence framework again ? http://www.oracle.com/database/berkeley-db/je/index.html > I apologise if the above was presented as a fait accompli, any input on > databases would be appreciated. On Friday, me and Ian spent a long time > debating the issue, first and foremost of whether we should even have a > database; I was initially in favour of not having one at all, or using jdbm's > persistent hashtable class (HTree). > > Personally I think if we have a database it should be a native object > database > i.e. either Perst or db4o. It also should be robust, low overhead, mature, > open source etc. I will start implementing the new client layer with db4o > soon, unless convinced to use something else in the meantime. But it seems > that with BDBJE (which isn't a native object database), you can lose the > database even by an unclean shutdown... can anyone confirm this from > experience? Or is it only out of disk space and memory corruption that causes > this? I'm still not convinced that we need a database... as our requirements are completely different from their typical use-cases... but well, your immediate concern is to store persistent requests to disk, right? What about using Hibernate or javax.persistence (from EE) to do that ? -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 189 bytes Desc: Digital signature URL: <https://emu.freenetproject.org/pipermail/devl/attachments/20080518/d907c910/attachment.pgp>