0

重複排除を実装するオープンソース プロジェクトに取り組んでいます。(プロジェクトへのリンクについては、以下の 2 つのハイパーリンクを参照してください) 現在、プロジェクトのパフォーマンスはまったく問題ありませんが、ディスクに書き込まれるブロックが増えるにつれて低下します。これは HashManager によるものです。書き込まれたブロックごとに、hashmanager は Hash-BlockId ペアを格納します。重複排除プロセスには、特定のハッシュを持つブロック識別子のリストが必要です。(使用ハッシュはCrc32) HashManagerのインターフェースについてはソースを参照。

インターフェイスの現在の実装では、リストを 256 個のファイル (crc & 0xFF) に格納し、完全なリストをメモリにロードします。別のリストが必要な場合は、前のリストが保存され、次のリストがロードされます。これによりメモリが枯渇する可能性があるという事実に加えて、これはパフォーマンスの低下を意味します。

問題を克服するために、どのような良いオプションがありますか?

(明確にするために:ブロックは完全にチェックされ、重複排除の前に一致するかどうかが確認されます)

4

2 に答える 2

0

私はディスク上の構造の専門家ではありませんが、B ツリーは、ディスクに格納されているキーと値のマップを実装するためによく使用されると聞いています。したがって、CRC の B ツリー インデックスを作成し、ブロック ID のリストへの何らかのリンクを格納することができると思います。また、CRC とブロック ID を連結したキーを効果的に持つことで、リストを B ツリー構造に結合し、B ツリーでプレフィックス/範囲クエリを効果的に行うこともできます。 .

Wikipedia の B-Tree のページ: 「コンピューター サイエンスでは、B-tree はデータを並べ替えた状態に保ち、検索、順次アクセス、挿入、および削除を対数時間で実行できるツリー データ構造です。B-tree はバイナリの一般化です。ノードが 3 つ以上の子を持つことができるという点で検索ツリー. (Comer 1979, p. 123) 自己平衡二分検索ツリーとは異なり、B ツリーは、データの大きなブロックを読み書きするシステム用に最適化されています. 一般的に使用されていますデータベースとファイルシステムで。」

于 2012-04-22T19:50:01.103 に答える