【发布时间】:2011-07-18 19:35:06
【问题描述】:
我正在尝试从一个碎片化的 mnesia 表中读取数据,该表在不久的将来可能会保存大量记录。这些读取也可能通过表的主键以外的其他键进行。
这两个选项哪个更有效?一个查询列表理解,还是一个记忆索引读取?
【问题讨论】:
标签: erlang
我正在尝试从一个碎片化的 mnesia 表中读取数据,该表在不久的将来可能会保存大量记录。这些读取也可能通过表的主键以外的其他键进行。
这两个选项哪个更有效?一个查询列表理解,还是一个记忆索引读取?
【问题讨论】:
标签: erlang
好吧,索引将需要更多磁盘空间。对于每个表片段,mnesia 将创建一个单独的索引文件。但是,从经验来看,索引读取更有效。
QLC 在运行时会消耗更多内存,尤其是在查询结果很多时。这将要求您使用查询游标。我建议您使用索引读取。索引读取对 RAM 来说根本不昂贵,因为它的正常读取虽然 mnesia 必须先查阅索引文件。在批量处理复杂的表关系和返回值评估时,QLC 非常有用。但是,当结果太多时,它会引入处理成本和内存。请注意,QLC 使用 mnesia:select/1,2 和 4(具体是哪个,我不确定),但我知道 select 是一种使 mnesia 遍历 serach 中的整个表以获取记录的操作。
Mnesia 索引读取优于查询列表理解
【讨论】: