erlang的ets和dets

       随手笔记,随手想到了就随手记,昨天在自己搭建一个小型游戏系统的时候正好说到不知道做些什么,但是不管做什么,都肯定离不开进程,离不开进程的话肯定也离不开ets。

       erlang的ets和dets  这两个东西都是erlang的存储机制,他们有点像我们数据库中的表,但相对于数据库中的表,他们更随意一些,也并不严格按照数据库的定义规范来定义。

       ets是一种在内存上进行读写操作的存储表机制,相对ets来讲,他的生命周期是由进程来完全控制的,也就是说ets所存在的进程一旦消亡,那么ets也就随之消亡了,一个进程可以拥有很多个ets表来为这个进程服务,以上就是在我在实际使用ets之后,对于ets的一些直观的理解。

       ets应该怎么存,ets其实可以随意的进行存储,只要你先创建一个表,那么表里你写什么都可以,先来个简单的

ets:new(map, [set,public,named_table, {read_concurrency,true}]),
ets:insert(map,{map_id,10001}),
ets:insert(name,{map_name,<<新手村>>})。

EMapId = ets:new(map, [set,public,{read_concurrency,true}]),
ets:insert(EMapId,{map_id,10001}),
ets:insert(EMapId,{map_name,<<新手村>>})
 
 

 类似的我们就是这样去创建和插入一个表,你可以看一下两套创建插入的区别,缺少了named_table的表就必须使用表的标识号来进行操作,这是一个十分有用的参数配置(pubilc和name_table),第一个的三种参数可以很好的对表的所属进行规范,而后者对于程序的编写者

ets:new(map, [set,public,named_table, {read_concurrency,true}])

 

       来说说参数问题,

       表类型

       set类(key,Value),要求key是不可以重复的

       ordered_set(key, Value), Value中的元组会进行排序

       bag类 (key, Value)   , key可以重复,并可以有多个key,但是不能(key, Value)完全相同,

       duplicate bag(key,Value)很变态,对于kv对没有硬性要求。

       公开类型

       private,私有表标志只有该进程可读写

       public 创建公开表,所有知道这个表的表示的进程都可以对这个表进行读写,

       protected 创建受保护的表,于public不同的是,只可读,不可写,

       named_table 可以直接使用name来对表进行操作针对本进程的调用

      

       ets内置方法并不是很多,如果有需要你完全可以去看一看帮助文档,于lists等方法一样都很容易理解,

       dets就是以文件的方式记录在硬盘上的文件,可以持久使用,于ets的基本操作大同小异,不过目前我没有具体使用过dets,因为我们的游戏使用了mnesia的缘故,所以一直以来一般持久操作的数据都使用数据库,过几天可以做一个dets的实验来体验一下

 

 

 

 

 

      

 

      

 

你可能感兴趣的:(erlang)