ets

  :ets.newtable_name, pattern)

  第一个参数是表名,第二个参数是表的设置选项。

  :set  一个key,一个数据,无序

  :ordered_set  一个key,一个数据,有序; 1 == 1.0

  :bag  一个key,多个数据, 不可重复

  :duplicate_bag  一个key,多个数据,可重复

  :public  任何进程可读写

  :protect  拥有者进程可读写,其他进程可读

  :private  只有拥有者可读写

  :named_table  为ets表命名,替代它的id。有该参数时 :ets.new 返回 named_table 对应的表名,使用 insert 等函数时使用。注:在使用 named_table 的情况下同一项目中不能出现 :est.new 相同的表

  :ets.inserttable_name, object)  如果当前键已存在,则覆盖

    table_id = :ets.new:test1, [:set, :public])
    :ets.inserttable_id, {1, ["2", "xx"]})
    :ets.inserttable_id, {[3, 4], [13, 98, 97]})

   

  :ets.inserttable_name, object)  如果当前键已存在,则返回false

  :ets.matchtable_name, pattern)

  我们使用原子 :"$1":"$2":"$3" 等等来表示匹配中所使用的变量。其中的数字只用来表示其在返回值中的位置,而非匹配时的位置。不想要的部分我们可以用 :"_" 来忽略掉。

:ets.matchtable_id, {1, :'$1'})    ["2", "xxx"]

 :ets.matchtable_id, {[3, :’$2′], :’$1′})    [[13, 98, 97, 4]]

  

  :ets.match_objecttable_name, pattern)

   match_object/2,这个函数忽略那些变量而直接返回整个对象

  :ets.matchtable_id, {[3, :'$2'], :'$1'})    [{[3, 4}, [13, 98, 97]}]

  

  :ets.tab2listtable_name)

  返回一个 ETS 表的所有对象数据的列表

  :ets.selecttable_name, match_spec)  :ets.fun2msfun)

  这两个函数通常联用, :ets.fun2ms 返回一组用于 :ets.select 匹配的模式

  :ets.lookuptable_name,  key)

  返回key对应的对象

  :ets.firsttable_name)

  返回第一个元素的键

  :ets.nexttable_name, key)

  返回当前键的下一个键

   

  :ets.delete_matchtable_name, pattern) 

  删除匹配成功的数据

  :ets.deletetable)

  删除整张表

  :ets.deletetable, key)

  删除key指向的一组数据

  :ets.safe_fixtabletable, true/false)

  锁定表使其可以安全遍历,锁定一个类型是 set,bag 或 duplicate_bag 的表,使其可以安全遍历表里的数据。在一个进程里调用 ets:safe_fixtableTab, true) 可以锁定一个表,直到在进程里调用 ets:safe_fixtableTab, false) 才会解锁,或进程崩溃。如果同时有几个进程锁定一个表,那么表会一直保持锁定状态,直到所有进程都释放它(或崩溃)。有一个引用计数器记录着每个进程的操作,有 N 个持续的锁定操作必须有 N 个释放操作,表才会真正被释放。当一个表被锁定,一序列的 ets:first/1 和 ets:next/2 的调用都会保证成功执行,并且表里的每一个对象数据只返回一次,即使在遍历的过程中,对象数据被删除或插入。在遍历过程中插入到表里的新数据可能由 ets:next/2 返回(这取决有键的内部顺序)。

  一个被锁定的表是不会有被删除的对象数据从表里被实际删除,直到它被释放。如果一个进程锁定一个表,并不释放它,那些已删除的对象数据所占用的内存将永远不会得到释放。对表操作的性能也会显著降低。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注