5

erlang で bittorrent トラッカーを作成しています。サービスの性質上、絶対的な一貫性は必要ありません (つまり、ピアのリストや torrent のステータスが少し古くても、クライアントは完全に満足することができます)。

これまでの私の戦略は、disk_copies を有効にして RAM に mnesia テーブルを作成し、ログ サイズが特定のサイズを超えたときに mnesia が自動的にメモリをディスクにダンプするようにすることでした。

サーバーがクラッシュすると、一部の情報が失われます。大したことではありません。

別のアプローチとして、2 つのテーブル (1 つの RAM のみと 1 つのディスクのみ) をインスタンス化し、RAM からディスクへのプロセス コピーを約 1 分ごとに行うこともできます。これはより素朴ですが、メモリ内のサブセットのみをダンプできるため、ディスク全体のオーバーヘッドが削減され、ログの使用を完全に回避できる可能性があります (この最後のステートメントについては実際にはわかりません)。

これを行うには他にも多くの方法があると確信しています。君は?

-テオ

4

3 に答える 3

2

rediserldisをチェックアウトすることをお勧めします。Redis は 2 番目のアプローチを採用しています。すべてがメモリに保存され、定期的にディスクにダンプされます。

于 2009-07-28T23:54:09.330 に答える
1

これは確かに元の質問に関してはトピックから外れていますが、純粋なトラッカーを実際に作成している場合は、永続性を完全に放棄し、データのみをメモリに保持することをお勧めします。

最小限のトラッカーの場合、アナウンスの重さはわずか数バイトです。SHA1 ハッシュに 16 バイト、ピアの IP とポートに 6 バイト、タイムスタンプも保持する必要があるため、さらに数バイトです。しかし、多少のオーバーヘッドがあっても、文字通り何百万ものレコードをメモリに保持できます。

于 2009-08-06T02:33:16.957 に答える
1

http://github.com/jlouis/etorrent/tree/masterに興味があるかもしれないプロジェクトがあります。

于 2009-07-28T15:29:19.660 に答える