Mnezja

Mnezja
Oryginalni autorzy Joe Armstrong, Robert Virding, Dan Gudmundsson i inni
Deweloperzy Ericssona
Wersja stabilna
4.15.4 / 19 czerwca 2018 ( 2018-06-19 )
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 www.erlang.org/doc/man/mnesia.html _ _ _ _ _ _
LYME (pakiet oprogramowania) jest oparty na Erlang i obejmuje Mnesia . W całości składa się z wolnego i otwartego oprogramowania

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 .

Zobacz też