【问题标题】:Get record by value Erlang/Mnesia按值获取记录 Erlang/Mnesia
【发布时间】:2018-09-18 13:34:01
【问题描述】:

如何以更有效的方式获取记录(按价值)?

目前我正在这样做:

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

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

有没有更好的办法?

PS:“lists:keyfind”也需要先提供所有记录,然后再循环运行。

你们做得怎么样?

干杯!

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我在这里看不到 SQL 与函数式编程语言的关系。您可以使用任何流行的函数式语言进行 SQL 查询。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 2015-03-20
      • 2016-06-21
      • 2016-09-18
      • 1970-01-01
      • 2010-12-22
      • 2015-05-24
      相关资源
      最近更新 更多