- 浏览: 28283 次
- 性别:
- 来自: 广州
最新评论
参见:http://www.cnblogs.com/me-sa/archive/2011/08/11/erlang0007.html
自己的看法:
1)如果一个表中数据太大,不要用ordered_set表。(这个表的好处在于可以按key来排序,但只能用这个唯一的key,实际工作中要按复杂的排序规则,所以不好用。
2)ets doc里面有大量的函数如next last, first基本是不用的。这些都是用c写的bif
不用于上层。只要用好ets.erl里面的上层导出就行了。---看看实现也适合。
3)......
自己的看法:
1)如果一个表中数据太大,不要用ordered_set表。(这个表的好处在于可以按key来排序,但只能用这个唯一的key,实际工作中要按复杂的排序规则,所以不好用。
2)ets doc里面有大量的函数如next last, first基本是不用的。这些都是用c写的bif
不用于上层。只要用好ets.erl里面的上层导出就行了。---看看实现也适合。
3)......
%%ets的使用 %%ets:new/2 %% name_table--------标记这个ets表,可以用ets_for_test来操作这个表 %% set ordered_set, bag , duplicate_bag 表结构 前二个key 唯一的 ordered_set有序的(注意这种表的查询是很严格的1与1.0是不同的) %%{keypos,Num} 以什么为key %%操作权限public protected private -record(role_data,{role_id,role_name,tel=13800000}). new(Tab,Type) -> ets:new(Tab, [named_table, Type, public, {keypos, #role_data.role_id}, {write_concurrency, true}, {read_concurrency, true}]). %%插入 %%这个函数不会按照值的前后顺序排序的(ordered_set表除外)。 insert(Tab) -> [begin ets:insert(Tab,#role_data{role_id=RoleID,role_name=RoleName,tel=Tel}) end||RoleID<-lists:seq(1,20),RoleName<-lists:duplicate(20,"test_zhong"),Tel<-lists:seq(13800001,13800020)], io:format("insert into table::Tab~w Data~w",[Tab,ets:tab2list(Tab)]). %%查找bif look_up(Tab,Key) -> T = ets:lookup(Tab,Key), io:format("look_up tab:~w:key:~w:result:~w",[Tab,Key,T]). %%数据太大了。一次性处理不过来就用分页 %%如果想返回表前50个元素: %%{M,C}= ets:match(Tab,'$1',50).就可以做到,便是这只是对数据太大了分布处理所有数据,不要想取出排名前50名的元素,因为只有ordered_set可以做到。 %%{M2,C2} = ets:match(Tab,C). %%... match(Tab,Spec,Limit) ->%%试下:tab = 你建的,spec='$1',limit=4 T = ets:match(Tab,Spec,Limit), io:format("match tab:~w:Spec:~w:Limit:~w:result:~w",[Tab,Spec,Limit]). %%其实最常用的的下面的查找条件函数 %%如果想返回表中满足条件的元素,最好的函数是 %%match_object(Tab, Pattern, Limit) -> {[Match],Continuation} | '$end_of_table' %%match_object(Continuation) -> {[Match],Continuation} | '$end_of_table' %%select(Tab, MatchSpec, Limit) -> {[Match],Continuation} | '$end_of_table' %%select(Continuation) -> {[Match],Continuation} | '$end_of_table' %%只获取数据数量的:select_count(Tab,MatchSpec) -> NumMatched %%其中重点在于MatchSpec的写法:最简单的用法: %%1)match_object(Tab,#r_record{id=45,_='_'}).%%_表示占位符可以任意字段,不可省略 %%2)macth_object(Tabl,{23,_}).%%可以是任务类型 %%3)复杂的只能用ets:fun2ms/2来 %%MS = ets:fun2ms(fun(Data=#r_record{id=ID})when ID>34 -> Data end), %%得到一个一MatchSpec %%match_object(Tab,MS,Limit).%或 %%select(Tab,MS,Limit). %%同理:match_delete/2,match_delete/3也是如此用法 %%遍历一个表做事 %%其实有ets:first/1返回第一个key ets:next/1,这些bif来实现 %%但是可以用ets:foldl/3来做!他的实现如下 %% foldl(F, Accu, T) -> %% ets:safe_fixtable(T, true), %% First = ets:first(T), %% try %% do_foldl(F, Accu, First, T) %% after %% ets:safe_fixtable(T, false) %% end. %% do_foldl(F, Accu0, Key, T) -> %% case Key of %% '$end_of_table' -> %% Accu0; %% _ -> %% do_foldl(F, %% lists:foldl(F, Accu0, ets:lookup(T, Key)), %% ets:next(T, Key), T) %% end. %%所以要是用遍历时就用ets:fold/3就可以了。那些last next这些太底层了。有封装好的。 %%查看表的详细情况可以用 %%返回所有的ets表(只在终端上显示) %%ets:all(). %%列出一个ets的表类型,使用内存,所有者信息|(只在终端上显示) %%ets:i(). %%最详细信息了 %%ets:info(Table).
发表评论
-
Erlang 简单的节点互连
2014-03-19 23:41 541自己写的游戏跨服初步构架,以后再一点点完善,先记下时间线哈。 ... -
简单erlang节点互连实验
2014-03-10 15:53 751如果erlang:节点test1,test2互连接: 1.节点 ... -
Erlang OTP gen_event (1)
2014-02-26 15:06 1054演示gen_event的运行过程: mod_event_ma ... -
Erlang OTP gen_event (0)
2014-02-26 14:30 1181原英文文档:http://www.erlang.org/erl ... -
erlang efficient guide 3
2013-08-19 22:19 1102* 3 Common Caveats * 3常见 ... -
erlang efficient guide 2
2013-08-18 01:02 8562 The Eight Myths of Erlang Per ... -
fun还是如以前一样狂跩吊么?
2013-08-16 22:26 610fun这么好用。为什么老大在最近都说不要用? gen:cal ... -
emacs 的erlang-flymake
2013-08-14 15:15 1456emacs 设置erlang-flymake erlang- ... -
erlang的编程规范
2013-03-26 17:17 1937Programming Rules and Conventio ... -
Erlang------Mnesia
2013-03-25 12:49 1697读erlang编程指南Mnesia笔记: 1.mnesia 是 ... -
进程环
2013-03-18 16:48 812编写一个程序,它生成N ... -
匿名函数fun
2012-12-15 16:12 805lists:map(fun/1,[1,2,3]). 小试匿名函 ... -
并发编程实战otp--open telecom platform 二
2012-10-10 23:17 1140第二章:Erlang语言精要。 shell 的启动参数h ... -
并发编程实战otp--open telecom platform 一
2012-10-10 23:16 11971.erlang 的进程模型: 并发的基本单位是进程, ... -
learn some erlang
2012-10-09 22:54 710Erlang has this very pragm ... -
erlang语句块的简洁使用
2012-09-25 22:48 668begin end语句块的简洁使用:问题描述:将一堆人 ... -
命令式编程语言的标杆
2012-09-25 09:47 681命令式编程语言的标杆: 1.进程必须是语言的核心; 2.任何进 ... -
emacs与erlang的完美结合
2012-09-23 22:48 12781.在emacs中使用c+x c+z 启动erlang she ...
相关推荐
### Erlang ETS表的研究 #### 摘要与研究背景 本文研究了在Erlang环境下使用一种相对较新的数据结构——Judy数组来实现内存数据库(Erlang ETS)的可能性。研究通过对比基于四种不同数据结构的ETS表性能来进行:...
或者自己创建 ETS 表并在 ui 上玩耍动机在一个地方聚合来自多个 erlang 节点的结果。 基于 HTTP 的 ETS 查询能力。 TODO: 客户端模式/集群模式 * 集群模式在它的子客户端模式机器上运行查询安装 make shellAPI 参考...
在Erlang中,ETS(Erlang Term Storage)是内置的一种高效、内存中的数据库,用于存储和检索Erlang术语。然而,ETS的一个限制是它不支持全局的、跨进程的数据访问。为了解决这个问题,`gproc`库应运而生。 `gproc`...
2. ETS表操作:使用Erlang的`ets:new/2`函数创建ETS表,`ets:insert/2`插入Record实例,`ets:lookup/2`或`ets:match_object/2`查询记录,`ets:update_element/3`更新Record字段,`ets:delete/1`删除表或`ets:delete_...
在Erlang中,处理大数据存储有多种方式,其中包括ETS(Erlang Term Storage)、DETS(Distributed Erlang Term Storage)、Mnesia以及MySQL等。下面将对这些存储方式进行详细解析。 1. ETS(Erlang Term Storage) ...
* 数据库层:使用Erlang的ETS、Mnesia、MySQL、MongoDB等数据库来存储游戏数据。 游戏服务器实现 在实现游戏服务器时,我们需要考虑以下几个方面: * 玩家和NPC的进程模型:使用Erlang的轻量级进程来模拟玩家和...
这涉及到监控ERTS的运行时参数,例如ETS(Erlang Term Storage)使用的内存、进程的数量和状态,以及SMP(对称多处理)支持程度等。 #### 3. 编码最佳实践 在Erlang开发中,最佳实践包括使用模式匹配、递归、消息...
ETS(Erlang Term Storage)和DETS(Distributed Erlang Term Storage)是Erlang中的两个内置数据库系统,用于存储和检索Erlang术语。ETS是内存中的数据库,适用于高速访问和低延迟需求,而DETS则提供了持久化存储。...
Port Driver 可能与其他 Erlang 外部接口技术,如 NIF(Native Implemented Function)或 ETS(Erlang Term Storage)进行了对比。 标签 "erlang post driver test" 强调了测试的焦点是关于 Erlang 的 Port Driver...
这包括了解ETS(Erlang Term Storage)和Dets(Disk ETS)的使用,以及如何监控和调整内存分配。 ##### 3.2 Erlang中的调试工具 调试是软件开发中不可或缺的环节,Erlang提供了许多强大的调试工具,例如Erlang的...
书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。...
它不仅包含顺序编程的基础知识,还深入探讨了文件和网络编程、OTP(Open Telecom Platform)、ETS(Erlang Term Storage)和DETS(Disc Erlang Term Storage)等高级主题,这些都是开发高效Erlang应用程序的关键技术...
在Erlang编程环境中,ETS(Erlang Term Storage)和Dets(Disk-based ETS)是两种重要的数据存储机制,它们提供了高效的数据管理和访问功能。这篇文章将深入探讨这两个概念,以及它们在实际开发中的应用。 ETS是...
- **ETS**:一种内存数据库,支持哈希和树索引,执行高效的匹配操作。 - **DETS**:持久化数据库,支持将数据保存到磁盘,但单个文件大小限制为2GB。 - **Mnesia**:分布式数据库,具备高度的可扩展性和容错性,所有...
- **多进程共享**: 多个Erlang进程可以共享一个ETS表。 - **并发访问**: 支持并发读写操作。 - **持久化**: 虽然默认是内存存储,但可以通过配置实现持久化。 #### 8. Erlang进程堆内存增长算法 - **算法特点**:...
4. **ETS (Erlang Term Storage)**:ETS 是一个内存中的数据库,用于快速访问和存储 Erlang 术语,适用于临时数据存储。 5. **Distributed Erlang**:Erlang 支持跨多台机器的分布式计算,通过节点间通信协议实现...
在Erlang的世界里,尽管变量的不可变性是其核心原则,但Erlang依然提供了两种变通的方法:ETS(Erlang Term Storage)和进程字典。然而,ETS虽然提供了一种原生的查询方式,将数据库操作无缝融入语言之中,但在性能...
此外,熟悉Erlang的编程语法和常用模块,如ETS(Erlang Term Storage)和Mnesia(分布式数据库管理系统),也是成为Erlang开发者的必备技能。对于在Windows环境中部署和管理Erlang服务,理解Windows服务和Erlang节点...