我正在erlang编写一个bittorrent跟踪器。考虑到服务的性质,我不需要绝对的一致性(即客户可以完全满意于稍微过时的对等列表或流量状态)。最终与erlang一致的mnesia数据库。最佳做法?
到目前为止,我的策略是在启用了disc_copies的RAM中创建mnesia表,以便mnesia在日志大小超过特定大小时自动将内存转储到磁盘。
如果服务器崩溃,某些信息将会丢失。没什么大不了的。
另一种方法是将实例两个表(仅一个ram和一个磁盘)并且每分钟都有一个从ram到disk的进程副本。这更加幼稚,但可以转储内存中的部分内容,减少整体磁盘开销,并可能完全避免使用日志(实际上我对此最后一条语句不太确定)。
我相信还有很多其他的方法来做到这一点。你的是啥呢?
-TeO
目前宣布和洪流数据存储在仅存储器mnesia表(我仍然保持光盘复制禁用),这当然是非常快。坚持使用磁盘会使服务对系统故障更有弹性(即使考虑到BitTorrent隐性弹性)并随时间保持最小的洪流相关信息(完成下载的数量)。 (http://mcaprari.github.com/peasy-torrent-tracker/) – 2009-08-06 08:33:06