2009-07-28 13 views
5

私はerlangでビットトレントトラッカーを書いています。サービスの性質上、 私は絶対的な一貫性は必要ありません(つまり、クライアントは若干古くなったピアやトレントのステータスを完全に満足させることができます)。最終的に一貫性のあるmnesiaデータベースとerlang。誰でもベストプラクティス?

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

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

異なるアプローチがインスタンスへの2つのテーブル(1つのつのみラム及び一つのディスク)であるとRAMからディスクに毎分程度の処理コピーを有することになります。これはより単純ではありませんが、メモリ内の部分集合だけをダンプすることができ、全体的なディスクオーバーヘッドを減らし、おそらくログの使用を避けることができます。

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

-teo

答えて

2

redis & erldisをチェックアウトすることができます。 Redisは第2のアプローチを採用しています。すべてがメモリに保存され、定期的にディスクにダンプされます。

1

これはあなたの元の質問に関してのオフトピックは確かですが、あなたが本当に純粋なトラッカーを書いているならば、それは完全に永続性を放棄し、もっぱらメモリ内のデータを維持するために最善のかもしれません。

最小限のトラッカーの場合、アナウンスの重みはわずかですが、SHA1ハッシュでは16バイト、ピアのIPとポートでは6バイト、タイムスタンプをよくしかし、少しオーバーヘッドがあっても、何百万ものレコードを文字通り記憶に残すことができます。

+1

現在発表と急流のデータはもちろん、非常に高速である、メモリ専用mnesiaテーブル(私はまだ無効にコピーされたディスクを保つ)に格納されています。ディスクへの永続化は、たとえシステム障害(ビットトレント暗黙の回復力を考慮してさえも)に対してもサービスをより弾力性にさせ、時間の経過とともにトレント関連の情報を最小限に抑える(完了したダウンロード数)。 (http://mcaprari.github.com/peasy-torrent-tracker/) –

関連する問題