<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://ru.bitcoin.it/w/index.php?action=history&amp;feed=atom&amp;title=Berkley_DB</id>
	<title>Berkley DB - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://ru.bitcoin.it/w/index.php?action=history&amp;feed=atom&amp;title=Berkley_DB"/>
	<link rel="alternate" type="text/html" href="https://ru.bitcoin.it/w/index.php?title=Berkley_DB&amp;action=history"/>
	<updated>2026-05-16T09:58:14Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://ru.bitcoin.it/w/index.php?title=Berkley_DB&amp;diff=134&amp;oldid=prev</id>
		<title>Arsen.Shnurkov: Новая страница: «berkeleydb это, вообще-то, один из самых производительных движков для DB из существующих (steam ег…»</title>
		<link rel="alternate" type="text/html" href="https://ru.bitcoin.it/w/index.php?title=Berkley_DB&amp;diff=134&amp;oldid=prev"/>
		<updated>2012-07-09T21:20:46Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «berkeleydb это, вообще-то, один из самых производительных движков для DB из существующих (steam ег…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;berkeleydb это, вообще-то, один из самых производительных движков для DB из существующих&lt;br /&gt;
(steam его использует, к примеру.. да и даже в том же mysql раньше была возможность хранения таблиц в berkeleydb,&lt;br /&gt;
пока оракл не начал давить патентами в свое время).&lt;br /&gt;
И поддерживает в том числе и репликацию.&lt;br /&gt;
&lt;br /&gt;
Скачиваете с сайта оракла пакет libdb соответствующей версии, в нем куча утилит для работы с БД.&lt;br /&gt;
&lt;br /&gt;
* db_dump/db_load - снятие текстового дампа с базы/восстановление базы из дампа (дампы намного больше по размеру, чем сама база)&lt;br /&gt;
* db_hotbackup - копирование базы данных &amp;quot;как есть&amp;quot;&lt;br /&gt;
* db_verify/db_recover - проверка на повреждения/исправление поврежденной БД&lt;br /&gt;
* db_deadlock - демон, который можно использовать для разрешения возможных ситуаций со взаимными блокировками&lt;br /&gt;
* db_checkpoint - демон, позволяющий создавать контрольные точки с настраиваемыми интервалами между ними&lt;br /&gt;
* db_stat - отображает статистику по БД&lt;br /&gt;
* db_sql - утилита, позволяющая сгенерировать скелет конструкций на языке С/С++ для работы с Berkeley DB, на основании заданной на языке SQL схемы&lt;br /&gt;
* db_archive - создает список файлов журналов, которые надо бэкапить на случай полного разрушения БД&lt;br /&gt;
* db_upgrade - обновление формата БД до текущей версии&lt;br /&gt;
&lt;br /&gt;
Для master-master и вообще какой бы то ни было репликации нужно чтобы использующее БД приложение было написано соответствующим образом, текущая реализация работы с БД не позволяет использовать подобный функционал т.к. в биткоине база используется не более как свалка ключей и значений. В этом плане, в общем, еще есть куда расти и очень далеко (как с master-master на berkeley db не в курсе, оракл вроде много на эту тему говорил... но master-slave достаточен в большинстве случаев и не является чем-то необычным для berkeley db).&lt;br /&gt;
&lt;br /&gt;
Вообще, в bitcoin предусмотрена возможность делать flush для валлета (эта процедура вызывается периодически сама, ну и при некоторых действиях, таких как скачивание блока, содержащего принадлежащую клиенту транзакцию), что существенно снизит риски при копировании &amp;quot;на горячую&amp;quot; (практически до нуля), но почему-то в RPC calls эта функция не реализована.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы безболезненно можно было работать с уже заблокированной базой bitcoin необходимо в RPC реализовать не flush, а flush-block и unblock-reread, при которых база будет переводиться в состояние, доступное для работы другим приложениям (и открывать естественно в режиме shared write), а при попытках записать что-либо между этими вызовами - блокировать работу клиента.&lt;br /&gt;
&lt;br /&gt;
Что то мне говорит, если немного подсуетиться, безо всяких изобретений новых вызовов&lt;br /&gt;
одновременная работа с базой возможна и так,&lt;br /&gt;
всего то сменить режим открытия базы и реализовать коллбаки на модификацию базы в критических местах.&lt;br /&gt;
&lt;br /&gt;
резервное копирование кошелька необходимо делать после каждой операции,&lt;br /&gt;
а если он гигабайтового размера, то это несколько затруднительно&lt;/div&gt;</summary>
		<author><name>Arsen.Shnurkov</name></author>
	</entry>
</feed>