erlang ets

1 篇文章 0 订阅
参见: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)......


%%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).
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据中心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值