text: Mnesia，是使用Erlang程式語言編寫的分散式、軟實時資料庫管理系統。它也是作為開放電信平臺的一部分發布的。描述.Mnesia 與 Erlang 都是愛立信公司為與電信相關的軟實時分散式高可用的計算工作而開發的。它既不是為了通用辦公型資料處理設計的資料庫管理系統。也無意於替代基於 SQL 語言的系統。它是為了幫助 Erlang 實現資料管理系統類的資料持久化而存在的。比起帶有SQL的資料庫伺服器，它與像 Berkeley DB 這樣的嵌入式資料庫管理系統更相似。資料庫模型.表中的“行”代表了包含一個鍵值以及一個數據域的記錄。這條資料域可能是一個包含任意複雜形式的 Erlang 資料結構的元組。關係型特性.資料庫模型是關係型的，但它並不是用大家比較熟悉的 SQL 操作的。一個數據庫中的多個表可以在互相之間構建聯絡。Mnesia 高可用的一個關鍵特性就在於資料庫中的表可以重新配置，並且可以在節點之間互相遷移。你不僅可以在資料庫執行的時候這樣操作，甚至還可以在資料庫正在讀寫的時候操作。編碼.Mnesia 的查詢語言不是 SQL 語言，而是 Erlang 本身。這也意味著它可以讓開發者直接使用 erlang 語言的特性來表達事務，開發者可以僅僅使用一個語言開發一個完整的應用程式。事務.Erlang 是函數語言程式設計語言。Mnesia 正是基於這一點來做到 ACID 事務的。作為事務執行的函式塊僅僅只是一個非常普通的被稱為函式物件的 Erlang 構造體。寫成單條 Mnesia 語句為 codice_1。 這樣一來就可以使原始碼變得要比 SQL 的 codice_2 / codice_3 配對的語法更清晰，同時也避免了在過程中沒有關閉事務的問題。又因為 Erlang 的函式式特性，巢狀事務也非常簡單。也可以在多個結點裡釋出事務。以這種方式使用事務可以讓語義保持一致，同時也讓編寫庫程式碼在上下文保持一致的效果。Mnesia 的一般編碼風格是總是使用事務。考慮到效能問題，Mnesia 也支援使用者使用“髒操作”來避免使用事務。這些操作雖然是對 ACID 原子性以及隔離性的妥協，但也提供了大概10倍的吞吐量。除此以外，它還提供了將資料儲存在記憶體中的選項，然而這麼做會丟失 ACID 的永續性。有效執行.Mnesia 是 LYME web 應用程式棧的一部分。這與 LAMP 類似，但它是基於 Erlang。用 Erlang實現會帶來一個效率上的好處，那就是開發出來的應用程式自始至終是執行在單個虛擬機器上的。LYME 充分利用了這一點，因為連 Yawsweb 伺服器都是由 Erlang 實現的。地址空間在資料與程式碼之間都是共享的，包括 Mnesia 的表資料。起源和許可.Mnesia 和 Erlang 都是愛立信計算機科學實驗室開發的。他們都是作為開源軟體釋出的。Mnesia 是基於Mozilla公共許可證的衍生版釋出的。他們都是根據開源 Erlang 公共許可證發行的。ejabberd.將 Mnesia 嵌入到基於 Erlang 的 Jabber 守護程序 ejabberd 也是一個選項。
metadata: erhwenkuo/wikipedia-zhtw
metadata: Mnesia
metadata: https://zh.wikipedia.org/wiki?curid=6015783