当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang create_table(Name :: table(), Arg :: [create_option()])用法及代码示例


create_table(Name :: table(), Arg :: [create_option()]) ->
 t_result(ok)

根据参数 TabDef 创建一个名为 Name 的 Mnesia 表。该列表必须是 {Item, Value} 元组的列表,其中允许使用以下值:

  • {access_mode, Atom} 。访问模式默认为原子read_write,但也可以设置为原子read_only。如果 AccessMode 设置为 read_only ,则无法执行表更新。

    启动时,Mnesia 始终在本地加载 read_only 表,无论 Mnesia 何时以及是否在其他节点上终止。该参数返回表的访问模式。访问模式可以是 read_onlyread_write

  • {attributes, AtomList} 是应填充表的记录的属性名称列表。默认为 [key, val] 。除了键之外,表还必须至少有一个额外的属性。

    当访问记录中的单个属性时,没有必要,甚至不建议将任何属性名称硬编码为原子。请改用构造record_info(fields, RecordName)。它可用于 RecordName 类型的记录。

  • {disc_copies, Nodelist} ,其中 Nodelist 是该表应该具有光盘副本的节点列表。如果表副本的类型为 disc_copies ,则该表的该特定副本上的所有写入操作都将写入磁盘和表的 RAM 副本。

    一个节点上可能有 disc_copies 类型的复制表,而另一个节点上可能有另一种类型的复制表。默认为 []

  • {disc_only_copies, Nodelist} ,其中 Nodelist 是该表应该具有 disc_only_copies 的节点列表。仅磁盘表副本仅保存在磁盘上,与其他副本类型不同,副本的内容不驻留在 RAM 中。这些副本比 RAM 中保存的副本慢得多。

  • {index, Intlist} ,其中 Intlist 是 Mnesia 为其构建和维护额外索引表的属性名称(原子)或记录字段的列表。如果有可用索引,qlc 查询编译器也许能够优化查询。

  • {load_order, Integer} 。加载顺序优先级默认为0(零),但可以设置为任何整数。启动时首先加载具有最高加载顺序优先级的表。

  • {majority, Flag} ,其中 Flag 必须是布尔值。如果 true ,则对表的任何(非脏)更新都会中止,除非大多数表副本可用于提交。当在碎片表上使用时,所有碎片都被赋予相同的多数设置。

  • {ram_copies, Nodelist} ,其中 Nodelist 是该表应该具有 RAM 副本的节点列表。 ram_copies 类型的表副本不会基于每个事务写入磁盘。可以使用函数 mnesia:dump_tables(Tabs)ram_copies 副本转储到光盘。此属性的默认值为 [node()]

  • {record_name, Name} ,其中 Name 必须是原子。表中存储的所有记录都必须将此名称作为第一个元素。它默认与表名相同。

  • {snmp, SnmpStruct} 。有关 SnmpStruct 的说明,请参阅 mnesia:snmp_open_table/2 。如果此属性存在于 ArgListmnesia:create_table/2 中,则 SNMP 可以立即访问该表。因此,使用 SNMP 来操纵和控制系统的应用程序可以很容易地设计,因为 Mnesia 提供了组成 SNMP 控制应用程序的逻辑表和组成 Mnesia 表的物理数据之间的直接映射。

  • {storage_properties, [{Backend, Properties}] 将更多属性转发到后端存储。 Backend 目前可以是 etsdetsProperties是建表时发送到后端存储的选项列表。 Properties 不能包含 Mnesia 已使用的属性,例如 typenamed_table

    例如:

    mnesia:create_table(table, [{ram_copies, [node()]}, {disc_only_copies, nodes()},
           {storage_properties,
            [{ets, [compressed]}, {dets, [{auto_save, 5000}]} ]}])
  • {type, Type} ,其中 Type 必须是原子 setordered_setbag 之一。默认为 set 。在 set 中,所有记录都有唯一的键。在 bag 中,多个记录可以具有相同的键,但记录内容是唯一的。如果存储非唯一记录,则旧的冲突记录将被覆盖。

    请注意,disc_only_copies 目前不支持 ordered_set

  • {local_content, Bool} ,其中 Booltruefalse 。默认为 false

例如,以下调用创建 person 表(之前定义)并将其复制到两个节点上:

mnesia:create_table(person,
    [{ram_copies, [N1, N2]},
     {attributes, record_info(fields, person)}]).

如果要求 Mnesia 必须在表中插入的所有 person 记录的属性 address 上构建和维护一个额外的索引表,则会发出以下代码:

mnesia:create_table(person,
    [{ram_copies, [N1, N2]},
     {index, [address]},
     {attributes, record_info(fields, person)}]).

indexattributes的规范可以分别为hard-coded、{index, [2]}{attributes, [name, age, address, salary, children]}

mnesia:create_table/2 将记录写入表 schema 。该函数以及所有其他模式操作函数都是使用普通的事务管理系统来实现的。这保证了模式更新以原子方式在所有节点上执行。

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 create_table(Name :: table(), Arg :: [create_option()]) -> t_result(ok)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。