Sto scrivendo un bittorrent tracker in erlang. Data la natura del servizio, non avrò bisogno di coerenza assoluta (ad esempio un cliente può essere perfettamente soddisfatto di un elenco di peer o stato di torrent leggermente obsoleto).Eventualmente coerente database mnesia con erlang. Le migliori pratiche a nessuno?
La mia strategia è stata finora quella di creare tabelle mnesia nella RAM con disk_copies abilitate, in modo da avere mnesia automaticamente il dump della memoria su disco quando le dimensioni del registro superano una certa dimensione.
Se il server si arresta in modo anomalo, alcune informazioni andranno perse. Non un grande affare.
Un approccio diverso potrebbe essere l'istanza di due tabelle (una ram solo e un solo disco) e una copia di processo da ram a disco ogni minuto o così. Questo è più ingenuo, ma consentirebbe di scaricare solo un sottoinsieme di ciò che è in memoria, riducendo il sovraccarico generale del disco ed eventualmente evitare l'uso di un registro del tutto (in realtà non sono sicuro di quest'ultima dichiarazione).
Sono sicuro che ci sono molti altri modi per farlo. Qual è il tuo?
-teo
Attualmente i dati di annuncio e torrent sono memorizzati in tabelle mnesia di sola memoria (mantengo ancora il disco copiato disabilitato), che è ovviamente estremamente veloce. Persistere su disco renderebbe comunque il servizio più resiliente a un errore di sistema (anche tenendo conto della resilienza implicita di bitter) e per mantenere nel tempo le informazioni minime relative al torrente (numero di download completati). (http://mcaprari.github.com/peasy-torrent-tracker/) –