ETS 是erlang term strorage 的意思 文档见erl5.5.5/lib/stdlib-1.14.5/doc/html/index.html。 这个是beam里面很核心的一个功能。ets, dets, mnesia 组成了erlang的数据库,注意mnesia本身没有存储机制 它的存储就是ets 和dets。
用ets:i().看下可以知道
11 code set 254 11393 code_server
12 code_names set 48 5323 code_server
13 shell_records ordered_set 0 72 <0.25.0>
ac_tab ac_tab set 6 853 application_controller
file_io_servers file_io_servers set 0 279 file_server_2
global_locks global_locks set 0 279 global_name_server
global_names global_names set 0 279 global_name_server
global_names_ext global_names_ext set 0 279 global_name_server
global_pid_ids global_pid_ids bag 0 279 global_name_server
global_pid_names global_pid_names bag 0 279 global_name_server
inet_cache inet_cache bag 0 279 inet_db
inet_db inet_db set 21 528 inet_db
inet_hosts inet_hosts set 1 310 inet_db
也就是说erlang的kernel 和stdlib库的实现都很依赖于这个ets.
文档里面一句话: This module is an interface to the Erlang built-in term storage BIFs. ets.erl本身只是一个封装的模块 用于检查参数等等 实际的工作都是bif作的,所以效率非常好。
看下otp_src_R11B-5\erts\emulator\beam\bif.tab
#
# Bifs in ets module.
#
bif ets:all/0
bif 'erl.lang.ets':all/0 ebif_ets_all_0
bif ets:new/2
bif 'erl.lang.ets':new/2 ebif_ets_new_2
...
bif 'erl.lang.ets':match/1 ebif_ets_match_1
bif ets:match/2
bif 'erl.lang.ets':match/2 ebif_ets_match_2
bif ets:match/3
在emulator里面和ets实现有关的 有erl_db.c(界面) erl_db_hash.c(hash实现) erl_db_tree.c(tree实现) erl_db_util.c(match虚拟机等 ) 总代码有 将近有20,000行实现是很复杂的,据说下一版本会用jarray的算法来做效率更高。
ets的实现不是多线程安全的,数据不参加GC, 使用的时候要注意。
当我们要遍历ets的时候 可以用first/next来遍历 也可以用foldr foldl来看ets看成list来使用。但是这样使用的时候有效率问题 数据要从erts内部搬到process 当ets很大的时候就效率低。
这时候ets:select match MatchSpec来帮你了. ets内部实现了一个虚拟机把matchspec编译成opcode 然后eval的时候把需要的数据才拷贝到process去 大大减少了数据量. 这个方法类似于sqlite。
见db_match_set_compile 编译matchspec成opcode
db_prog_match 运算opcode 细节可以看下代码。
这还不够 ets 考虑到matchspec比较难写 又提供了一个功能 fun2ms 可以把标准的erlang fun转换成matchspec.请参考ms_transform.
有了这些功能的辅助 ets使用起来就很方便了。
分享到:
相关推荐
在Erlang中,ETS(Erlang Term Storage)是内置的一种高效、内存中的数据库,用于存储和检索Erlang术语。然而,ETS的一个限制是它不支持全局的、跨进程的数据访问。为了解决这个问题,`gproc`库应运而生。 `gproc`...
这些基准测试的结果提供了对不同数据结构在Erlang ETS中的表现进行深入分析的基础。 #### 数据结构简介 1. **AVL平衡二叉树**:是一种自平衡的二叉查找树,能够在添加或删除操作后自动保持平衡状态,从而确保查找...
【Erlang高级应用和原理】深入探讨 Erlang是一种高级编程语言,以其在并发处理、分布式计算和容错性方面的强大能力而闻名。它在国内和国外都有多个成功的应用案例,例如校内的广告平台、Sohu的白社会、阿里巴巴的...
Erlang深度分析所包含的内容非常广泛,涵盖了从Erlang虚拟机的工作原理、性能优化、最佳编程实践,到最新的Erlang版本中新增特性的介绍。Erlang语言因其独特的并发模型、高效的分布式计算能力和灵活的网络编程接口,...
* 数据库层:使用Erlang的ETS、Mnesia、MySQL、MongoDB等数据库来存储游戏数据。 游戏服务器实现 在实现游戏服务器时,我们需要考虑以下几个方面: * 玩家和NPC的进程模型:使用Erlang的轻量级进程来模拟玩家和...
7. **标准库与第三方库**:Erlang的标准库介绍,如ETS(Erlang Term Storage)和Mnesia数据库,以及常用的第三方库如 Cowboy(Web服务器)和Rebar3(构建工具)。 8. **实战案例**:可能包含一些实际项目或案例研究...
Erlang数据库ETS(External Term Storage)工作原理分析 - **概念**: ETS提供了一种快速访问的键值存储方式。 - **特性**: - **多进程共享**: 多个Erlang进程可以共享一个ETS表。 - **并发访问**: 支持并发读写操作...
【标题】:“英雄远征erlang服务器源码含数据库” 【描述】:“Erlang是一种强大的编程语言,以其优秀的高并发性能和热更新能力而闻名。这个资源包含了一个Erlang服务器的源码,特别适合那些希望快速入门Erlang编程...
标题和描述均提到了对五种编程语言——Scala、Erlang、Groovy、Python以及它们各自的原理、比较和分析。这些语言各自拥有独特的特性和应用场景,在编程领域扮演着不同的角色。下面,我们将深入探讨每种语言的关键...
ETS是Erlang内置的一种内存数据库,用于存储和检索Erlang术语。它提供了高效且灵活的数据存储,适用于快速读写操作。ETS支持五种不同类型的表:set、ordered_set、bag、duplicate_bag和proplists,每种类型都有其...
### Erlang深度分析知识点 #### 1. Erlang VM分析 Erlang的虚拟机(VM)即Erlang Runtime System(ERTS),是Erlang系统运行的基础。它支持轻量级进程,提供了高效的并发处理能力。在性能方面,ERTS经过优化,能够...
ETS是Erlang内置的一种内存数据库,它允许开发者在进程间快速、方便地共享和存储数据。由于数据存放在内存中,ETS具有极高的读写速度,适合用于处理大量数据的实时应用。ETS提供了多种类型的表,如set、ordered_set...
通过分析`ets_test.erl`源码,我们可以深入理解Erlang中的Record是如何与ETS结合使用的,以及如何在实践中提高代码效率和可维护性。不过,由于具体源码未给出,这部分只能进行推测,实际的内容还需要查看源码文件...
Erlang OTP设计原理是一份深入探讨Erlang/OTP(Open Telecom Platform)框架中设计模式和组织代码原则的文档。Erlang OTP作为Erlang语言的中间件平台,提供了构建可扩展和容错系统的标准方法。 文档开篇就介绍了...
《远古封神Server:基于Erlang的服务器架构与MongoDB数据库集成解析》 本文将深入探讨"远古封神Server"项目,这是一个采用Erlang编程语言构建的游戏服务器,搭配MongoDB数据库来实现高效的数据存储和处理。Erlang以...
概要该项目允许通过 http 查询 Erlang ETS 表,以便其他语言/机制可以轻松获取数据库结果。例子该项目可以作为依赖项包括在内。 它在每个应用程序 env http_port的指定端口上启动牛仔应用程序,或者让底层操作系统...
Port Driver 在 Erlang 中的工作原理如下: 1. **创建端口**:Erlang 进程可以通过 `open_port/2` 函数创建一个新的端口,并指定端口的选项,如可执行文件路径、环境变量等。 2. **数据传输**:Erlang 进程通过端口...
ETS(Erlang Term Storage)和DETS(Distributed Erlang Term Storage)是Erlang中的两个内置数据库系统,用于存储和检索Erlang术语。ETS是内存中的数据库,适用于高速访问和低延迟需求,而DETS则提供了持久化存储。...
### Erlang VM (Erlang虚拟机)深入解析 #### Erlang简介 Erlang是一种通用、并发、强容错的编程语言,最初由...通过深入了解Erlang VM的工作原理及其特性,我们可以更好地利用其优势来设计和实现高效可靠的系统。