old (leveldb) vs new (bolt):
jb@syno:~/src/github.com/syncthing/syncthing/internal/db (leveldb) $ go test -bench . -benchmem > ~/a
jb@syno:~/src/github.com/syncthing/syncthing/internal/db (leveldb) $ git checkout boltv2
Switched to branch 'boltv2'
jb@syno:~/src/github.com/syncthing/syncthing/internal/db (boltv2) $ go test -bench . -benchmem > ~/b
jb@syno:~/src/github.com/syncthing/syncthing/internal/db (boltv2) $ benchcmp ~/a ~/b
benchmark old ns/op new ns/op delta
Benchmark10kReplace 68852446 24119329 -64.97%
Benchmark10kUpdateChg 337298885 159390764 -52.74%
Benchmark10kUpdateSme 98782170 63312555 -35.91%
Benchmark10kUpdateChgOne 7420704 2626382 -64.61%
Benchmark10kNeed2k 43319692 21381319 -50.64%
Benchmark10kHaveFullList 16177255 15942284 -1.45%
Benchmark10kGlobal 111230379 44286628 -60.18%
benchmark old allocs new allocs delta
Benchmark10kReplace 178152 104740 -41.21%
Benchmark10kUpdateChg 567969 636204 +12.01%
Benchmark10kUpdateSme 238678 310134 +29.94%
Benchmark10kUpdateChgOne 89 283 +217.98%
Benchmark10kNeed2k 105388 96036 -8.87%
Benchmark10kHaveFullList 60230 60042 -0.31%
Benchmark10kGlobal 237501 200043 -15.77%
benchmark old bytes new bytes delta
Benchmark10kReplace 8243850 3017702 -63.39%
Benchmark10kUpdateChg 47108304 34855307 -26.01%
Benchmark10kUpdateSme 16116618 15353259 -4.74%
Benchmark10kUpdateChgOne 10956 122364 +1016.87%
Benchmark10kNeed2k 6565802 4848204 -26.16%
Benchmark10kHaveFullList 7611151 7585034 -0.34%
Benchmark10kGlobal 21427039 13825136 -35.48%
jb@syno:~/src/github.com/syncthing/syncthing/internal/db (boltv2) $
Bolt is vastly faster and allocates less memory, except in the fs.Update(protocol.LocalDevice, aSingleFile)
where it is ten times less efficient memory wise... But we don't really do that operation anyway.