RFC: DB_PRIVATEフラグの削除

2 件のメッセージ サトシ・ナカモト 2010年8月26日 — 2010年9月12日

DB_PRIVATEを削除すると何が起きるか、もっと詳しく教えてもらえるか?

DB_PRIVATEに特定の理由があったか、それともサンプルコードからフラグをコピーしただけか覚えていない。DB_PRIVATEを削除すると、他のプロセスが同時にデータベースを開いても安全になるか?副作用次第では改善かもしれない。すべての変更を即座に書き出す必要があったり、他の調整が必要になったりして、性能が大幅に低下するか?追加のロックや調整ファイルが必要になるか?他に何が変わるか?DB_PRIVATEの有無で初期ブロックダウンロードの時間を計ってテストできる。ネットワークが要因にならないよう、できればローカルマシンに-connectするとよいだろう。

どうやら、DB_PRIVATEは期待するような動作をしないようだ。つまり、他のプロセスがデータベースを開くことを防ぐのではなく、開くことは許可するものの、開くと問題が起きるだけだ。もう一つの選択肢は、方法があれば、データベースファイルをロックして他のプロセスからアクセスできないようにすることだ。

rev 153でDB_PRIVATEフラグなしで試している。何が異なるか注視する必要がある。

少なくともWindowsでは、24KBから4MBのサイズの__db.001から__db.006の6つのファイルを作成する。終了時にそれらを削除せず、そのまま残す。

ドキュメントによると、メモリマップドファイルを使用するとのことだ。データベースファイルと同じファイル権限を持ち、同じユーザーアクセス制限が適用されると思われる。

WindowsプライベートLANでの78500ブロックのダウンロードテスト: DB_PRIVATEあり 20分51秒 DB_PRIVATEなし 20分51秒

まったく同じになるとは予想していなかった。