2009-07-28 15 views
5

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

Antwort

2

Sie können zur Kasse gehen redis & erldis. Redis nimmt den zweiten Ansatz: Alles wird im Speicher gespeichert und dann regelmäßig auf die Festplatte ausgegeben.

1

Dies ist sicherlich nicht in Bezug auf Ihre ursprüngliche Frage off-topic, aber wenn Sie wirklich eine reine Tracker schreiben, dann ist es am besten auf Persistenz vollständig verzichten und halten Sie die Daten ausschließlich im Speicher.

Für einen minimalen Tracker wiegt eine Ankündigung nur wenige Bytes: 16 Byte für den SHA1-Hash, 6 Byte für die IP und den Port des Peers und einige weitere Bytes, da Sie einen Zeitstempel als Gut. Aber selbst mit ein wenig Overhead können Sie buchstäblich Millionen von Datensätzen im Speicher halten.

+1

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/) –