作者:小朱-听听积 | 来源:互联网 | 2023-06-18 17:53
ErlangOTPVersion:24MnesiaDocumentationVersion:4.20导航:Database-Mnesia-Overview翻译内容来自官方文档概述电
Erlang/OTP Version: 24
Mnesia Documentation Version: 4.20
导航:Database - Mnesia - Overview
翻译内容来自官方文档
概述
电信系统中的数据管理有许多方面,传统的数据库管理系统(DBMS)解决了其中的一些方面,但不是全部。特别是,许多不间断系统需要高水平的容错能力,再加上DBMS与应用程序在同一地址空间中运行的要求,使我们实现了一种新的DBMS,称为Mnesia。
Mnesia在中实现,并与Erlang紧密耦合。它提供了电信系统所必需实现的容错功能。
Mnesia是一种多用户分布式DBMS,专门为用Erlang编写的工业级电信应用程序而设计,Erlang也是预期的目标语言。Mnesia试图解决典型电信系统所需的所有数据管理问题,并具有许多传统DBMS中通常不具备的功能。
电信应用需要广泛的功能组合,这些功能通常不是传统DBMS提供的。Mnesia旨在满足以下要求:
- 快速实时键值查找
- 复杂的非实时查询(主要用于操作和维护任务)
- 分布式数据(由于应用程序的分布式特性)
- 高容错性
- 动态重构
- 复杂对象
Mnesia解决了电信应用所需的典型数据管理问题,使其与大多数其他DBMS不同。它结合了传统DBMS中的许多概念(如事务和查询)与电信应用数据管理系统中的概念,如:
- 快速实时操作
- 用于容错的可配置复制
- 无服务中断的动态重构
Mnesia与Erlang的紧密耦合也是独一无二的。它几乎把Erlang变成了一种数据库编程语言,这带来了许多好处。最重要的是,DBMS使用的数据格式与用于操作数据的编程语言使用的数据格式之间不匹配的阻抗完全消失。
Mnesia数据库管理系统
特点
Mnesia具有以下特点,这些功能结合在一起可生成以Erlang编写的容错分布式数据库管理系统(DBMS):
- 可以在运行时动态重新配置数据库架构。
- 表可以声明为具有位置、复制和持久性等属性。
- 可以将表移动或复制到多个节点以提高容错性。系统中的其他节点仍然可以访问表以读取、写入和删除记录。
- 表位置对程序员来说是透明的。程序寻址表名,系统本身跟踪表位置。
- 事务可以是分布式的,并且可以在单个事务中执行多个操作。
- 多个事务可以并发运行,它们的执行由Mnesia完全同步,从而确保没有两个进程同时操作相同的数据。
- 可以为事务分配在系统中的所有节点上执行的属性,也可以不在任何节点上执行。
- 可以使用脏操作绕过事务,这样可以减少开销并快速运行。
下面几节将详细介绍上述所有特点。
查询列表理解
查询列表理解(QLC)可以与Mnesia一起使用,以生成增强其操作能力的专用函数。QLC有自己的文档作为OTP文档集的一部分。与Mnesia一起使用时,QLC的主要优势是:
- QLC可以优化Mnesia的查询编译器,从本质上说,这使系统更加高效。
- QLC可用作Mnesia的数据库编程语言。它包括一个称为列表理解的表示法,可用于对一组表执行复杂的数据库查询。
有关QLC的更多信息,请参阅STDLIB中的QLC手册页。
什么时候使用Mnesia
Mnesia非常适合以下应用:
- 需要复制数据。
- 执行复杂的数据查询。
- 需要使用原子事务同时安全地更新多个记录。
- 需要软实时特性。
Mnesia不适合以下应用:
- 处理纯文本或二进制数据文件。
- 只需要一个可以存储在光盘上的查找字典。此类应用程序可使用标准库模块dets,它是ets模块的基于光盘的版本。有关dets的更多信息,请参阅STDLIB中的dets手册页。
- 需要光盘记录设备。此类应用程序可以使用模块disk_log。有关disk_log的更多信息,请参阅Kernel中的disk_log手册页面。
- 需要硬实时性。