我可以从mnesia订购获得的数据但是想知道是否可以在从mnesia查询时对数据进行排序,类似于在mysql中使用ORDER BY
答案 0 :(得分:1)
如果您有ordered_set
,则表示您已按键排序。否则,您可以使用lists:sort/2
。对于通过复杂结构内部的键或许多此类键进行排序,您可以使用Schwartzian_transform加快排序,即lists:sort/1
和两个lists:map/2
的组合或列表理解。对于更大量的数据,请考虑file_sorter
。
答案 1 :(得分:0)
直截了当的方法是使用ordered_set
表格类型正确告知@Hynek。但是,知道ordered_set
表的时间复杂度超过Mnesia中的set
表是有用的。
| Operation | Average | Worst Case |
|:---------:|:-------:|:----------:|
| Space | O(n) | O(n) |
| Search | O(1) | O(n) |
| Insert | O(1) | O(n) |
| Delete | O(1) | O(n) |
| Operation | Average | Worst Case |
|:---------:|:--------:|:----------:|
| Space | O(n) | O(n) |
| Search | O(log n) | O(n) |
| Insert | O(log n) | O(n) |
| Delete | O(log n) | O(n) |
如果ordered_set
表的成本不可承受,您可以考虑使用set
表并使用算法来记录您的记录。例如,一个简单的粗略可以存储记录的计数器以跟踪他们的订单,然后在编写记录时订购记录。重要的是按顺序编写它们或使用事务来避免竞争条件。阅读时,您可以根据您在写入阶段确定的顺序逐个获取所需的记录。