Thank you Mattias for this logical explanation. From now on doInternalRecovery is my friend. :-)
Regards, --- balazs On 10/26/11 5:06 PM, Mattias Persson wrote: > Good question, > > so neo4j implements all the ACID principles of transactions, but that > doesn't mean that there's a guarantee that when you've committed a > transaction the data is in the store files on disk. In fact that wouldn't be > performant at all. The data is written to the store files with buffering or > memory mapping depending on environment so when it actually trickles down to > actual disk is up to when neo4j decides to "unmap" that area of the store > file and when the OS decides to flush its buffers. Instead the only place > your transaction is guaranteed to exist on disk after a commit is in the > logical log, so for a clean shutdown all the buffers/memory mapped areas of > the store files are closed and forced to disk whereas a non-clean shutdown > (a crash or whatever) wouldn't do that and there would be no guarantee that > all the store file changes would be written. So in case of a non-clean > shutdown neo4j must look in the most recently active logical log and replay > all those transactions to the store files... and that's what the recovery > process does after a non-clean shutdown. > > Best, > Mattias > > 2011/10/26 Balazs E. Pataki<[email protected]> > >> Hi, >> >> after crashing my application the next time I start it up I get the usual >> >> Oct 26, 2011 3:28:42 PM >> org.neo4j.kernel.impl.transaction.xaframework.XaLogicalLog >> doInternalRecovery >> INFO: Non clean shutdown detected on log [/db/nioneo_logical.log.1]. >> Recovery started ... >> INFO: Non clean shutdown detected on log [/db/index/lucene.log.1]. >> Recovery started ... >> >> kind of messages. >> >> I have a 8GB database and now this recovery has been running for quite >> some time, and I started to thinking why is this recovery is necessary >> at all? AS far as I'm aware the transactions are ACID, so they either >> commit, or rollback, in both case the state of the database must be OK. >> In this case I could see no reason why to do any recovery (from >> transactional point of view). If the DB crash happens while transactions >> are open, then there coudl be some problems. But in my case I could live >> with loosing such transactions and just not have recovery at all. >> >> To sum up my question: is this doInternalRecovery process essential? And >> if not, is there a way to avoid it at startup? >> >> Thanks, >> --- >> balazs >> >> _______________________________________________ >> Neo4j mailing list >> [email protected] >> https://lists.neo4j.org/mailman/listinfo/user >> > > > _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

