Mnezja
Oryginalni autorzy | Joe Armstrong, Robert Virding, Dan Gudmundsson i inni |
---|---|
Deweloperzy | Ericssona |
Wersja stabilna | 4.15.4 / 19 czerwca 2018
|
Napisane w | Erlang |
System operacyjny | Międzyplatformowe |
Platforma | Międzyplatformowe |
Typ | System zarządzania relacyjną bazą danych |
Licencja | Licencja Apache 2.0 (od OTP 18.0) |
Strona internetowa |
Mnesia to rozproszony , miękki system zarządzania bazą danych w czasie rzeczywistym napisany w języku programowania Erlang . Jest dystrybuowany w ramach Open Telecom Platform .
Opis
Podobnie jak w przypadku Erlanga, Mnesia została opracowana przez firmę Ericsson do miękkich, rozproszonych i wysokodostępnych prac obliczeniowych w czasie rzeczywistym związanych z telekomunikacją . Nie był pomyślany jako ogólny system zarządzania bazą danych do przetwarzania danych w biurze ani do zastąpienia systemów opartych na SQL . Zamiast tego Mnesia istnieje, aby wspierać Erlang, gdzie wymagana jest trwałość podobna do DBMS . Ma więcej wspólnego z osadzonym systemem DBMS, takim jak Berkeley DB, niż z jakimkolwiek serwerem bazy danych SQL.
Model bazy danych
„Wiersze” w tabelach są reprezentowane jako rekordy zawierające wartość klucza i pole danych. To pole danych może z kolei być krotką zawierającą strukturę danych Erlanga o dowolnej złożoności.
Typy zaplecza
Mnesia ma trzy wbudowane typy tabel: ram_copies, disc_copies i disc_only_copies.
Ram_copies
Dane rezydują w pamięci, a rozmiar tabeli jest ograniczony dostępną pamięcią i są wspierane przez tabelę ETS (erlang term storage).
kopie_dysku
Dane znajdują się w pamięci, ale są również utrwalane na dysku wspieranym przez disk_log. Disc_copies były wspierane przez Dets do 30 września 2001 r. wraz z wydaniem Erlang R7B-4.
Disc_only_copies
Dane znajdują się tylko na dysku i są wspierane przez Dets (dyskowa wersja ETS). Format pliku Dets używa 32-bitowych liczb całkowitych ze znakiem dla przesunięć plików i ma limit 2 GB, podobnie jak disc_only_copies.
Wtyczki zaplecza
Ze względu na ograniczenia narzucone przez Dets , Ulf Wiger zasugerował obsługę innych wtyczek backendowych, które zostały dodane do Mnesii. Klarna dodała wtyczkę zaplecza LevelDB , podczas gdy Aeternity dodała wtyczkę zaplecza RocksDB .
Cechy relacyjne
Model bazy danych jest relacyjny, ale nie jest tym, czego mógłby oczekiwać ktoś zaznajomiony z SQL. Baza danych zawiera tabele. Relacje między nimi są modelowane jak inne tabele.
Kluczową cechą podejścia Mnesia do wysokiej dostępności jest to, że tabele mogą być rekonfigurowane w ramach schematu i przenoszone między węzłami, nie tylko podczas działania bazy danych, ale nawet podczas operacji zapisu.
Kodowanie
Językiem zapytań Mnesii jest sam Erlang, a nie SQL . Pozwala na łatwą reprezentację transakcji jako naturalną cechę Erlanga, umożliwiając programistom używanie jednego języka w całej aplikacji.
Transakcje
Erlang jest językiem funkcjonalnym . Mnesia opiera się na tym, aby uzyskać transakcji ACID . Blok funkcjonalny, który jest uruchamiany jako transakcja, jest powszechnie stosowaną konstrukcją Erlanga zwaną Obiektem Funkcjonalnym (lub Zabawą ) i jest wywoływany przez pojedynczą instrukcję Mnesia mnesia:transaction(F)
. Może to prowadzić do czystszego kodu źródłowego niż sparowana BEGIN
/ COMMIT
SQL, a tym samym pozwala uniknąć problemu niezamkniętych transakcji w ramach procedury.
Ponownie, ze względu na funkcjonalny charakter Erlanga, zagnieżdżanie transakcji jest proste. Możliwa jest również dystrybucja transakcji w wielu węzłach (tj. oddzielnych serwerach). Semantyka korzystania z transakcji w ten sposób pozostaje spójna, co ułatwia pisanie kodu biblioteki, który działa tak samo w obu kontekstach.
Ogólny styl kodowania dla Mnesii zawsze będzie korzystał z transakcji. Ze względu na wydajność obsługuje również celowe „ brudne operacje ”, które unikają transakcji. Narażają one atomowość i właściwości izolacyjne ACID , ale oferują około 10 razy większą przepustowość. Ponadto istnieją również alternatywy w pamięci, chociaż tracą one właściwość trwałości ACID .
Sprawne wykonanie
Mnesia stanowi część stosu aplikacji internetowych LYME . Jest to podobne do LAMP , ale oparte na Erlang. Wdrożenie w Erlang zapewnia korzyści w zakresie wydajności ze względu na użycie jednej maszyny wirtualnej w całej aplikacji. LYME wykorzystuje to, ponieważ Yaws jest również zaimplementowany w Erlang.
Przestrzeń adresowa jest współdzielona (choć bezpiecznie pod Erlangiem) między kodem a danymi, w tym danymi tabeli Mnesii.
Pochodzenie i licencjonowanie
Mnesia i Erlang zostały opracowane przez Ericsson Computer Science Laboratory. Zostały one wydane jako oprogramowanie open source . Mnesia jest udostępniana na licencji Mozilla Public License . Od wersji OTP 18.0 są one publikowane zgodnie z otwartą licencją Apache License 2.0 . Wersje przed OTP 18.0 zostały opublikowane na licencji Erlang Public License o otwartym kodzie źródłowym .
ejabberd
Mnesia jest również opcją wbudowaną w demona Jabbera opartego na Erlang , ejabberd .