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?
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?
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).
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
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 < blockchain – Etherkimist – 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