\

TurboKV: Insanely fast Rust key-value store

27 points - today at 2:23 AM

Source
  • dangoodmanUT

    today at 3:55 AM

    > DbOptions::durable()

    > Appended to the WAL without a per-write sync

    So… it’s not durable? Durable doesn’t mean “survives a process restart”, it means “durably saved to persistent storage”. For example, this “durable” mode wouldn’t survive power loss.

      • stingraycharles

        today at 4:07 AM

        Yeah this should be benchmarked against other systems that have flush() disabled.

        mmap is nice but it doesn’t support durable semantics in the way that we usually mean with databases.

        if a write is acknowledged it should not be forgotten, which is not what this is.

    • nine_k

      today at 3:30 AM

      I suppose the insane speed is due to this:

      > TurboKV's persisted Bloom-filter format uses hardware AES.

      Also, built-in LZ4 compression.

      I would expect SIMD to be used for scans.

        • haberman

          today at 3:53 AM

          I assume this is for hashing. I've seen several hashing algorithms turn to hardware AES instructions before, but I haven't seen any evidence that this technique outperforms state-of-the-art hashes like RapidHash (https://github.com/Nicoshev/rapidhash) in either quality or speed.

          • rgbimbochamp

            today at 3:32 AM

            Those help but the main write speed gain is the WAL, that uses preallocated mmap segments to avoid a write(2) per durable mutation while preserving crash recovery. AES hashing mainly helps Bloom filter point lookups and LZ4 mainly helps SSTable I/O. Scans benefit indirectly, but don’t yet use a custom SIMD merge loop.

              • dangoodmanUT

                today at 3:49 AM

                Iirc that’s how badger handles the WAL as well