當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。