В конечном итоге совместимая база данных mnesia с erlang. Лучшие практики кто-нибудь?

Я пишу битторрент-трекер на erlang. Учитывая характер сервиса, мне не нужна абсолютная согласованность (т. е. клиент может быть вполне доволен немного устаревшим списком пиров или статусом торрента).

До сих пор моя стратегия заключалась в создании таблиц mnesia в ОЗУ с включенным disk_copies, чтобы mnesia автоматически выгружала память на диск, когда размер журнала превышает определенный размер.

В случае сбоя сервера часть информации будет потеряна. Не так уж и важно.

Другой подход состоял бы в том, чтобы создать экземпляр двух таблиц (только один ОЗУ и только один диск) и копировать процесс из ОЗУ на диск каждую минуту или около того. Это более наивно, но позволит выгрузить только подмножество того, что находится в памяти, уменьшив общие накладные расходы на диск и, возможно, вообще избегая использования журнала (на самом деле я не уверен в этом последнем утверждении).

Я уверен, что есть много других способов сделать это. Что у тебя?

-тео


person Matteo Caprari    schedule 28.07.2009    source источник


Ответы (3)


Вы можете проверить redis и erldis. Redis использует второй подход: все хранится в памяти, а затем периодически сбрасывается на диск.

person Jacob    schedule 28.07.2009

Вот проект, который может вас заинтересовать http://github.com/jlouis/etorrent/tree/master.

person Christian    schedule 28.07.2009

Это, безусловно, не по теме вашего первоначального вопроса, но если вы действительно пишете чистый трекер, то, возможно, лучше всего полностью отказаться от персистентности и хранить данные исключительно в памяти.

Для минимального трекера анонс весит всего несколько байтов: 16 байтов для хэша SHA1, 6 байтов для IP-адреса и порта пира и еще несколько байтов, так как вам также нужно будет сохранить временную метку. Но даже с небольшими накладными расходами вы сможете хранить в памяти буквально миллионы записей.

person earl    schedule 06.08.2009
comment
В настоящее время данные анонсов и торрентов хранятся в таблицах мнений только в памяти (я все еще держу копирование диска отключенным), что, конечно, очень быстро. Сохранение на диск в любом случае сделало бы сервис более устойчивым к системным сбоям (даже с учетом неявной устойчивости битторрентов) и сохранило бы минимальную информацию, связанную с торрентами, с течением времени (количество завершенных загрузок). (mcaprari.github.com/peasy-torrent-tracker) - person Matteo Caprari; 06.08.2009