ETS存储数据

特点

1.ETS常驻内存,存储键值表,可以被多个进程共享。
2. 当ETS表被丢弃或控制它的erlang进程终止,ETS表中的数据就会被清除。
3. ETS表中保存元组,元组中默认第一个元素是元组的键,通过键向表里插入和提取元组。
4. ETS表分为异键表(各个元组中的键是唯一的)、有序异键表(键唯一并且元组被排序)、同键表(键可以不唯一)和副本同键表(键不唯一并且有相同的元组)

基本操作

  • 创建新表或打开现有表
    spec ets:new(Name, [Opt]) -> TableId
    Opt选项:默认情况下[Opt]为[set, prtected, {keypos, 1}]。
  1. 类型: set, ordered_set, bag, duplicate_bag
  2. private(私有表,只有创建表的进程能读取写入)、public(公共表,任何进程都可以读取写入,用户必须确保读取和写入互不冲突)、protected(受保护的表,任何进程都可以读取,只有创建表的进程才能写入)
  3. named_table,设置了此选项,Name可用于后续表的操作
  4. {keypos, K},设置元组中键的位置。
	Modes = [set, ordered_set, bag, duplicate_bag].
	lists:foreach(func(Mode) -> 
					TableId = ets:new(test, [named_table, Mode, private]) 
					end, Modes).
  • 向表中插入一个或多个元组
	ets:insert(TableId, [{a, 1}, {b, 2}]).
	ets:insert(TableId, {c, 3}).
  • 在表里查找某个元组
    lookup(TableId, Key),查询匹配Key的元组列表
  • 删除表
	ets:delete(TableId)

ETS表的效率

  • 异键表与有序异键表
    异键表使用散列表表示,插入时间恒定,有空间开销;
    有序异键表用平衡二叉树表示,插入时间为logN。
  • 同键表和副本同键表
    使用散列表表示,同键表在每次插入时需要与ETS表中所有相同键的元组比较是否相等,比副本同键表更低效。
  • 存储
    ETS表保存在单独的存储区域,与正常的内存进程无关,被创建它的进程所有,当进程挂了或者使用ets:delete,表被删除。
    插入元组时,将数据从进程栈复制到ETS表,查询表时,将找到的元组复制到进程栈。
    二进制存储在自己的堆外存储区域,可以被多个进程和ETS共享,在进程间传递二进制数据非常高效,向ETS插入包含二进制的元组也非常高效。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值