LevelDB Benchmarks
leveldb.googlecode.com
leveldb.googlecode.com
Still, good to have some numbers.
So this is basically a comparison between those, right?
Does a LSM offer ordered access or do you lose that feature and gain a bit of speed?
For example, in the large values experiment, the experiment executes 1000 writes. However if the results report LevelDB as 1060 ops/sec. Assuming op == write, then the experiment ran for all of 1 second. This shows great instantaneous performance, but what if it kept running?
Additionally, it appears that no-compression is the way to go, which makes sense for small values and an in-memory experiment, but is that the case when disk comes into play?
http://www.acunu.com/blogs/andy-twigg/benchmarking-leveldb/
Comments most welcome.
-Andy
-- CTO, Acunu Inc. www.acunu.com | http://www.cs.ox.ac.uk/people/andy.twigg/
I've used a similar approach for a constant database. The transaction log goes to disk, but also stays in memory. Scanning it linearly isn't that slow. When it grows too large, the log is converted into a disk-optimized format, which is a rather quick process. This way, it can take tons of writes, service reads acceptably, while still being able to store much more data than RAM and offering fast access to on-disk data.
(this should apply equally to other databases that have a similar option)
>The preceding numbers are for an ext3 file system. Synchronous writes are much slower under ext4 (LevelDB drops to ~34 writes / second, TreeDB drops to ~5 writes / second; SQLite3 drops to ~24 writes / second) due to ext4's different handling of fsync / msync calls. Even LevelDB's asynchronous write performance drops somewhat since it spreads its storage across multiple files and issues fsync calls when switching to a new file.