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

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数据库的学习基本上就差不多

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • windows10 python 解决鼠标右键菜单中没有Edit with IDLE(不使用注册表编辑器)
  • 如何评估一个RAG(检索增强生成)系统-上篇
  • 大数据新视界 --大数据大厂之Flink强势崛起:大数据新视界的璀璨明珠
  • 场外期权合法吗?
  • b√最大矩阵和
  • 深度学习的零碎知识点
  • C#读取应用配置的简单类
  • npm通过代理解决安装包无法下载问题
  • (web自动化测试+python)1
  • react18基础教程系列-- 框架基础理论知识mvc/jsx/createRoot
  • 关于 PC打开“我的电脑”后有一些快捷如腾讯视频、百度网盘、夸克网盘、迅雷等各种捷方式在磁盘驱动器上面统一删除 的解决方法
  • MVC设计模式与delegate,tablview,Appdelegate,SceneDelegate
  • 大数据-131 - Flink CEP 案例:检测交易活跃用户、超时未交付
  • Java 设计模式-状态模式
  • prometheus基于consul的服务发现
  • Cookie 在前端中的实践
  • EOS是什么
  • Git初体验
  • Java IO学习笔记一
  • java概述
  • js学习笔记
  • Netty源码解析1-Buffer
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • python 装饰器(一)
  • SpiderData 2019年2月13日 DApp数据排行榜
  • v-if和v-for连用出现的问题
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 码农张的Bug人生 - 见面之礼
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 以太坊客户端Geth命令参数详解
  • 《天龙八部3D》Unity技术方案揭秘
  • AI算硅基生命吗,为什么?
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​ssh免密码登录设置及问题总结
  • ​TypeScript都不会用,也敢说会前端?
  • #nginx配置案例
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $forceUpdate()函数
  • $jQuery 重写Alert样式方法
  • (07)Hive——窗口函数详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (六)Hibernate的二级缓存
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转)一些感悟
  • .Net CF下精确的计时器
  • .net core 管理用户机密
  • .NET运行机制
  • @DependsOn:解析 Spring 中的依赖关系之艺术