erlang学习:用ETS和DETS存储数据

作用

ets和dets是两个系统模块,可以用来高效存储海量的Erlang数据。

ETS和DETS执行的任务基本相同:它们提供大型的键值查询表。ETS常驻内存,DETS则常驻磁盘。ETS是相当高效的:可以用它存储海量的数据(只要有足够的内存),执行查找的时间也是恒定的(在某些情况下是对数时间)。DETS提供了几乎和ETS一样的接口,但它会把表保存在磁盘上。因为DETS使用磁盘存储,所以它远远慢于ETS,但是运行时的内存占用也会小很多。另外,ETS和DETS表可以被多个进程共享,这就让跨进程的公共数据访问变得非常高效。

ETS表广泛应用于那些必须以高效方式操作大量数据的应用程序,以及用非破坏性赋值和"纯"Erlang数据结构编程的开销过大之时。

ETS和DETS表保存的是元组。

下面是ets初步学习的代码示例

erlang 复制代码
-module(ets_test).

-export([]).

%% API
-export([start/0]).

start() ->
  lists:foreach(fun test_ets/1,
    [set, ordered_set, bag, duplicate_bag]).

test_ets(Mode) ->
  TableId = ets:new(test, [Mode]),   %%创建一个指定类型的ets表
  ets:insert(TableId, {a, 1}),
  ets:insert(TableId, {b, 2}),
  ets:insert(TableId, {a, 1}),
  ets:insert(TableId, {a, 3}),
  List = ets:tab2list(TableId),
  io:format("~-13w => ~p~n", [Mode, List]),
  ets:delete(TableId).

其中代码演示了四种模式下的ets会创建一个什么类型的表

set下为异键表,要求键是唯一的(异键)

ordered_set则是要求表的键是排好序的(有序异键)

bag则为同键表,允许多个元素拥有相同的键,但不能有相同键值对(同键)

而duplicate_bag不仅能够有相同的键,键所对应的值也能够相同(副本同键)

以下是测试代码

可以看到输出结果与预期相符,set中只有最后输入的保留下来,键相同的都被后添加的覆盖掉了。而bag中没有相同的两个{a, 1},但duplicate_bag有

相关推荐
世人万千丶6 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
遇乐的果园9 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
遇乐的果园10 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
从零开始的代码生活_10 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
可乐奶茶sky11 小时前
AI Agent 学习
人工智能·学习
茯苓gao11 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
RD_daoyi13 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
chase。13 小时前
【学习笔记】PointWorld:迈向通用机器人操控的3D世界模型
笔记·学习·机器人
AOwhisky14 小时前
Python 学习笔记(第十三期)——运维自动化(下·前篇):远程命令执行——paramiko基础篇
运维·python·学习·云原生·自动化·运维开发·paramiko
前端世界14 小时前
MySQL 基础入门(学习第4天)——约束与 DML 操作详解
数据库·学习·mysql