我正在用erlang编写一个bittorrent跟踪器。鉴于服务的性质, 我不需要绝对的一致性(即,客户可以对稍微过时的同行列表或torrent状态非常满意。)
到目前为止,我的策略是在RAM中创建mnesia表并启用disc_copies,因此当日志大小超过一定大小时,让mnesia自动将内存转储到磁盘。
如果服务器崩溃,某些信息将丢失。没什么大不了的。
另一种方法是实例化两个表(仅一个ram和一个磁盘),并且每分钟都有一个从ram到磁盘的进程副本。这更天真,但是只允许转储内存中的一部分内容,减少整体磁盘开销,并可能完全避免使用日志(我实际上不确定最后一条语句)。
我确信还有很多其他方法可以做到这一点。你的是什么?
-TeO
答案 0 :(得分:2)
答案 1 :(得分:1)
以下是您可能感兴趣的项目http://github.com/jlouis/etorrent/tree/master。
答案 2 :(得分:1)
对于您的原始问题,这肯定是偏离主题的,但如果您真的在编写纯粹的跟踪器,那么最好完全放弃持久性并将数据保留在内存中。
对于一个最小的跟踪器,一个宣告只有几个字节:SHA1-hash为16字节,对等IP和端口为6字节,还有一些字节,因为你需要保留一个时间戳。但即使有一点开销,你也可以在内存中保存数百万条记录。