【问题标题】:Eventually consistent mnesia database with erlang. Best practices anyone?最终与 erlang 保持一致的 mnesia 数据库。最佳实践有人吗?
【发布时间】:2023-03-16 08:35:01
【问题描述】:

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

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

如果服务器崩溃,一些信息将会丢失。没什么大不了的。

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

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

-teo

【问题讨论】:

    标签: erlang mnesia eventual-consistency


    【解决方案1】:

    这肯定与您最初的问题无关,但如果您真的在编写一个纯跟踪器,那么最好完全放弃持久性并将数据仅保存在内存中。

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

    【讨论】:

    • 目前,announce 和 torrent 数据存储在仅内存的 mnesia 表中(我仍然禁用光盘复制),这当然非常快。无论如何,持久化到磁盘将使服务对系统故障更具弹性(甚至考虑到 bittorrent 隐式弹性),并随着时间的推移保持最少的 torrent 相关信息(已完成下载的数量)。 (mcaprari.github.com/peasy-torrent-tracker)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        • 2012-11-01
        • 1970-01-01
        • 2017-06-22
        • 2013-11-10
        相关资源
        最近更新 更多