ETS简介

ETS(Erlang Term Storage)是Erlang VM中内置的内存数据库,它可以使节点内的进程方便地共享数据。ETS中的数据只能被当前节点访问,不能跨节点共享,多节点共享数据需要用mnesia。Ets默认的表上限为1400,可通过环境变量 ERL_MAX_ETS_TABLES设置VM中ETS的新上限。

ETS的表类型有set, ordered_set, bag and duplicate_bag

  1. set:为key-value 一一对应,无论表中的数据量有多少,都可以在时间常量进行存取操作。
  2. ordered_set: key-value 一一对应,但表中的数据以有序的方式保存,存取时间和数据量有关,数据越多,需要的时间越长。
  3. bag: 一个key可以对应多个不同的实体,如 {1,abc},{1,abcde}。
  4. duplicate_bag: 一个key 对应多个实体,无论实体是否相同,都加入到ETS中,如表中可以存在多个{1,abc}实体。

ets:new(Name, Options)新建ETS表

如果Options为空列表[],则默认参数为:[set, protected, {keypos,1}, {heir,none}, {write_concurrency,false}, {read_concurrency,false}].

Options中的access默认为protected模式,只有主进程才能修改添加记录,设置为public则其他进程均可添加修改。
named_table会给ets一个别名,使其可以直接通过name访问。
{keypos,Pos}设置主键位置,默认为第一位。如果ets中保存的是record,则要注意keypos的设置,因为record第一位是record的名称。

{read_concurrency,boolean()},{write_concurrency,boolean()}是否并发读写。在读多写少的场合设置{read_concurrency,true}可以提高访问速度。如果ETS中不会出现多个进程修改同一条记录,设置write_concurrency对提高ETS的读写速度很有帮助,特别是开启SMP的情况下。write_concurrency设置为true,会自动开启read_concurrency

在开发中ETS中,最常用的函数为 lookup/2,insert/2,update_element/2。

Erlang技术分享内容均为原创,转载请标明本文地址
本文链接:http://www.kongqingquan.com/archives/453

此条目发表在Erlang分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

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

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">