在恒定时间内查找Mnesia中列的最大/最小值

时间:2012-09-04 14:45:13

标签: erlang mnesia

如何在恒定时间(或尽可能接近)中找到Mnesia表中索引列的最大值或最小值?

2 个答案:

答案 0 :(得分:5)

我会在Mnesia数据库之外做。保留一个explicit-min和explicit-max,通过一个进程在每次插入表时学习这些值。这样可以非常快速地对值进行恒定时间查找。

如果你可以使用O(lg n)时间,那么你可以使表成为ordered_set。从那里,first/1last/1应该给你你想要的东西,因为钥匙包含你所订购的东西。但这也会将其他查询的速度降低到O(lg n)。

第三个技巧是使用近似值。偶尔扫描一下表并记下最大值和最小值。然后,这将实现您想要的内容,但如果您上次扫描的时间很长,那么该值可能不会达到日期。

答案 1 :(得分:1)

好问题,但我认为不可能。快速浏览一下mnesia和qlc文档并没有给我任何关于这个主题的线索。

对我而言,mnesia中的二级密钥设施不完整,因此功能非常有限。更不用说在加载索引表时可怕的mnesia启动时间。

我认为在您的情况下最可靠的解决方案是进行显式索引。例如。创建并保持与表同步,并对主键进行排序,主键实际上是您想要索引的值。