Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP · Pelajaran

Data Teragih dengan ETS dan Mnesia

Dapatkan pengenalan kepada ETS untuk jadual teragih dalam memori dan Mnesia untuk keupayaan pangkalan data teragih yang ringan

Pelajaran 2 daripada 411 langkah

Data Teragih dengan ETS dan Mnesia ialah pelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP merangkumi sejumlah 4 pelajaran.

Mengapa Data Teragih?

Dalam sistem Erlang berskala besar, data sering perlu dikongsi dan disegerakkan merentasi beberapa nod. Ini penting untuk membina aplikasi yang tahan terhadap kegagalan dan boleh diskalakan.

Bayangkan aplikasi sembang yang sesi pengguna atau baris gilir mesejnya perlu boleh dicapai walaupun satu pelayan gagal. Gedung data teragih menjadikan perkara ini mungkin dengan membolehkan data kekal tersedia melangkaui satu proses atau nod.

Penyimpanan Istilah Erlang (ETS)

ETS ialah singkatan bagi Penyimpanan Istilah Erlang. Ia ialah gedung pasangan kunci-nilai dalam ingatan yang berkuasa dan terbina dalam. Anggaplah ia sebagai jadual cincangan yang sangat pantas dan disepadukan terus ke dalam masa jalan Erlang.

  • Sangat pantas untuk operasi baca/tulis.
  • Boleh menyimpan sebarang istilah Erlang (integer, atom, senarai, tupel, PID dan sebagainya).
  • Selamat untuk proses: berbilang proses boleh mencapai jadual yang sama secara serentak.

Meneroka Jenis Jadual ETS

ETS menawarkan jenis jadual yang berbeza, setiap satunya dengan sifat unik:

  • set: Lalai. Setiap kunci hanya boleh mempunyai satu nilai. Seperti kamus.
  • ordered_set: Serupa dengan set, tetapi kunci disusun mengikut tertib. Penulisan lebih perlahan, carian julat lebih pantas.
  • bag: Membenarkan berbilang objek dengan kunci yang sama.
  • duplicate_bag: Membenarkan berbilang objek dengan kunci DAN nilai yang sama.

Pemilihan jenis yang betul bergantung pada struktur data dan corak capaian anda.

Operasi Asas ETS

Mari lihat cara mencipta jadual ETS dan melaksanakan operasi asas seperti memasukkan serta mencari data. Kita akan menggunakan jadual set untuk memudahkan penerangan.

-module(ets_example).
-export([run/0, add_user/2, get_user/1, cleanup/0]).

% Function to run the example sequence
run() ->
    io:format("--- ETS Example Start ---~n"),
    % Create a named public set table
    ets:new(users_table, [set, public, named_table]),
    io:format("Table 'users_table' created.~n"),

    add_user(1, "Alice"),
    add_user(2, "Bob"),
    add_user(1, "Alicia"), % This will update Alice to Alicia

    get_user(1),
    get_user(2),
    get_user(3), % User 3 doesn't exist

    cleanup(),
    io:format("--- ETS Example End ---~n").

add_user(Id, Name) ->
    ets:insert(users_table, {Id, Name}),
    io:format("Inserted/updated user {~p, ~p}~n", [Id, Name]).

get_user(Id) ->
    case ets:lookup(users_table, Id) of
        [{Id, Name}] ->
            io:format("Lookup result for ~p: {~p, ~p}~n", [Id, Name]);
        [] ->
            io:format("User ~p not found in table.~n", [Id])
    end.

cleanup() ->
    ets:delete(users_table),
    io:format("Table 'users_table' deleted.~n").

ETS: Penyimpanan Setempat Sahaja

Walaupun ETS sangat pantas dan menyokong operasi serentak, penting untuk mengingati satu batasan utama: jadual ETS adalah setempat pada nod Erlang tempat jadual itu dicipta.

  • Data dalam jadual ETS pada node_A tidak tersedia secara automatik pada node_B.
  • Untuk berkongsi data ETS merentasi nod, anda perlu melaksanakan replikasi tersuai atau mekanisme capaian jauh, biasanya menggunakan penghantaran mesej atau RPC.

Di sinilah Mnesia membantu memudahkan pengurusan data teragih.

Mnesia: Pangkalan Data Teragih Erlang

Mnesia ialah sistem pengurusan pangkalan data masa nyata yang berkuasa, teragih dan tahan terhadap kegagalan, serta terbina dalam Erlang/OTP. Sistem ini menggunakan ETS dan DETS (Penyimpanan Istilah Erlang pada Cakera) untuk penyimpanannya.

Mnesia memudahkan cabaran mengurus data merentasi beberapa nod Erlang dengan menyediakan jaminan transaksi dan replikasi automatik, menjadikannya sesuai untuk aplikasi teragih yang kukuh.

Persediaan dan Skema Mnesia

Sebelum menggunakan Mnesia, anda perlu memulakannya dan menentukan skema data. Skema menerangkan jadual serta sifatnya (contohnya, nod yang menjadi hos bagi setiap salinan).

  • mnesia:start(): Memulakan sistem Mnesia.
  • mnesia:create_schema([node()]): Mencipta direktori dan skema Mnesia pada nod yang ditentukan. Biasanya, ini ialah persediaan sekali sahaja bagi setiap kelompok.
  • mnesia:create_table(Name, Props): Menentukan jadual baharu berserta atribut dan jenis penyimpanannya.

Transaksi Mnesia

Operasi Mnesia biasanya dilakukan dalam transaksi bagi memastikan atomicity, konsistensi, pengasingan dan ketahanan (sifat ACID). Ini bermaksud semua operasi dalam sesuatu transaksi sama ada berjaya atau gagal bersama-sama.

Berikut ialah cara mencipta jadual dan berinteraksi dengannya menggunakan transaksi:

-module(mnesia_example).
-export([init_mnesia/0, add_product/2, get_product/1, cleanup/0]).

% Define a record for our product data
-record(product, {id, name}).

init_mnesia() ->
    io:format("--- Mnesia Init Start ---~n"),
    % Start Mnesia
    mnesia:start(),
    io:format("Mnesia started.~n"),

    % Uncomment and run 'mnesia_example:create_schema().' once for a new Mnesia setup:
    % mnesia:create_schema([node()]),
    % io:format("Mnesia schema created.~n"),

    % Create product table with disc_copies on this node
    % Uncomment to delete an existing table before creating a new one:
    % mnesia:delete_table(product),
    TableProps = [{disc_copies, [node()]}, {attributes, record_info(fields, product)}],
    case mnesia:create_table(product, TableProps) of
        {atomic, ok} -> io:format("Table 'product' created.~n");
        {aborted, {already_exists, product}} -> io:format("Table 'product' already exists.~n");
        Other -> io:format("Error creating table: ~p~n", [Other])
    end,
    io:format("--- Mnesia Init End ---~n").

add_product(Id, Name) ->
    Product = #product{id = Id, name = Name},
    F = fun() -> mnesia:write(Product) end,
    case mnesia:transaction(F) of
        {atomic, ok} -> io:format("Added product {~p, ~p}~n", [Id, Name]);
        {aborted, Reason} -> io:format("Failed to add product: ~p~n", [Reason])
    end.

get_product(Id) ->
    F = fun() -> mnesia:read({product, Id}) end,
    case mnesia:transaction(F) of
        {atomic, [ProductRecord]} ->
            io:format("Found product ~p: {~p, ~p}~n", [Id, ProductRecord#product.name]);
        {atomic, []} ->
            io:format("Product ~p not found.~n", [Id]);
        {aborted, Reason} ->
            io:format("Failed to get product: ~p~n", [Reason])
    end.

cleanup() ->
    io:format("--- Mnesia Cleanup Start ---~n"),
    mnesia:stop(),
    io:format("Mnesia stopped.~n"),
    io:format("--- Mnesia Cleanup End ---~n").

Replikasi Data Mnesia

Mnesia mencapai pengagihan dan toleransi kesalahan melalui replikasi data. Apabila mencipta jadual, anda menentukan tempat salinannya harus berada:

  • disc_copies: Data disimpan pada cakera dan dalam RAM pada nod yang ditentukan. Paling sesuai untuk ketekalan data dan toleransi kesalahan.
  • ram_copies: Data hanya disimpan dalam RAM pada nod yang ditentukan. Akses lebih pantas, tetapi data akan hilang apabila nod ranap melainkan disc_copies juga wujud di tempat lain.
  • disc_only_copies: Data hanya disimpan pada cakera. Akses paling perlahan, tetapi penggunaan RAM paling rendah.

Mnesia mengendalikan replikasi dan penyegerakan secara automatik merentas salinan ini bagi memastikan konsistensi data.

Semakan Ringkas: ETS berbanding Mnesia

ETS dan Mnesia kedua-duanya ialah alat yang berkuasa untuk mengurus data dalam Erlang, tetapi kedua-duanya mempunyai tujuan yang berbeza. Pilih semua pernyataan yang menerangkan perbezaan utama atau ciri-ciri dengan tepat.

Ringkasan: Alat Data Teragih

Dalam pelajaran ini, kita meneroka dua alat penting untuk mengurus data dalam Erlang: ETS dan Mnesia.

  • ETS ialah stor nilai kunci dalam memori yang sangat pantas, amat sesuai untuk cache setempat dan jadual carian. Ingat, ia adalah setempat kepada sesuatu nod.
  • Mnesia ialah pangkalan data teragih dan tahan kesalahan terbina dalam Erlang. Ia menyediakan keselamatan transaksi, takrifan skema dan replikasi data automatik merentas nod, berasaskan ETS.

Memahami masa yang sesuai untuk menggunakan setiap alat adalah penting bagi membina aplikasi Erlang yang berdaya tahan dan boleh diskalakan.

Percuma untuk bermula

Pelajari Erlang dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Data Teragih dengan ETS dan Mnesia” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP, termasuk “Data Teragih dengan ETS dan Mnesia”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Data Teragih dengan ETS dan Mnesia”?

Dapatkan pengenalan kepada ETS untuk jadual teragih dalam memori dan Mnesia untuk keupayaan pangkalan data teragih yang ringan Anda berlatih Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Data Teragih dengan ETS dan Mnesia” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP ini?

Ya. Setiap pelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mengendalikan Pemisahan Rangkaian
  2. Data Teragih dengan ETS dan Mnesia
  3. Reka Bentuk Kebolehskalaan dan Ketahanan
  4. Pengimbangan Beban dan Ambil Alih Rentas Nod
← Kembali ke Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP