erlang——ETS和DETS表学习笔记
来源:互联网 发布:侠客风云传 知乎 编辑:程序博客网 时间:2024/05/29 17:14
Ets和dets都是erlang用于高效存储大量erlang数据条目的两个系统模块。
ETS-> Erlang Term Storage
DETS -> disk ETS
ETS和DETS做同一件事:提供大型的“键-值”搜索表。
区别:ETS驻留在内存,DETS驻留在磁盘。
特性:在ETS中,存储数据多少与查询速度无关。
DETS比ETS节省内存。
DETS和ETS的表可以被多个进程共享,可以实现通过这2个模块来进行高效的数据交换。
一个ETS或DETS的表就是一系列Erlang元组。
ETS表中数据存储时临时的,当其被释放时,对应的数据也会全部丢弃。
DETS则不会,原因在于其存储方式。
ETS表不是Erlang本身实现的,它实际是有底层的运行系统实现的。
ETS表不会被垃圾回收。
操作-ETS和DETS有4种基本操作。
1.创建新表或打开已经存在的表。
ets:new
dets:open_file
2.将一个或多个元组插入表
insert(Tablename,X)
X可以是一个元组或元组列表
3.查找元组
lookup(Tablename,Key)
返回结果是匹配Key的元组
4.释放表
dets:close(TableId)
ets:delete(TableId)
表的类型
set,bags这2个类型都各自有两个变种,分别为:
set -> 表中每个元组的键值都不能相同。
ordered set -> 元组进行排序。
bag -> 多个元组可以有相同的键值,但不能有两个完全相同的元组。
duplicatebag -> 不仅多个元组可以有相同的键值,同一个元组也可以在表中出现多次。
元组第一个元素默认为表的键。
ETS表示用散列表来表示的(除了ordered set是二叉树来表示).
散列(hash)->存储元组的位置是通过hash function把元组的关键字映射到存储这个值的内存地址。
一个ETS表隶属于创建它的进程——当这个进程死掉了或者调用了ets:delete后,这个表就被删掉了。
运行结果:
ETS-> Erlang Term Storage
DETS -> disk ETS
ETS和DETS做同一件事:提供大型的“键-值”搜索表。
区别:ETS驻留在内存,DETS驻留在磁盘。
特性:在ETS中,存储数据多少与查询速度无关。
DETS比ETS节省内存。
DETS和ETS的表可以被多个进程共享,可以实现通过这2个模块来进行高效的数据交换。
一个ETS或DETS的表就是一系列Erlang元组。
ETS表中数据存储时临时的,当其被释放时,对应的数据也会全部丢弃。
DETS则不会,原因在于其存储方式。
ETS表不是Erlang本身实现的,它实际是有底层的运行系统实现的。
ETS表不会被垃圾回收。
操作-ETS和DETS有4种基本操作。
1.创建新表或打开已经存在的表。
ets:new
dets:open_file
2.将一个或多个元组插入表
insert(Tablename,X)
X可以是一个元组或元组列表
3.查找元组
lookup(Tablename,Key)
返回结果是匹配Key的元组
4.释放表
dets:close(TableId)
ets:delete(TableId)
表的类型
set,bags这2个类型都各自有两个变种,分别为:
set -> 表中每个元组的键值都不能相同。
ordered set -> 元组进行排序。
bag -> 多个元组可以有相同的键值,但不能有两个完全相同的元组。
duplicatebag -> 不仅多个元组可以有相同的键值,同一个元组也可以在表中出现多次。
元组第一个元素默认为表的键。
ETS表示用散列表来表示的(除了ordered set是二叉树来表示).
散列(hash)->存储元组的位置是通过hash function把元组的关键字映射到存储这个值的内存地址。
一个ETS表隶属于创建它的进程——当这个进程死掉了或者调用了ets:delete后,这个表就被删掉了。
简单的例子:
-module(ets_test).-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: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).
运行结果:
- erlang——ETS和DETS表学习笔记
- erlang学习笔记:ets和dets
- Erlang:ETS、Dets表
- erlang dets ets 压测
- Erlang大量数据的存储机制:ETS和DETS
- ERLANG —ets整理
- erlang 学习ets表-1
- erlang 学习ets表-2
- ets和dets的效率建议
- ets和dets的效率建议
- erlang内置大数据量数据库 ets,dets 初窥
- erlang内置大数据量数据库 ets,dets 初窥 .
- erlang中文手册——ets
- erlang中文手册——ets
- erlang中文手册——ets
- Erlang ets表
- erlang ets表的使用
- erlang ets
- 原来是这个样子的!
- js去除空格方法
- 未给任务“CreateRiaClientFilesTask”的必需参数“ClientFrameworkPath”赋值解决方法
- [C#] 網頁Html轉PDF檔(一行程式碼解決)
- 判断是否是IP
- erlang——ETS和DETS表学习笔记
- ecmall数据库表解析
- 完全复制沪深300指数
- Android中在屏幕上涂鸦的例子
- C++之异常处理
- 有关软件开发中的一些想法
- 从那一天起,你就成了我的全部
- 关于DM9000在ARM总线上的地址
- C# .net 字符串格式化,正则表达式,字符串操作