В течение нескольких дней в настоящее время, я заметил, что каждый раз, когда я начинаю клиент Bitcoin, он сходит с ума от использования диска в течение примерно 5 минут, а затем успокаивается. Я, наконец, получил достаточно интересно узнать, что происходит, и получается, что я получаю большой всплеск активности диска каждый раз, когда линия "AddAddress (...)" появляется в debug.log. Отслеживание это вниз, это, кажется, сводится к этой ошибочной строке в net.cpp:
429: BOOL AddAddress (CAddress адр, Int64 nTimePenalty)
430: {
...
444:. CAddrDB () WriteAddress (адрес);
...
470:}
Так что же происходит в том, что каждый раз, когда есть новый адрес, будет открыта база данных адресов, новая запись сохраняется, а затем база закрыта (и, предположительно, записывается на диск). Эта последняя часть, что я думаю, что является движущей силой BDB орехи писать вещи из.
Было бы слишком трудно держать один объект CAddrDB плавающим вокруг (возможно зафиксировать его с CRITICAL_SECTION), откройте ее один раз при запуске и закрыть его сразу на остановке? Адреса изменчивы информация, которая не должна быть сохранена * прямо в эту минуту * или Bitcoin потерпит неудачу. Они могут быть воссозданы избирательными пэрами, если это будет необходимо после аварии. Код должен отражать этот недостаток срочности для хранения адресов, и делать это будет существенно сократить использование дискового пространства при запуске Bitcoin.