5

我正在用erlang写一个bittorrent跟踪器。鉴于服务的性质,我不需要绝对的一致性(即,客户端可以对稍微过时的对等列表或洪流状态非常满意)。

到目前为止,我的策略是在启用 disc_copies 的 RAM 中创建 mnesia 表,以便在日志大小超过一定大小时让 mnesia 自动将内存转储到磁盘。

如果服务器崩溃,一些信息将会丢失。没有大碍。

另一种方法是实例化两个表(仅一个内存和一个磁盘),并每分钟左右将进程从内存复制到磁盘。这更天真,但允许仅转储内存中的一部分内容,从而减少整体磁盘开销并可能完全避免使用日志(我实际上不确定最后一条语句)。

我相信还有很多其他方法可以做到这一点。你的是啥呢?

-teo

4

3 回答 3

2

您可能需要检查rediserldis。Redis 采用第二种方法:所有内容都存储在内存中,然后定期转储到磁盘。

于 2009-07-28T23:54:09.330 回答
1

就您最初的问题而言,这肯定是题外话,但是如果您真的在编写纯跟踪器,那么最好完全放弃持久性并将数据仅保存在内存中。

对于一个最小的跟踪器,一个公告的重量只有几个字节:16 个字节用于 SHA1 哈希,6 个字节用于对等方的 IP 和端口,还有一些字节,因为您还需要保留时间戳。但即使有一点开销,您也可以将数百万条记录保存在内存中。

于 2009-08-06T02:33:16.957 回答
1

这是一个您可能感兴趣的项目http://github.com/jlouis/etorrent/tree/master

于 2009-07-28T15:29:19.660 回答