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

2024-09-04 21:52

本文主要是介绍erlang学习:用ETS和DETS存储数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作用

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

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

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

ETS和DETS表保存的是元组。

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

-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有

这篇关于erlang学习:用ETS和DETS存储数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137131

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下