Ich schreibe einen BitTorrent-Tracker in Erlang. Angesichts der Art des Dienstes, Ich brauche keine absolute Konsistenz (dh ein Client kann mit einer etwas veralteten Liste von Peers oder Torrent-Status vollkommen zufrieden sein).Schließlich konsistente MNS-Datenbank mit Erlang. Best Practice jemand?
Meine Strategie war bisher, mnesia-Tabellen im RAM mit disc_copies zu erstellen, so dass mnesia automatisch den Speicher auf die Festplatte ablegt, wenn die Größe des Protokolls eine bestimmte Größe überschreitet.
Wenn der Server abstürzt, gehen einige Informationen verloren. Keine große Sache.
Ein anderer Ansatz wäre, zwei Tabellen (nur ein RAM und nur eine Platte) zu instanzieren und jede Minute eine Prozesskopie von RAM auf Platte zu erstellen. Dies ist naiv, würde aber erlauben, nur eine Teilmenge dessen, was im Speicher ist, zu dumpen, den Overhead der gesamten Platte zu reduzieren und möglicherweise die Verwendung eines Protokolls insgesamt zu vermeiden (ich bin mir bei dieser letzten Aussage eigentlich nicht sicher).
Ich bin sicher, es gibt viele andere Möglichkeiten, dies zu tun. Welches ist deines?
-teo
Momentan werden die announce- und torrent-Daten nur in memory-memory-Tabellen gespeichert (ich behalte immer noch die kopierte Disk deaktiviert), was natürlich extrem schnell ist. Ein Festhalten auf Platte würde den Dienst auf jeden Fall widerstandsfähiger gegen einen Systemausfall machen (sogar unter Berücksichtigung der impliziten Bittorrent-Widerstandsfähigkeit) und um im Laufe der Zeit minimale torrentbezogene Informationen zu behalten (Anzahl der abgeschlossenen Downloads). (http://mcaprari.github.com/peasy-torrent-tracker/) –