2009-07-28 6 views
5

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

Odpowiedz

2

Być może zechcesz wypróbować redis & . Redis stosuje drugie podejście: wszystko jest przechowywane w pamięci, a następnie okresowo zrzucane na dysk.

1

Jest to z pewnością nie na temat w odniesieniu do pierwotnego pytania, ale jeśli naprawdę piszesz czystym trackerem, najlepiej byłoby całkowicie zrezygnować z utrzymywania i przechowywać dane wyłącznie w pamięci.

Dla minimalnego trackera, zgłoszenie waży tylko kilka bajtów: 16 bajtów dla skrótu SHA1, 6 bajtów dla adresu IP i portu peera oraz trochę więcej bajtów, ponieważ trzeba zachować znacznik czasu jako dobrze. Ale nawet przy odrobinie kosztów, będziesz w stanie dosłownie przechowywać miliony zapisów w pamięci.

+1

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