Erlang OTP: Programmering af distribuerede og fejltolerante systemer · Lektion

Grundlæggende om Mnesia og skemaer

Forstå Mnesias arkitektur og tabeltyper, og lær at definere skemaer for Deres distribuerede data.

Lektion 1 af 411 trin

Grundlæggende om Mnesia og skemaer er en gratis Erlang OTP: Programmering af distribuerede og fejltolerante systemer-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Erlang OTP: Programmering af distribuerede og fejltolerante systemer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Erlang OTP: Programmering af distribuerede og fejltolerante systemer-kurset indeholder 4 lektioner i alt.

Velkommen til Mnesia!

Mnesia er Erlangs indbyggede distribuerede database. Den er designet til høj tilgængelighed, fejltolerance og systemer med blød realtid, hvilket gør den ideel til samtidige Erlang-applikationer.

Tænk på Mnesia som en effektiv, indlejret database, der integreres problemfrit med Erlangs samtidighedsmodel.

Mnesias vigtigste styrker

Mnesia tilbyder vigtige funktioner, der passer perfekt til Erlangs filosofi:

  • Distribueret: Den kan strække sig over flere Erlang-noder.
  • Transaktionel: Den garanterer atomicitet, konsistens, isolation og holdbarhed (ACID) for datahandlinger.
  • Fejltolerant: Den håndterer automatisk nodefejl og datareplikering.
  • Hybridlagring: Den understøtter både tabeller i hukommelsen og diskbaserede tabeller.

Start af Mnesia

Før du kan bruge Mnesia, skal du starte Mnesia-applikationen og derefter Mnesia-databasestyringen. Dette er et almindeligt første trin, når du arbejder med Mnesia.

Prøv at køre dette enkle eksempel:

-module(mnesia_lesson_start).
-export([run/0]).

run() ->
    % 1. Start the Mnesia application
    application:start(mnesia),
    io:format("Mnesia application started.~n"),

    % 2. Start the Mnesia database manager
    mnesia:start(),
    io:format("Mnesia database started successfully!~n"),

    % Clean up (important for simple runnable examples)
    mnesia:stop(),
    application:stop(mnesia),
    ok.

Hvad er et Mnesia-skema?

Et Mnesia-skema definerer den overordnede struktur for din Mnesia-database. Det angiver, hvilke tabeller der findes, deres egenskaber, og hvordan de lagres på forskellige noder.

Selve skemaet gemmes i en særlig Mnesia-tabel kaldet mnesia_schema.

Oprettelse af skemaet

Skemaet skal oprettes én gang for hele Mnesia-systemet (klyngen af noder). Du bruger mnesia:create_schema/1 og sender en liste over nodenavne, der skal deltage i Mnesia-systemet.

Sådan opretter du et skema for en enkelt node:

-module(mnesia_lesson_schema).
-export([run/0]).

run() ->
    application:start(mnesia),

    % Create schema for the current node
    case mnesia:create_schema([node()]) of
        ok -> io:format("Mnesia schema created.~n");
        {error, {already_exists, _}} ->
            io:format("Schema already exists. (This is fine if run before)~n");
        Error -> io:format("Error creating schema: ~p~n", [Error])
    end,

    application:stop(mnesia),
    ok.

Grundlæggende om Mnesia-tabeller

Mnesia gemmer data i tabeller, på samme måde som en relationel database. Hver tabel har et navn og et sæt attributter (kolonner).

  • Tabeller er dynamiske og kan oprettes eller slettes under kørsel.
  • De kan replikeres på flere noder for at opnå fejltolerance.
  • Mnesia understøtter forskellige lagringstyper for tabeller.

Forstå tabeltyper

Mnesia tilbyder forskellige tabeltyper til forskellige behov:

  • ram_copies: Data gemmes kun i RAM. Hurtigste adgang, men data går tabt, hvis noden går ned.
  • disc_copies: Data gemmes i RAM og replikeres også til disken. Giver vedvarende lagring og god ydeevne.
  • disc_only_copies: Data gemmes kun på disken. Langsommere adgang, men bruger mindre RAM og er vedvarende.

Valget af den rigtige type afhænger af kravene til dine datas vedvarende lagring og ydeevne.

Definition af tabeller med records

I Erlang defineres Mnesia-tabeller typisk ved hjælp af records. En record-erklæring angiver tabellens navn (recordens navn) og dens attributter (recordens felter).

For eksempel definerer en #user{}-record en user-tabel med specifikke felter som id, name og email.

Opret din første tabel

Lad os samle det, vi har lært! Dette eksempel starter Mnesia, sikrer, at der findes et skema, definerer en user-record og opretter derefter en user-tabel med lagringstypen disc_copies.

Kør dette for at se en komplet Mnesia-opsætning til en grundlæggende tabel!

-module(mnesia_lesson_create_table).
-export([run/0]).

% Define the user record for our table
-record(user, {id, name, email}).

run() ->
    % 1. Start the Mnesia application
    application:start(mnesia),
    io:format("Mnesia application started.~n"),

    % 2. Create schema (if it doesn't exist)
    case mnesia:create_schema([node()]) of
        ok -> io:format("Mnesia schema created.~n");
        {error, {already_exists, _}} ->
            io:format("Schema already exists (skipping creation).~n");
        Error -> io:format("Error creating schema: ~p~n", [Error])
    end,

    % 3. Start the Mnesia database manager
    mnesia:start(),
    io:format("Mnesia database started.~n"),

    % 4. Create the 'user' table
    % Options: [{disc_copies, [node()]}] means persistent table on this node
    case mnesia:create_table(user, [{disc_copies, [node()]}]) of
        {atomic, ok} ->
            io:format("Table 'user' created successfully (disc_copies).~n");
        {aborted, {already_exists, user}} ->
            io:format("Table 'user' already exists (skipping creation).~n");
        Error ->
            io:format("Error creating table: ~p~n", [Error])
    end,

    % Give Mnesia a moment
    timer:sleep(100),

    % 5. Stop Mnesia and the application
    mnesia:stop(),
    application:stop(mnesia),
    io:format("Mnesia stopped.~n"),
    ok.

Hurtigt tjek

Hvilken Mnesia-tabeltype gemmer kun data i hukommelsen og mister dem, hvis noden går ned eller genstarter?

Opsummering af Mnesia-grundlaget

Godt klaret! Du har taget dine første skridt ind i Mnesia. Vi har gennemgået:

  • Hvad Mnesia er, og hvilke kernefunktioner den har.
  • Hvordan du starter Mnesia og initialiserer dens skema.
  • Begrebet Mnesia-tabeller og deres definition ved hjælp af Erlang-records.
  • De forskellige tabeltyper: ram_copies, disc_copies og disc_only_copies.

Derefter dykker vi ned i at udføre atomare transaktioner og manipulere data i disse tabeller!

Gratis at komme i gang

Lær Erlang med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Grundlæggende om Mnesia og skemaer” gratis?

Ja — alle 3 lektioner i læringssporet Erlang OTP: Programmering af distribuerede og fejltolerante systemer, inklusive “Grundlæggende om Mnesia og skemaer”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Erlang OTP: Programmering af distribuerede og fejltolerante systemer-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Grundlæggende om Mnesia og skemaer”?

Forstå Mnesias arkitektur og tabeltyper, og lær at definere skemaer for Deres distribuerede data. Du øver dig i Erlang OTP: Programmering af distribuerede og fejltolerante systemer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Erlang OTP: Programmering af distribuerede og fejltolerante systemer?

Der kræves ingen tidligere erfaring. Erlang OTP: Programmering af distribuerede og fejltolerante systemer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Grundlæggende om Mnesia og skemaer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Erlang OTP: Programmering af distribuerede og fejltolerante systemer-lektion?

Ja. Alle Erlang OTP: Programmering af distribuerede og fejltolerante systemer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Grundlæggende om Mnesia og skemaer
  2. Transaktioner og datamanipulation
  3. Distribueret Mnesia og replikering
  4. Mnesia-indeksering og optimering af forespørgsler
← Tilbage til Erlang OTP: Programmering af distribuerede og fejltolerante systemer