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?
Asked
Active
Viewed 5,444 times
11
Michael Folkson
- 14,337
- 3
- 11
- 45
Etherkimist
- 135
- 1
- 5
-
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 Oct 12 '16 at 23:43
-
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 Oct 13 '16 at 08:22
-
3LevelDB 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 Oct 13 '16 at 10:59
-
@Nick We wouldn't store the entire blockchain in the database anyway. – Pieter Wuille Oct 13 '16 at 11:05
-
as i know we store only the blocks and the state of validation < blockchain – Etherkimist Oct 13 '16 at 11:07
-
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 Oct 13 '16 at 11:14
1 Answers
13
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
- 98,249
- 9
- 183
- 287
-
5
-
@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 Feb 16 '17 at 04:32