erlang ets写入mysql_[Erlang-0008][OTP] 高效指南 -- 表和数据库(ets mnesia)

原文链接:http://www.erlang.org/doc/efficiency_guide/tablesDatabases.html

错误之处欢迎指正

7 表和数据库

7.1 ets,dets和mnesia

每一个Ets的例子都适用于Mnesia。通常所有Ets的例子都适用于Dets表。

Select/Match 操作

Ets和Mnesia的Select/Match操作代价很高。通常需要检索整张表。你应该尽可能优化你的数据结构,以便最少的使用select/match。但是,如果你确实需要select/match的话,它还是比tab2list高效很多的。接下来的章节会有这方面的例子,包括如何避免使用select/match。函数ets:select/2和mnesia:select/3会优于ets:match/2,ets:match_object/2,mnesia:match_object/3。

注意: 也有例外的情况可以不检索整张表,例如当检索ordered_set表时一个关键字不足以精确查找到结果,或者是Mnesia有第二索引,用这个字段去select/match。如果关键字能够精确匹配出结果,当然select/match是没有意义的,除非你有一个bag表,并且只对检索结果的一个子集感兴趣。

(NOTE:There are exceptions when the complete table is not scanned, for instance if part of the key is bound when searching an ordered_set table, or if it is a Mnesia table and there is a secondary index on the field that is selected/matched. If the key is fully bound there will, of course, be no point in doing a select/match, unless you have a bag table and you are only interested in a sub-set of the elements with the specific key.)

当创建一个被用作select/match操作的记录时,想绝大部分字段的值是'_'。最简单快捷的方法是下面这样

#person{age = 42, _ = '_'}.

删除一个元素

删除操作被当做是成功的,如果一个元素不在表里。因此,删除之前,所有尝试去检测元素是否存在于ets/mnesia表的操作都是非必要的。这里有个ets表的操作。

DO

...

ets:delete(Tab, Key),

...

DO NOT

...case ets:lookup(Tab, Key) of[]->ok;

[_|_] ->ets:delete(Tab, Key)end,

...

获取数据

不要重复获取已有的数据!假设你有一个模块处理抽象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值