Мнесия
Оригинальный автор(ы) | Джо Армстронг, Роберт Вирдинг, Дэн Гудмундссон и другие |
---|---|
Разработчик(и) | Эрикссон |
Стабильная версия | 4.15.4 / 19 июня 2018 г. |
Написано в | Эрланг |
Операционная система | Кросс-платформенный |
Платформа | Кросс-платформенный |
Тип | реляционными базами данных Система управления |
Лицензия | Лицензия Apache 2.0 (начиная с OTP 18.0) |
Веб-сайт | www |

Mnesia — это распределенная написанная реального времени, программная система управления базами данных на языке программирования Erlang . [1] Распространяется в рамках Open Telecom Platform .
Описание
[ редактировать ]Как и Erlang, Mnesia была разработана Ericsson в реальном времени для мягких распределенных и обеспечения высокой доступности, вычислений связанных с телекоммуникациями . Она не предназначалась ни для использования в качестве общей офисной для обработки данных системы управления базами данных , ни для замены систем на базе SQL . , подобное СУБД . постоянство Вместо этого Mnesia существует для поддержки Erlang, где требуется [2] Он имеет больше общего со встраиваемыми СУБД, такими как Berkeley DB, чем с любым сервером базы данных SQL.
Модель базы данных
[ редактировать ]«Строки» в таблицах представлены как записи, содержащие ключевое значение и поле данных. Это поле данных, в свою очередь, может представлять собой кортеж , содержащий структуру данных Erlang любой сложности.
Типы серверной части
[ редактировать ]В Mnesia есть три встроенных типа таблиц: ram_copies, disk_copies и disk_only_copies.
Ram_copies
[ редактировать ]Данные находятся в памяти, а размер таблицы ограничен доступной памятью и поддерживается таблицей ETS (хранилище терминов Erlang).
Копии_дисков
[ редактировать ]Данные находятся в памяти, но также сохраняются на диске, поддерживаемом disk_log. Disc_copies поддерживались таблицами Dets до 30 сентября 2001 года, с выпуском Erlang R7B-4. [3]
Disc_only_copies
[ редактировать ]Данные хранятся только на диске и поддерживаются Dets (дисковая версия ETS). [4] Формат файла Dets использует 32-битные целые числа со знаком для смещений файлов и имеет ограничение в 2 ГБ, как и Disc_only_copies. [3]
Серверные плагины
[ редактировать ]Из-за ограничений, наложенных Dets предложил поддержку других плагинов бэкэнда. , Ульф Вигер [5] и они были добавлены к Мнесии. Кларна добавила LevelDB. бэкэнд-плагин [6] в то время как Aeternity добавила внутренний плагин RocksDB . [7]
Реляционные функции
[ редактировать ]Модель базы данных является реляционной, но это не то, что может ожидать человек, знакомый с SQL. База данных содержит таблицы. Отношения между ними моделируются как другие таблицы. [8]
Ключевой особенностью подхода высокой доступности Mnesia является то, что таблицы можно переконфигурировать внутри схемы и перемещать между узлами не только во время работы базы данных, но даже во время операций записи.
Кодирование
[ редактировать ]Языком запросов Mnesia является сам Erlang, а не SQL . [9] Он обеспечивает простое представление транзакций как естественную особенность Erlang, позволяя разработчикам использовать один язык во всем приложении.
Транзакции
[ редактировать ]Эрланг — функциональный язык . Mnesia использует это для получения ACID поддержки транзакций . Функциональный блок, который запускается как транзакция, представляет собой обычную конструкцию Erlang, называемую функциональным объектом (или Fun ). [10] и вызывается единственным оператором Mnesia mnesia:transaction(F)
. Это может привести к более четкому исходному коду, чем парный BEGIN
/ COMMIT
синтаксис SQL и таким образом позволяет избежать проблемы незакрытых транзакций внутри процедуры.
Опять же, из-за функциональной природы Erlang вложенные транзакции просты. Также возможно распределять транзакции по нескольким узлам (т.е. отдельным серверам). Семантика использования транзакций таким образом остается единообразной, что упрощает написание библиотечного кода, одинаково работающего в любом контексте.
Общий стиль кодирования для Mnesia всегда будет использовать транзакции. По соображениям производительности он также поддерживает намеренные « грязные операции », которые позволяют избежать транзакций. Они ухудшают атомарность и изоляционные свойства ACID , но обеспечивают примерно в 10 раз большую пропускную способность. [11] Кроме того, существуют альтернативы в памяти, хотя они теряют долговечности свойство ACID .
Эффективное исполнение
[ редактировать ]Mnesia является частью стека веб-приложений LYME . Это похоже на LAMP , но основано на Erlang. Реализация на Erlang обеспечивает повышение эффективности за счет использования одной виртуальной машины во всем приложении. LYME использует это, поскольку веб-сервер Yaws также реализован на Erlang.
Адресное пространство разделяется (хотя и безопасно в Erlang) между кодом и данными, включая данные таблицы Mnesia. [1] [12]
Происхождение и лицензирование
[ редактировать ]Mnesia и Erlang были разработаны Лабораторией компьютерных наук Эрикссон. Они были выпущены как программное обеспечение с открытым исходным кодом . Mnesia выпускается под производной общественной лицензией Mozilla . [13] Начиная с OTP 18.0 они публикуются в соответствии с лицензией Apache License 2.0 с открытым исходным кодом . Версии до OTP 18.0 публиковались под открытой лицензией Erlang Public License . [14]
еджабберд
[ редактировать ]Mnesia также является опцией, встроенной в демон Jabber на основе Erlang , ejabberd . [15]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б Хокан Маттссон; Ханс Нильссон; Клаас Викстрем (1999). «Mnesia — распределенная надежная СУБД для телекоммуникационных приложений» (PDF) . Архивировано из оригинала (PDF) 22 сентября 2021 г. Проверено 25 сентября 2008 г.
- ^ «Цель Мнезии» . Проект Erlang с открытым исходным кодом.
- ^ Jump up to: а б «Эрланг — Вопросы по базе данных Mnesia» . www.erlang.org . Проверено 5 ноября 2021 г.
- ^ «Эрланг — Справочное руководство по Mnesia» . www.erlang.org . Проверено 5 ноября 2021 г.
- ^ mnesia_rocksdb , вечность, 18 октября 2021 г. , получено 5 ноября 2021 г.
- ^ mnesia_leveldb , Klarna AB, 3 ноября 2021 г. , получено 5 ноября 2021 г.
- ^ mnesia_rocksdb , вечность, 18 октября 2021 г. , получено 5 ноября 2021 г.
- ^ «Руководство по началу работы с Mnesia» . Проект Erlang с открытым исходным кодом.
- ^ «Справочное руководство Mnesia (v 4.4.5)» . Проект Erlang с открытым исходным кодом.
- ^ «6.17 Веселые выражения» . Проект Erlang с открытым исходным кодом.
- ^ Гэвин Террилл (20 августа 2007 г.). «Mnesia Erlang — распределенная СУБД для высокомасштабируемых приложений» . ИнфоQ .
- ^ «Основы производительности Mnesia» . Архивировано из оригинала 02 декабря 2012 г. Проверено 25 сентября 2008 г.
- ^ «Об Эрланге» . Проект Erlang с открытым исходным кодом.
- ^ «Общественная лицензия Erlang, версия 1.1» . Проект Erlang с открытым исходным кодом.
- ^ «Домашняя страница проекта ejabberd» .