按价值Erlang / Mnesia获取记录

时间:2018-04-09 07:58:59

标签: erlang mnesia

如何以更有效的方式获得价值记录?

目前我正在这样做:

Coupon = [P || P <- kvs:all(company_coupon), P#company_coupon.company_id == C#company.id],

我的问题是针对kvs:all(...)。在数据库中,首先获取所有条目然后匹配它们通常是相当昂贵的。

有更好的方法吗?

PS:&#34;列出:keyfind&#34;还需要首先提供所有记录,然后通过循环运行它们。

你们是怎么做到的?

干杯!

2 个答案:

答案 0 :(得分:1)

如果之前将字段设置为键,则可以使用kvs:index(table,field,value):

#table{name=user,fields=record_info(fields,user), keys = [field]}

答案 1 :(得分:0)

当您使用像erlang或lisp这样的函数式语言时,在大多数情况下,遍历数据是不可避免的,而sql不需要它。因此,如果您将数据存储在支持sql的postgres数据库中,但是如果您不需要保存数据,那么最好使用sql执行此操作。