Для чего нужна база данных?

Я вижу, что цепочка блоков хранится в соответствии со спецификацией формата цепочки блоков. Но я также вижу, что есть база данных, которая в настоящее время является базой данных leveldb. Почему цепочка блоков хранится двумя разными способами? Кажется излишним.

Спасибо, что задали этот вопрос. Из предоставленного ответа я смог обновить вики Биткойн: en.bitcoin.it/wiki/Data_directory

Ответы (1)

Есть в основном четыре части данных, которые поддерживаются:

  • blocks/blk*.dat: фактические биткойн-блоки в сетевом формате, сброшенные на диск в необработанном виде. Они нужны только для повторного сканирования отсутствующих транзакций в кошельке, реорганизации в другую часть цепочки и предоставления данных блока другим узлам, которые синхронизируются.
  • blocks/index/*: это база данных LevelDB, содержащая метаданные обо всех известных блоках и о том, где их найти на диске. Без этого поиск блока был бы очень медленным.
  • chainstate/*: это база данных LevelDB с компактным представлением всех неизрасходованных выходных данных транзакций и некоторыми метаданными о транзакциях, из которых они получены. Данные здесь необходимы для проверки новых входящих блоков и транзакций. Теоретически его можно перестроить из данных блока (см. -reindexопцию командной строки), но это занимает довольно много времени. Без него вы все равно теоретически могли бы проводить валидацию, но это означало бы полное сканирование блоков (207 ГБ по состоянию на март 2019 г. — https://www.blockchain.com/charts/blocks-size ) для каждого потраченного вывода . .
  • blocks/rev*.dat: они содержат данные «отмены». Вы можете видеть блоки как «заплатки» к состоянию цепочки (они потребляют некоторые неизрасходованные выходы и производят новые), а данные отмены — как обратные заплатки. Они необходимы для отката состояния цепочки, что необходимо в случае реорганизации.

Так что да, все, кроме самих данных блока, действительно избыточно, так как их можно перестроить из них. Но без них валидация и другие операции стали бы невыносимо медленными.

Хорошо, спасибо. Сохраняет ли rev*.dat данные для отката базы данных chainstate/*? (Я предполагаю, что откат блокчейна довольно прост и включает в себя удаление конечных блоков и добавление новых.)
Действительно, только цепочка; остальное банально. В частности, он содержит суммы и сценарии вывода, которые были потреблены блоком.
Привет. Скажем, я хочу реализовать всю БД в SQL. Является ли это возможным? Если да, то какие плюсы и минусы??