
```erlang
mnesia:create_table(Name, Opts).
[
{type, bag||set||ordered_set|| duplicate bag}, %默认值 set
*{disc_only_copies||disc_copies||ram_copies, NodeList}, %默认值是 [node()],可以同时新建三种类型的表
{index,AttributeNameList}, %AttributeNameList 是一个原子类型的属性名列表
{snmp, SnmpStruct} %SnmpStruct 在 SNMP 用户指南中描述,表示该表可以立即通过简单网络管理协议(SNMP)来访问
{local_content, true} %表名对所有 Mnesia 点可见,但是内容对每个节点都是唯一的。这种类型的表只能在本地进行存取
*{attributes, record_info( fields, itemGene )},
{record_name, Name}, %指定表中所有记录的通用名
[{frag_properties,
[{n_fragments, 20}, {n_disc_copies, 1},
{node_pool, [node()]}]},
]
set -> 每一个元组的键值都不能相同
ordered_set -> 元组会进行排序
bag -> 多个元组可以有相同的键值,一条记录确定唯一性
duplicate_bag -> 多个元组可以有相同的键值,同一个元组可以在表中出现多次
local_content -> 应用需要一个其内容对每个节点来说在本地都是唯一的表,这种类型的表只能在本地进行存取
frag_properties %分片属性
mnesia:create_table( table_name, [{ram_copies, [a@yujian,b@yujian]}] ).建表
mnesia:system_info().
mnesia:table_info(Tab, Attr)
mnesia:system_info( running_db_nodes ).
mnesia:table_info( table_name, frag_properties ).
mnesia:dump_to_textfile(Filename)
mnesia:load_textfile/1
mnesia:backup("./backup.log").%二进制数据创建检查点,不受后面写数据影响
mnesia:restore("./backup.log", Args).%表写锁,必须要存在表
mnesia:install_fallback(Opaque, Args) -> ok | {error,Reason}
mnesia:uninstall_fallback(Args) -> ok | {error,Reason}
mnesia:dump_tables(TabList).
ets转储到磁盘上
Mnesia 事件处理
mnesia:subscribe(Event-Category) %确保所有 Event-Category 类型事件的副本会发送给调用进程
mnesia:unsubscribe(Event-Category) %删除对 Event-Category 类型事件的订阅
Event-Category 可以是原子 system 或元组{{table, Tab, simple}或{table, Tab, detailed}二者之一。
旧的事件类别{table, Tab}与事件类别{table, Tab, simple}是一样的。订阅函数激活对事件的订阅。
对函数 mnesia:subscribe/1 求值即将事件作为消息发送给进程。
系统事件的语法是{mnesia_system_event, Event},表事件的语法是{mnesia_table_event, Event}。
系统事件和表事件的含义描述如下:所有的系统事件通过 Mnesia 的通用事件处理器(gen_event handler)来订阅,
默认的通用事件处理器是 mnesia_event,但可通过应用参数 event_module 来改变。
这个参数的值必须是一个模块名,该模块是使用标准库(STDLIB)的 gen_event 模块来实现的完整的事件处理模块。
mnesia:system_info(subscribers) 和 mnesia:table_info(Tab, subscribers)用来确定哪些进程订阅了何种事件。
文件
FALLBACK.BUP %这个文件被称为备份文件,包含一个初始模式。如果我们在 mnesia:create_schema/1 函数中指定了一个以上的节点,同一个备份文件将在所有这些节点上被创建
Schema.DAT %在备份文件 FALLBACK.BUP 中的模式被用来生成文件 schema.DAT
Table.DCL %Mnesia 插入此操作到 foo.DCL 中,随后在 Mnesia 认为.DCL 文件已经变得太大时,再将数据移入.DCD 文件
Table.DCD %写到 foo 表中的所有数据最终将存储在这个文件中
LATEST.LOG %被 Mnesia 用来对基于磁盘的事务做日志
PREVIOUS.LOG %在日志被转储之前,文件 LATEST.LOG 改名为 PREVIOUS.LOG,并且创建一个新的LATEST.LOG 文件
在默认状态下,只要日志中写入了 100 条记录或者过去了 3 分钟这两种情况之一出现,Mnesia 即转储日志。
可用两个应用程序参数-mnesia dump_log_write_threshold WriteOperations 和-mnesia dump_log_time_threshold MilliSecs 来对此进行控制
.DAT %是建有索引的文件,可用指定的键在这些文件中高效地插入和搜索记录
mnesia:set_master_nodes(Tab,
Nodes)
mnesia:set_master_nodes(Nodes)
如果应用程序发现由于通信失败导致数据库的不一致,设定从哪个节点更新数据
mnesia:force_load_table(Tab)
可用来强行加载表而无视其被激活的加载机制
数据备份、操作备份数据
mnesia:backup_checkpoint(Name, Opaque, [Mod])。这个函数执行一个包含在检查点中的表备份。
mnesia:backup(Opaque, [Mod]) 。 这个函数激活一个覆盖全部 Mnesia 表的新检查点并且执行一次备份。备份以最大冗余度执行 (也可参见函数
mnesia:activate_checkpoint(Args), {max, MaxTabs} and {min, MinTabs})。
mnesia:traverse_backup(Source,[SourceMod,]Target,[TargetMod,]Fun,Ac)。这个函数能用来读存在的备份,从一个现存的备份创建一个新的备份,或者在不同介质之间拷贝备份。
mnesia:uninstall_fallback()。这个函数移除先前安装的回滚文件。
mnesia:restore(Opaque, Args)这个函数从先前的备份恢复表。
mnesia:install_fallback(Opaque, [Mod])这个函数能够配置成从一个现存的备份重启 Mnesia并且重新加载数据库表以及可能的模式表。当数据或模式表损毁时,此函数被用于灾难恢复。
```
- 1.学习
- 1.1安装与运行环境
- 1.2编辑器、集成开发环境与其它工具
- 1.3代码编译运行
- 2.基础
- 2.1 Erlang终端
- 2.2 基础语法
- 2.2.1 异常处理
- 2.3 数据类型
- 2.4 操作符
- 2.5 模块属性
- 3.库函数
- 3.1 常用模块
- 3.2 OTP模块
- 3.2.1 函数
- 3.2.2 receive
- 3.2.3 .app.src文件
- 3.2.4 _app.erl
- 3.2.5 _sup.erl
- 3.2.6 gen_server
- 3.2.7 gen_fsm
- 3.3 erts
- 3.3.1 init
- 3.3.2 BIF
- 3.3.3 NIF
- 3.4 kernel
- 3.4.1 code_server
- 3.4.2 inet
- 3.4.3 net_kernel
- 3.4.4 net_adm
- 3.4.5 error_logger
- 3.4.6 global
- 3.4.7 application
- 3.5 stdlib
- 3.5.2 array
- 3.5.4 base64
- 3.5.5 binary
- 3.5.6 c
- 3.5.8 calendar
- 3.5.9 code
- 3.5.11 dict
- 3.5.12 erl_
- 3.5.13 file
- 3.5.14 filelib
- 3.5.15 gb_trees
- 3.5.16 gb_sets
- 3.5.17 gen_tcp
- 3.5.18 gen_server
- 3.5.19 httpc
- 3.5.20 init_parse
- 3.5.21 init
- 3.5.22 inet
- 3.5.23 io
- 3.5.24 lists
- 3.5.25 maps
- 3.5.26 os
- 3.5.27 ordsets
- 3.5.28 proplists
- 3.5.29 queue
- 3.5.30 qlc
- 3.5.31 re
- 3.5.32 random
- 3.5.33 rfc4627-json
- 3.5.34 string
- 3.5.35 ssh
- 3.5.36 soft
- 3.5.37 sets
- 3.5.38 supervisor
- 3.5.39 tuple
- 3.5.40 timer
- 3.5.41 unicode
- 3.5.42 cpu
- 3.5.43 math
- 3.5.44 zip
- 3.5.45 shell
- 3.6 SASL
- 3.7 asn1
- 3.8 compiler
- 3.9 tools
- 3.10 OS_Mon
- 3.11 crypto
- 3.12 Port
- 4.工具
- 4.1 Erlang预处理器
- 4.2 Erlang节点
- 4.3 Erlang多节点
- 4.3.1主从节点
- 4.4 Epmd
- 4.5 断点工具
- 4.6 dialyzer
- 4.7 dbg-debug 模块
- 4.7.1 dbg
- 4.8 Erlang跟踪工具
- 4.9 etop
- 4.10 profiling
- 4.10.1 fprof
- 4.10.2 eprof
- 4.10.3 cprof
- 5.进阶
- 5.1 TCP粘包、大小端
- 5.2 rebar发布系统
- 5.3 ErlangVM 心跳
- 5.4 Erlang GC
- 5.5 Erlang Time
- 5.6 Erlang 启动
- 5.6.1 SASL配置
- 5.7 Erlang系统限制
- 6.项目
- 6.1 the_seed
- 6.2 network
- 6.3 parse_tool
- 6.4 cache
- 7.项目研究
- 7.1 Mnesia
- 7.1.1 Mnesia模式
- 7.1.2 Mnesia操作
- 7.1.3 Mnesia增删改查
- 7.1.4 Mnesia过载分析
- 7.1.5 Mnesia高级特性
- 7.1.6 分布式
- 7.1.7 Mnesia表分片
- 7.1.8 Mnesia锁
- 7.1.9 dets
- 7.1.10 ets
- 7.2 Ejabberd
- 7.2.1 mod_echo.erl
- 7.2.2 hooks for module developers
- 7.2.3 Events list
- 7.3 cowboy
- 7.4 rebar
- 7.4.1 rebar Wiki
- 7.4.2 rebar.config.script
- 7.5 RIAK CS
- 7.6 Leofs
- 7.6.1 简介
- 8.资料整理
- 8.1 资料
- 8.1.1 Erlang的调度原理
- 8.1.2 虚拟机代码执行原理
- 8.1.3 SMP
- 8.2 杂记
- 8.2.1 设计