当前位置: 首页 > article >正文

erlang学习: Mnesia Erlang数据库4

表的类型和位置

内存表
它们的速度非常快,但是里面的数据是易失的,所以如果机器崩溃或者你停止了DBMS,数据就会丢失。

磁盘表
磁盘表应该不会受到系统崩溃的影响(前提是磁盘没有物理损坏)。
当Mnesia事务写入一个表并且这个表是保存在磁盘上时,实际上是事务数据首先被写入
了一个磁盘日志。这个磁盘日志会不断增长,里面的信息会每隔一段时间与数据库里的其他数据合并,然后磁盘日志里的条目就会被清除。如果系统崩溃了,磁盘日志就会在下一次系统重启时进行一致性检查,任何未合并的日志条目会先添加到数据库里,然后数据库才可用。
任何一个事务成功时,数据都应该已经正确写入到磁盘日志里,如果系统随后崩溃了,那么当它下次重启时,事务所做的改动应该会完好无损。
如果系统在事务进行过程中崩溃了,那么它对数据库所做的改动应该会丢失。
使用内存表之前,需要做一些试验来看看物理内存是否能容纳整个表。如果物理内存装不下内存表,系统就会频繁读写页面文件,这将会影响性能。
内存表是易失的,所以如果想构建一个容错式应用程序,就需要把内存表复制到磁盘上,或者把它复制为第二台机器的内存或磁盘表,或者两者皆有。

常见的表属性组合

mnesia:create_table(shop, [Attrs]).

它会在单个节点上创建一个常驻内存的表。
如果节点崩溃了,表就会丢失。
它是所有表里最快的一种。
内存必须能容纳这个表。

mnesia:create_table(shop,[Attrs,{disc_copies,[node()]}]).

它会在单个节点上创建一个常驻内存的表和一个磁盘副本。
如果节点崩溃了,表就会从磁盘恢复。
表的读访问很快,但写访问较慢。
内存最好能容纳这个表。

mnesia:create_table(shop,[Attrs,{disc_only_copies,[node()]}]).

它只会在单个节点上创建一个磁盘副本。
它用于那些因为太大而无法放入内存的表。
它的访问速度比带有内存副本的方案更慢。

mnesia:create_table(shop,[Attrs,{ram_copies,[node(),someOthernode()]}]).

它会在两个节点上各创建一个常驻内存的表。
如果两个节点都崩溃了,表就会丢失。
内存必须能容纳这个表。
可以在任何一个节点上访问这个表。

mnesia:create_table(shop,[Attrs,{disc_copies,[node()],someOthernode()}]).

它会在多个节点上创建磁盘副本。
无论哪个节点崩溃,我们都能恢复过来。
即使所有节点都崩溃了,表也不会丢失。

代码片段

在上次的代码中补充test即可,其中Attr格式如下所示即可创建相应数据库表

test() ->
  Attrs = {attributes, record_info(fields, shop)},
  mnesia:create_table(shop,[Attrs]).
%%  mnesia:create_table(shop,[Attrs,{disc_copies,[node()]}]),
%%  mnesia:create_table(shop,[Attrs,{disc_only_copies,[node()]}]).
%%  mnesia:create_table(shop,[Attrs,{ram_copies,[node(),some_node]}]),
%%  mnesia:create_table(shop,[Attrs,{disc_copies,[node()],some_node}]).

下面是运行截图,当时没有启动数据库,因此报了节点没有运行的错误,之后使用test函数创建数据库。由于我之前已经创建过了,这里说我已经创建了shop数据库,说明是可以创建成功的。
请添加图片描述

Mnesia数据库的学习基本上就差不多


http://www.kler.cn/a/301549.html

相关文章:

  • 文心一言编写小球反弹程序并优化
  • 使用Axios函数库进行网络请求的使用指南
  • 【工具插件类教学】在 Unity 中使用 iTextSharp 实现 PDF 文件生成与导出
  • VSCode插件
  • 计算机使用常用工具(持续更新)
  • WebSocket协议在Java中的整合
  • redis基本数据类型和常见命令
  • Vue路由的分类与使用
  • mysql树形结构返回是否叶子节点
  • JAVA数据导出为Excel
  • BERT_
  • ubuntu 20.04 部署standalone dolphinscheduler
  • 【K8S实践笔记】Kubernetes(v1.28)集群搭建部署(1)
  • 爬虫3:re正则表达式获取数据
  • 中英双语共享充电宝投放管理投资理财源码五级分销返利+地图显示模式
  • 微擎忘记后台登录用户名和密码怎么办?解决方法
  • 深入理解 JavaScript 中的 `void` 操作符
  • 水壶问题记录
  • 微服务网关终极进化:设计模式驱动的性能与可用性优化(四)
  • Linux 基础命令-压缩与解压缩
  • 基于SpringBoot+Vue+MySQL的滑雪场管理系统
  • 社群空间站9.9付费入群系统易支付版全套搭建教程
  • 掌握 Ansible:高效自动化运维的完整教程
  • 【4.2】图搜索算法-DFS和BFS解单词拆分
  • Mysql事件操作
  • 计算机网络练级第二级————网络套接字1