将 `ordered_set` 用于 `select` 语句与 `>` 和 `<=` 以降低时间复杂性是不是有意义
Posted
技术标签:
【中文标题】将 `ordered_set` 用于 `select` 语句与 `>` 和 `<=` 以降低时间复杂性是不是有意义【英文标题】:Does it make sense to use `ordered_set` for `select` statement with `>` and `<=` for lowering time compexity将 `ordered_set` 用于 `select` 语句与 `>` 和 `<=` 以降低时间复杂性是否有意义 【发布时间】:2017-08-26 22:30:04 【问题描述】:我使用ordered_set
类型的ETS表,行看起来像integer_value, string
(基本上它没有值,只有键)。
当我执行ets:select(tab, [match_spec])
时,match_spec
所做的是选择所有行,其中integer_value
满足大于和小于理解。
我想知道,我是否受益,而不是扫描整个表,而是在对数时间内找到下限和上限,然后获取介于两者之间的所有元素,就像我从 SQL 表中所期望的那样,或者这样的功能在 ETS 中没有实现,并且使用ordered_set
代替普通的set
没有什么特别的好处吗?
【问题讨论】:
【参考方案1】:简单的方法是使用 timer:tc/3 函数来获取函数或 ets 模块函数的执行时间。
您可以使用 fprof 或 eprof 来分析您的代码,以了解调用了什么函数以及执行它需要多少时间。
这可以帮助你。
如果您不熟悉 erlang 分析器,我可以展示带有分析器的 ets set
和 ordered_set
的简单示例。
【讨论】:
我已经发现(在 2011 年最后更新的主题中 :))ets
无论如何都会扫描整个表,无论它是否已排序。但是努力获取信息和链接的“新鲜度”让我担心今天的 erlang 社区和 erlang 本身有多么活跃以上是关于将 `ordered_set` 用于 `select` 语句与 `>` 和 `<=` 以降低时间复杂性是不是有意义的主要内容,如果未能解决你的问题,请参考以下文章