Piszę bittorrent tracker w erlangu. Biorąc pod uwagę charakter usługi, nie będę potrzebował absolutnej spójności (tzn. Klient może być całkowicie zadowolony z nieco nieaktualnej listy peerów lub statusu torrenta).Ostatecznie spójna baza danych mnesii z erlangiem. Najlepsze praktyki dla kogokolwiek?
Moja dotychczasowa strategia polegała na tworzeniu tabel mnesii w pamięci RAM z włączoną opcją disc_copies, więc aby mnesia automatycznie zrzuciła pamięć na dysk, gdy rozmiar logu przekracza pewien rozmiar.
Jeśli serwer ulegnie awarii, niektóre informacje zostaną utracone. Nic takiego.
Innym podejściem byłoby np. Dwie tabele (tylko jedna ramka i tylko jedna płyta) i mają kopię procesu z ram na dysk co minutę. Jest to bardziej naiwne, ale pozwoli na zrzucenie tylko podzbioru pamięci, redukując ogólne obciążenie dysku i ewentualnie całkowicie uniknąć użycia dziennika (w rzeczywistości nie jestem pewien co do tej ostatniej instrukcji).
Jestem pewien, że istnieje wiele innych sposobów, aby to zrobić. Co twoje?
-teo
Obecnie ogłoszenia i dane o torrentach są przechowywane w tabelach mnesii tylko dla pamięci (nadal zachowuję kopiowanie płyty wyłączone), co jest oczywiście bardzo szybkie. Utrzymanie na dysku spowodowałoby, że usługa byłaby bardziej odporna na awarię systemu (nawet w przypadku bittorrentowej niejawnej odporności) oraz na utrzymanie minimalnych informacji związanych z torrentami w czasie (liczba zakończonych pobrań). (http://mcaprari.github.com/peasy-torrent-tracker/) –