On Sun, Jun 19, 2016, at 08:16, Howard Chu wrote:
> If by multi-level you mean LSM style DBs, you should be aware that these are 
> extremely fragile in the face of application and OS crashes. It's a 
> consequence of the fact that the DB state and metadata is scattered across 
> multiple files, and you cannot atomically update all of them at once. LevelDB 
> and RocksDB are both prone to self-corruption after a crash.

Great :(  *sigh*

> (Google "rocksdb corruption" ...)
> 
> Not quite sure I understand your use case. It sounds like you'll maintain a 
> local store, with recent records, and a remote store with older records. Is 
> that correct?

For the database I'd keep everything local, but I want to write everything back 
to
the store such that a host crash doesn't lose any data - and I don't want to 
amplify
writes out to absurdity doing it - though some level of amplification is 
obviously
OK.

> One of the features we'll be adding in LMDB 1.0 is incremental backup. This 
> will write out all the DB pages that are newer than a particular 
> transactionID. (A prototype of this feature is in the "incre" branch 
> https://github.com/LMDB/lmdb/tree/incre but it needs some rework before 
> releasing in 1.0)

That's definitely a step in the direction I need.

A good example of what I want is the way that the xapianactive file works in 
Cyrus
search at FastMail:

https://blog.fastmail.com/2014/12/01/email-search-system/

Because only the most recent database is writable (in this case on tmpfs, 
because
we don't need 100% reliability for search, it only takes about 20 minutes to 
scan
every mailbox and reindex the stuff that was on tmpfs after a crash)

Every other database is read-only - and you can compact multiple of them 
together
into a single database and then atomically switch the old ones out and the new 
one
in with a single very quick xapianactive rewrite - so it's acceptable to stop 
the world
while doing that.

Bron.

-- 
  Bron Gondwana
  br...@fastmail.fm

Reply via email to