zodb / relstorage

A backend for ZODB that stores pickles in a relational database.
Other
54 stars 46 forks source link

Finer control over sqlite storage locking, oid allocation and stats. #368

Closed jamadden closed 4 years ago

jamadden commented 4 years ago

This makes it consistently at least 2x to 3x faster in most benchmarks and it also closes some potential concurrency issues.

Also expose all the pragmas in the configuration so users can tune it appropriately for their environment. This changes the config schema a bit, so since we were doing that, clean that up a bit.

Documentation still needs updated, I'll do that separately.

jamadden commented 4 years ago

It's generally quite a bit faster than ZEO on the same machine, and often faster than FileStorage for writes.

Here's 5 threads working on 10 objects:

Benchmark sqlite_ssd_10 filestorage_10 zeo_fs_10
add 12.1 ms 44.2 ms: 3.65x slower (+265%) 44.3 ms: 3.66x slower (+266%)
store 4.20 ms 8.07 ms: 1.92x slower (+92%) 9.12 ms: 2.17x slower (+117%)
update 11.0 ms 43.9 ms: 4.00x slower (+300%) 74.5 ms: 6.78x slower (+578%)
cold 11.4 ms 4.40 ms: 2.59x faster (-61%) 25.9 ms: 2.28x slower (+128%)
prefetch_cold 11.8 ms 4.31 ms: 2.74x faster (-63%) 20.0 ms: 1.69x slower (+69%)
readCurrent 4.87 ms 2.56 ms: 1.91x faster (-48%) 17.5 ms: 3.59x slower (+259%)
warm 36.7 ms 19.6 ms: 1.88x faster (-47%) 66.8 ms: 1.82x slower (+82%)
tpc 1.58 ms 346 us: 4.56x faster (-78%) 5.97 ms: 3.79x slower (+279%)
new_oid 2.07 ms 93.3 us: 22.20x faster (-95%) 1.02 ms: 2.04x faster (-51%)
hot 7.06 ms 2.76 ms: 2.56x faster (-61%) 6.42 ms: 1.10x faster (-9%)
conflicts 12.0 ms 44.9 ms: 3.73x slower (+273%)

And here's 5 separate processes:

Benchmark sqlite_ssd_10 zeo_fs_10
add 4.44 ms 23.1 ms: 5.20x slower (+420%)
store 2.29 ms 23.3 ms: 10.17x slower (+917%)
update 3.95 ms 43.8 ms: 11.09x slower (+1009%)
cold 2.20 ms 10.8 ms: 4.92x slower (+392%)
prefetch_cold 2.31 ms 7.36 ms: 3.19x slower (+219%)
warm 11.6 ms 42.5 ms: 3.65x slower (+265%)