ETS与DETS

  • 前言
  • 演示区别
  • 总结

前言

前面学习了ETS表与DETS表,也知道了他们的区别,但都过于干巴巴,现在我们来演示一下

演示区别

采用gen_sever进行演示

tab.erl

-author("01").-module(tab).
-behaviour(gen_server).
%%%=======================EXPORT=======================
-export([start/0, start_link/0, stop/1, get/2, put/3, get_dets/2]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
%%%=======================INCLUDE======================
%%%=======================RECORD=======================
%%%=======================DEFINE=======================
-define(TAB_NAME, my_table).
-define(DATA_FILE, data_store).
%%%=======================TYPE=========================
%%%=================EXPORTED FUNCTIONS=================
start() ->gen_server:start(?MODULE, [], []).start_link() ->gen_server:start_link(?MODULE, [], []).%% ----------------------------------------------------
%% Description: 获取dets表 中key的值[{key,value}]
%% ----------------------------------------------------
get_dets(Pid, Key) ->gen_server:call(Pid, {get_dets, Key}).
%% ----------------------------------------------------
%% Description: 获取ets表 中key的值
%% ----------------------------------------------------
get(Pid, Key) ->gen_server:call(Pid, {get, Key}).
%% ----------------------------------------------------
%% Description: 向dets和ets中分别存入值
%% ----------------------------------------------------
put(Pid, Key, Value) ->gen_server:call(Pid, {put, Key, Value}).stop(Pid) ->gen_server:call(Pid, stop).init([]) ->{ok, Dets} = dets:open_file(?DATA_FILE, [{type, set}, {repair, true}]), %%创建或打开dets表Tab = ets:new(?TAB_NAME, [set, named_table]), %%创建dets表{ok, {Dets, Tab}}.handle_call({get, Key}, _From, Data) ->{reply, ets:lookup(?TAB_NAME, Key), Data};handle_call({put, Key, Value}, _From, Data) ->case ets:insert_new(?TAB_NAME, {Key, Value}) oftrue ->dets:insert_new(?DATA_FILE, {Key, Value}),{reply, insert_ok, Data};false ->{reply, insert_fail, Data}end;
handle_call({get_dets, Key}, _From, Data) ->{reply, dets:lookup(?DATA_FILE, Key), Data};
handle_call(stop, _From, Data) ->{stop, normal, ok, Data}.handle_cast(_Msg, State) ->{noreply, State}.handle_info(_Info, State) ->{noreply, State}.terminate(_Reason, Data) ->dets:close(?DATA_FILE),Data.code_change(_OldVsn, State, _Extra) ->{ok, State}.


可以看见,我们分别向ets表与dets表插入了{a,2}这条数据,但当gen_server服务关闭了,重新打开后获取不到ets表中{a,2}这条数据,但可以获取到dets表中这条数据。

总结

DETS是ETS的磁盘实现版本,它们之间的主要不同在于:

  • DETS中没有ordered_set类型的表;
  • DETS磁盘文件的大小不能超过2 GB;
  • 表的创建和关闭有些变化。创建新的数据库表要调用dets:open_file/2,关闭这个表可以调用dets:close/1。此后,可以调用dets:open_file/1重新打开该表
  • ETS表格内部的操作是原子的,可以保证数据的一致性。对于ETS表格的操作,要么全部成功执行并提交,要么在失败时回滚。DETS表格没有提供像ETS那样的原子性操作。

ETS与DETS区别相关推荐

  1. 《Erlang程序设计》第十五章 ETS和DETS:大数据的存储机制

    第十五章 ETS和DETS:大数据的存储机制 Table of Contents 第十五章 ETS和DETS:大数据的存储机制 15.1 表的基本操作 创建和打开表 插入表 查找元组 释放表 15.2 ...

  2. 基于Erlang语言的视频相似推荐系统 | 深度

    作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) [导语]:作者在上一篇文章<基于内容的推荐算法>中介绍了基于内容的推荐算法的实现原理.在本篇文 ...

  3. 30 分钟学 Erlang

    30 分钟学 Erlang (一) Shawn_xiaoyu https://www.jianshu.com/p/b45eb9314d1e 本文写给谁看的? 那些已经有过至少一门编程语言基础,并且需要 ...

  4. EMQ学习 ---集群

    emqttd集群设置管理 一.先来看EMQ的文档定义:http://emqtt.com/docs/v1/cluster.html emqttd集群设置管理 假设部署两台服务器s1.emqtt.io, ...

  5. Erlang(起个中文名:易浪)不能错过的盛宴

    评:erlang(起个中文名:易浪),在穿戴设备技术,云技术,大数据,游戏服务器等等高并发分布式必然大有用处,这个语言必火!-传统语言除了java和c,其他的必然会死去,今后一定会出现新的类erlan ...

  6. erlang mnesia数据库简单应用

    mnesia是erlang自带的分布式数据库,基于ets和dets实现的.mnesia兼顾了dets的持久性和ets的高性能,可以自动在多个erlang节点间同步数据库.最关键的是,mnesia实现了 ...

  7. 一位Erlang程序员的自白

    Erlang不能错过的盛宴 (快步进入Erlang的世界) 作者:成立涛 (litaocheng@gmail.com) 作为程序员,我们曾经闻听很多"业界动态","技术革 ...

  8. 一位Erlang程序猿的自白

    Erlang不能错过的盛宴 (快步进入Erlang的世界) 作者:成立涛 (litaocheng@gmail.com) 作为程序猿,我们以前闻听非常多"业界动态","技术 ...

  9. 100本最棒的web前端图书推荐

    100本最棒的web前端图书推荐 01.<JavaScript DOM编程艺术第二版(中文)> 语言:中文 类型:pdf 简介:这本书作为被大家推荐的最多的前端入门书籍是有道理的. 他能真 ...

最新文章

  1. RecylerView动画组件RecylerViewAnimators
  2. java项目皮肤包_java swing项目皮肤包+使用方法说明
  3. java 类的执行顺序_Java中类的执行顺序
  4. 在hibernate框架中配置显示sql语句
  5. openSUSE 11.2 安装QT(二) QtCreator
  6. 第 7 章 Neutron - 068 - Neutron 物理部署方案
  7. 2021Java笔试题总结!三星java经典手机游戏
  8. 玩出来的33岁亿万富翁-畅游CEO王滔
  9. SA8155 QNX 系统启动时序
  10. Chrome浏览器打开微信页面
  11. InstallShield:an error occurred streaming issetup.dll...
  12. java海马模拟android,Android ADB连接海马玩模拟器
  13. 获取网易云榜单列表100首音乐
  14. 所需即所获:IDE = _plugins_ + vim
  15. Capabilities
  16. MySQL 5.7.17 Group Relication(组复制)搭建手册
  17. 11.26黄金原油最新行情走势分析及多空操作建议实时布局
  18. CCNA培训(四)20210718day04
  19. 未来计算机相关资料,“诺奖级”材料!有望成为未来计算机和消费电子产品的“新基建”...
  20. css图片填充的几种方式

热门文章

  1. 乐视手机优化服务器,乐视手机卡顿怎么办?新技能Get让你的乐视手机顺畅自如...
  2. 自动分页的面板制作|QQ面板|java|Swing
  3. 纳芯微:NSPGD1可满足家用电器液位高度精确测量需求
  4. word转PDF出现多页空白页问题
  5. c语言国二资料,国二C语言精讲资料.doc
  6. 第三代搜索引擎何去何从?
  7. 计算机用户管理模板禁用,简单快捷解决系统管理员设置了系统策略 禁止进行此安装,本次操作由于这台计算机限制而被取消...
  8. 项目管理 : 工程合同管理中风险识别及防控措施
  9. PTA:7-135 过年了,回家吧 (35分)(天梯赛,dijkstra+解析)
  10. c语言在线考试系统的需求分析,基于C/S架构的通用计算机在线考试系统