Why is Bitcoin Core using LevelDB instead of Redis or SQLite?

8

3

Why did Core move from BDB to LevelDB? Why don't they use SQLite or move to Redis now? Is there a technical reason for this choice?

Etherkimist

Posted 2016-10-12T21:45:54.587

Reputation: 105

The bdb->leveldb change was made to increase speed while validating blocks and during initial block download. Also, doesn't redis require that you load your entire dataset into memory? Pretty painful for a 60GB blockchain.Nick ODell 2016-10-12T23:43:24.707

but redis uses LZF light data compressor , this won't help to reduce the data volume in memory? and i thought leveldb was chosen because it supports high caching data.Etherkimist 2016-10-13T08:22:04.503

2LevelDB also supports compression. We explicitly disable it in Bitcoin Core because it does not help (almost all the data in the database consists of uncompressible cryptographic material anyway: hashes, keys, signatures).Pieter Wuille 2016-10-13T10:59:01.763

@Nick We wouldn't store the entire blockchain in the database anyway.Pieter Wuille 2016-10-13T11:05:43.993

as i know we store only the blocks and the state of validation < blockchainEtherkimist 2016-10-13T11:07:10.067

1Not even the blocks. Those are stored on disk, but not in a database. The only data of significance in the database is the UTXO set.Pieter Wuille 2016-10-13T11:14:12.413

Answers

7

Redis and LevelDB solve very different problems. We tried using SQLite and its performance was abysmal.

Bitcoin Core needs a database to store the set of unspent transaction outputs (UTXOs). This means we need fast simple reads, and fast batches of random updates.

We don't need a server/client architecture, as we can't have multiple applications accessing the database at once anyway: inconsistencies in the database would lead to forking risks (every node in the network needs to make exactly the same judgement about what is valid and invalid).

Pieter Wuille

Posted 2016-10-12T21:45:54.587

Reputation: 54 032

3Has LMDB been considered?stefanwouldgo 2016-11-09T00:49:01.073

@Pieter Wuille Do you consider that moving from BDB to LevelDB was a correct decision? Or LevelDB is causing major problems that didn't happened with BDB? (ex: file corruption, bugs ...)Mark Messa 2017-02-16T04:32:39.237