首页 文章

最终与erlang一致的mnesia数据库 . 最好的做法是谁?

提问于
浏览
5

我在erlang写了一个bittorrent跟踪器 . 鉴于服务的性质,我不需要绝对的一致性(即客户可以完全满意稍微过时的同行列表或torrent状态) .

到目前为止,我的策略是在RAM中创建mnesia表并启用disc_copies,这样当日志大小超过一定大小时,mnesia会自动将内存转储到磁盘 .

如果服务器崩溃,某些信息将丢失 . 没有大碍 .

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

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

-TeO

3 回答

  • 1

    您可能想要结帐rediserldis . Redis采用第二种方法:一切都存储在内存中,然后定期转储到磁盘 .

  • 1

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

  • 2

    对于你的原始问题,这肯定是偏离主题的,但如果你真的在编写一个纯粹的跟踪器,那么最好完全放弃持久性并将数据保存在内存中 .

    对于最小的跟踪器,声明只有几个字节:SHA1-hash为16字节,对等IP和端口为6字节,还有一些字节,因为您还需要保留时间戳 . 但即使有一点开销,你也可以在内存中保存数百万条记录 .

相关问题