【发布时间】:2019-03-29 07:20:58
【问题描述】:
我是 Elixir 的新手,正在研究分布式系统。该系统共享几个全局表。对该表的写入很频繁,因此它们应该非常快。现在,我有时必须处理一个完整的表并从中生成一些 JSON,但我需要按照它们插入数据库的顺序处理此表中的记录 。 (我确实不需要需要任何硬性保证。偶发错误,例如两个交换的记录,甚至单个丢失的记录都是可以容忍的。)
不幸的是,mnesia afaik 没有像 SQL 的 auto_increment 这样的东西,现在我很难自己实现这个功能。
我能想到的解决方案:
-
存储一个 unix 时间戳(或其他类型的时间戳)作为记录的键。但是我觉得程序的正确性取决于时间之类的东西,这对我来说是错误的。两台机器上的时间不同步的情况将很难调试。而且时间的检索速度很慢(在某处阅读,如果我错了,请纠正我)Unix 时间戳的单位是一秒,这太大了。 - 存储一个全局计数器作为记录的键。可能比时间戳还要慢,而且我不确定使用 mnesia 计数器是否是个好主意,因为它们不适合分布式系统(再次,如果我错了,请纠正我)
- 找到一种神奇的方法来维持插入记录的顺序。这是我最喜欢的 ;)
【问题讨论】:
-
:mnesia.dirty_update_counter/3不能满足您的需求吗?它速度极快,完全符合您的需求。
标签: elixir mnesia distributed-database