Бумажник резервного копирование и другое исследование DB легко можно в безопасной, атомной транзакционной моде ... тогда и только тогда, когда DB_PRIVATE флаг удаляются.
Код:
--- а / db.cpp +++ б / db.cpp @@ -77,7 +77,6 @@ CDB :: CDB (Const символ * pszFile, Const символ * pszMode): PDB (NULL) DB_INIT_MPOOL | DB_INIT_TXN | DB_THREAD | - DB_PRIVATE | DB_RECOVER, S_IRUSR | S_IWUSR);
Что, если таковые имеются, возникают проблемы, делать это? Очевидно, что это не распространяется на базы данных, не DB4, такие как файл блока данных.
Можете ли вы предоставить более подробную информацию о том, что делает удаление DB_PRIVATE?
Я не могу вспомнить, если у меня была конкретная причина для DB_PRIVATE, или если я просто скопировал флаги из некоторого кода примера. Делает ли удаление DB_PRIVATE безопасно для других процессов, чтобы открыть базу данных одновременно? Это может быть улучшение, в зависимости от того, что побочные эффекты. Есть ли существенно снизить производительность, что делает его выписать все изменения сразу или делать другую координацию? Существуют ли дополнительные запирающие или координационные файлы тогда? Что еще изменится? Вы можете проверить по времени начальный блок загрузки и без DB_PRIVATE, предпочтительно -connect-ки на локальной машине, так что сеть не является фактором.
По-видимому, DB_PRIVATE не делать то, что вы хотели бы надеяться, что будет делать, что предотвратить другие процессы от того, чтобы открыть базу данных. Он по-прежнему позволяет им, он просто щурит, если они делают. Другой вариант, если есть способ, должен был бы сделать это заблокировать файлы базы данных, поэтому они не могут быть доступны для других процессов.
DB_PRIVATE позволяет несколько оптимизаций, сделав предположение о том, что только один процесс будет иметь доступ к базе данных db4. Следует отметить, что этот флаг позволяет DB4 использовать Pthreads стиль мьютекса замок, а не тяжелая, операционная систему при условии паствы и общей память. Ref: DB_ENV->открытая документация.
Общая мотивация является то, что db4 базы данных могут быть безопасно доступны параллельно с Bitcoin клиентом, предполагая (а) DB_PRIVATE удаляются и (б) Bitcoin правильно используют DB4 транзакцию. db4 сделки могут даже быть использованы, чтобы обернуть вокруг не-db4 данных, таких как blk0001.dat, если код правильно спроектирована.
Попытка без флага DB_PRIVATE в обороте 153. Мы должны следить за то, что по-другому.
В Windows, по крайней мере, он создает шесть __db.001 - __db.006 файлы размером от 24K до 4Мб. Он не удаляет их на выходе, он просто оставляет их позади.
В документах говорят, он использует файлы, отображенные на память. Я предполагаю, что они имеют те же права доступа к файлам, как файлы базы данных, так что одни и те же ограничения доступа пользователей применяются.
Тесты на Windows, загрузки частной локальной сети 78500 блоков: с DB_PRIVATE 20 минут 51 секунд без DB_PRIVATE 20 минут 51 секунд