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

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

25 голосов | спросил turtlepower 21 Maypm13 2013, 23:54:48

1 ответ


43

В основном сохраняются четыре части данных:

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

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

ответил Pieter Wuille 22 Mayam13 2013, 00:31:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132