Mnesia是一個分散式資料庫管理系統(DBMS),適合於電信和其它需要持續運行和具備軟實時特性的Erlang套用,是構建電信套用的控制系統平台開放式電信平台(OTP)的一部分。
基本介紹
- 外文名:mnesia
- 屬於:分散式資料庫管理系統
- 適合:電信具備軟實時特性的Erlang套用
- 意義:構建電信套用控制系統平台一部分
1.1 關於Mnesia,1.2 Mnesia資料庫管理系統(DBMS ),1.2.1 特性,1.2.2 附加的應用程式,名稱來歷,
1.1 關於Mnesia
電信系統的數據管理與傳統的商業資料庫管理系統(DBMS)有很多相似之處,但並不完全相同。特別是許多不間斷系統所要求的高等級容錯,需要將資料庫管理系統與應用程式結合運行在相同地址空間等導致我們實現了一個全新的資料庫管理系統Mnesia[m'niːzɪə]。Mnesia與Erlang程式語言密切聯繫並且用Erlang實現,提供了實現容錯電信系統所需要的功能.Mnesia是專為工業級電信套用打造,使用符號程式語言Erlang寫成的多用戶,分散式資料庫管理系統。
Mnesia試圖解決典型電信系統的數據管理問題,具備一些在傳統資料庫中通常找不到的特性。電信套用有許多不同於傳統資料庫管理系統的需求。用Erlang語言實現的應用程式需要具備寬廣的特性,這是傳統資料庫管理系統無法滿足的。Mnesia的設計要求如下:
1.快速實時的鍵(key)/值(value)查找
2.主要用於運營和維護的非實時複雜查詢
3.由於分散式套用導致的分散式數據
4.高容錯
5.動態重配置
6.複雜對象
Mnesia與其它大部分資料庫管理系統的區別在於其是被設計用於解決電信套用中的典型數據管理問題。因此,Mnesia有許多傳統資料庫的概念,如事務和查詢,也有許多電信套用數據管理系統的概念,如高速實時操作,可配置的容錯等級(在複製的意義上)以及不停機進行重新配置的能力等。Mnesia與Erlang程式語言是緊耦合的,使得Erlang幾乎成為資料庫程式語言。其最大的好處是在運算元據時由於資料庫與程式語言所用的數據格式不同而帶來的阻抗失配問題完全消失。
1.2 Mnesia資料庫管理系統(DBMS )
1.2.1 特性
Mnesia 包含的下列特性組合後可以產生一個可容錯的分散式資料庫管理系統:
資料庫模式(schema)可在運行時動態重配置;
表能被聲明為有諸如位置(location),複製(replication)和持久(persistence)等屬性;
表能被遷移或複製到多個節點來改進容錯性,系統的其它部分仍然可以對表進行存取來讀、寫和刪除記錄;
表的位置對程式設計師是透明的。程式通過表名定址,由系統自身保持對表位置的追蹤;
這些特性的細節在下面章節中描述。
1.2.2 附加的應用程式
QLC和Mnesia Session可以與Mnesia協同產生一些增強Mnesia操作能力的函式。Mnesia Session和QLC都有其自己的文檔作為OTP文檔集的一部分。
下面是Mnesia Session和QLC與Mnesia協同使用時的主要特性:
QLC具有為Mnesia資料庫管理系統最佳化查詢編譯器的能力,從根本上讓DBMS更高效;
QLC能用作Mnesia的資料庫程式語言,它包括被稱為列表表達式("list comprehensions") 的標記方法並且能用來對表的集合做複雜的資料庫查詢;
Mnesia Session是Mnesia資料庫管理系統的一個接口;
Mnesia Session允許外部程式語言(即除了Erlang以外的語言)訪問Mnesia DBMS。
1.2.2.1何時使用Mnesia
在下列類型的套用中使用Mnesia:
需要複製數據的套用;
需要對數據執行複雜搜尋的套用;
需要使用原子事務來同步更新多條記錄的套用;
需要用到軟實時特性的套用。
另一方面,Mnesia可能不適合以下類型的套用:
處理純文本或二進制檔案數據的程式;
僅需查詢字典的套用可使用標準庫模組dets, 這是ets模組的磁碟版;
需要磁碟日誌設施的套用應優先使用disc_log 模組;
不適合硬實時系統。
更詳細內容請參考《mnesia用戶手冊》
名稱來歷
Why Is the DBMS Called Mnesia?
The original name was Amnesia. One of our bosses didn’t like the name. He said,
“You can’t possibly call it Amnesia—you can’t have a database that forgets things!”
So, we dropped the A, and the name stuck.
“You can’t possibly call it Amnesia—you can’t have a database that forgets things!”
So, we dropped the A, and the name stuck.