Transaksi dan Manipulasi Data
Laksanakan transaksi atomik pada jadual Mnesia untuk memastikan ketekalan data merentas nod teragih
Transaksi dan Manipulasi Data 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 Mnesia Memerlukan Urus Niaga
Bayangkan anda mengurus data penting seperti pemindahan wang bank. Anda tentu tidak mahu wang meninggalkan satu akaun tanpa tiba di akaun yang lain, bukan?
Prinsip "semua atau tiada" ini penting untuk ketekalan data, dan di sinilah urus niaga berperanan. Mnesia menggunakan urus niaga untuk mengumpulkan berbilang operasi pangkalan data menjadi satu unit atomik.
Urus niaga atomik sama ada melengkapkan semua operasinya sepenuhnya, atau jika mana-mana bahagiannya gagal, semua perubahan dikembalikan. Ini memastikan data anda kekal tekal dan boleh dipercayai.
Teras: `mnesia:transaction`
Dalam Mnesia, anda melaksanakan operasi berurus niaga menggunakan fungsi mnesia:transaction/1. Fungsi ini menerima fungsi tanpa nama (sebuah fun) sebagai hujahnya.
Semua operasi membaca dan menulis Mnesia yang perlu dilakukan secara atomik mesti diletakkan di dalam fun ini. Jika fun berjaya dilaksanakan, perubahan disahkan. Jika berlaku ralat atau mnesia:abort/1 dipanggil, semua perubahan dikembalikan.
Mari lihat struktur asasnya:
-module(example_transaction).
-export([main/0]).
main() ->
mnesia:start(),
{atomic, _Result} = mnesia:transaction(fun() ->
% Mnesia operations go here
io:format("Inside the transaction!~n"),
ok
end),
io:format("Transaction completed.~n"),
mnesia:stop().Menyediakan Data untuk Urus Niaga
Sebelum kita boleh memanipulasi data, kita memerlukan jadual Mnesia. Mari takrifkan rekod person yang mudah dan cipta jadual untuknya. Persediaan ini akan digunakan dalam contoh urus niaga kita.
Ingat, mnesia:create_table/2 biasanya dipanggil sekali apabila aplikasi anda dimulakan buat kali pertama.
-module(mnesia_table_setup).
-export([main/0]).
-record(person, {id, name, age}).
main() ->
% Ensure Mnesia is started on this node
mnesia:create_schema([node()]),
mnesia:start(),
% Create table if it doesn't exist
case mnesia:create_table(person, [{attributes, record_info(fields, person)}]) of
{atomic, ok} -> io:format("Table 'person' created successfully.~n");
{aborted, {already_exists, person}} -> io:format("Table 'person' already exists.~n");
Error -> io:format("Error creating table: ~p~n", [Error])
end,
mnesia:stop().Menambah & Mengemas Kini Rekod
Dalam urus niaga, anda menggunakan mnesia:write/1 untuk menyimpan atau mengemas kini rekod. Jika rekod dengan kunci utama yang sama (medan pertama dalam rekod person kita, iaitu id) sudah wujud, rekod itu akan dikemas kini. Jika tidak, rekod baharu akan dimasukkan.
Mari tambahkan seseorang yang baharu ke jadual kita. Ingat untuk memulakan Mnesia terlebih dahulu!
-module(write_example).
-export([main/0]).
-record(person, {id, name, age}).
main() ->
% Ensure Mnesia is started and table exists (simplified setup)
mnesia:create_schema([node()]),
mnesia:start(),
mnesia:create_table(person, [{attributes, record_info(fields, person)}]),
mnesia:wait_for_tables([person], 5000),
% Write a new person record
Person1 = #person{id = 1, name = "Alice", age = 30},
{atomic, ok} = mnesia:transaction(fun() ->
mnesia:write(Person1)
end),
io:format("Wrote: ~p~n", [Person1]),
mnesia:stop().Mendapatkan Rekod Secara Berurus Niaga
Untuk mendapatkan data dalam urus niaga, gunakan mnesia:read/1. Fungsi ini menerima rekod atau kunci rekod (seperti {person, 1}) dan mengembalikan senarai rekod yang sepadan. Jika tiada rekod ditemui, fungsi ini mengembalikan [] (senarai kosong).
Mari baca orang yang baru sahaja kita tambahkan. Kita akan menggabungkan penulisan dan pembacaan dalam satu urus niaga untuk contoh yang lebih lengkap.
-module(read_example).
-export([main/0]).
-record(person, {id, name, age}).
main() ->
mnesia:create_schema([node()]),
mnesia:start(),
mnesia:create_table(person, [{attributes, record_info(fields, person)}]),
mnesia:wait_for_tables([person], 5000),
Person1 = #person{id = 1, name = "Alice", age = 30},
Person2 = #person{id = 2, name = "Bob", age = 25},
{atomic, Result} = mnesia:transaction(fun() ->
% Write two records
mnesia:write(Person1),
mnesia:write(Person2),
% Read one of them
mnesia:read({person, 1})
end),
io:format("Transaction result (read data): ~p~n", [Result]),
mnesia:stop().Mengubah Suai Data dengan Urus Niaga
mnesia:write/1 mengendalikan kedua-dua penyisipan rekod baharu dan pengemaskinian rekod sedia ada. Untuk membuang rekod sepenuhnya, gunakan mnesia:delete/1 dengan memberikan rekod penuh atau hanya kuncinya.
Mari kemas kini umur Alice dan kemudian padam Bob daripada jadual Mnesia kita, semuanya dalam satu urus niaga yang konsisten.
-module(update_delete_example).
-export([main/0]).
-record(person, {id, name, age}).
main() ->
mnesia:create_schema([node()]),
mnesia:start(),
mnesia:create_table(person, [{attributes, record_info(fields, person)}]),
mnesia:wait_for_tables([person], 5000),
% Ensure initial data for update/delete
mnesia:transaction(fun() ->
mnesia:write(#person{id = 1, name = "Alice", age = 30}),
mnesia:write(#person{id = 2, name = "Bob", age = 25})
end),
io:format("--- Before transaction ---~n"),
io:format("Alice: ~p~n", [mnesia:dirty_read({person, 1})]),
io:format("Bob: ~p~n", [mnesia:dirty_read({person, 2})]),
{atomic, _} = mnesia:transaction(fun() ->
% Update Alice's age
UpdatedAlice = #person{id = 1, name = "Alice", age = 31},
mnesia:write(UpdatedAlice),
% Delete Bob
mnesia:delete({person, 2})
end),
io:format("--- After transaction ---~n"),
io:format("Alice: ~p~n", [mnesia:dirty_read({person, 1})]),
io:format("Bob: ~p~n", [mnesia:dirty_read({person, 2})]), % Should be []
mnesia:stop().Pengembalian Urus Niaga dalam Tindakan
Kekuatan urus niaga terletak pada keatomikannya. Jika mana-mana operasi dalam fun gagal atau anda memanggil mnesia:abort/1 secara jelas, Mnesia akan mengembalikan semua perubahan yang dibuat sepanjang urus niaga tersebut.
Ini bermakna keadaan pangkalan data anda akan kembali kepada keadaan sebelum urus niaga bermula, sekali gus menghalang kemas kini separa dan mengekalkan ketekalan.
-module(rollback_example).
-export([main/0]).
-record(person, {id, name, age}).
main() ->
mnesia:create_schema([node()]),
mnesia:start(),
mnesia:create_table(person, [{attributes, record_info(fields, person)}]),
mnesia:wait_for_tables([person], 5000),
% Ensure Alice exists initially
mnesia:transaction(fun() ->
mnesia:write(#person{id = 1, name = "Alice", age = 30})
end),
io:format("Initial Alice: ~p~n", [mnesia:dirty_read({person, 1})]),
% Attempt a transaction that will abort
Result = mnesia:transaction(fun() ->
mnesia:write(#person{id = 1, name = "Alice", age = 35}), % Update
mnesia:write(#person{id = 3, name = "Charlie", age = 22}), % New record
mnesia:abort("Something went wrong!") % Abort the transaction
end),
io:format("Transaction result: ~p~n", [Result]),
io:format("Alice after aborted transaction: ~p~n", [mnesia:dirty_read({person, 1})]),
io:format("Charlie after aborted transaction: ~p~n", [mnesia:dirty_read({person, 3})]),
mnesia:stop().`mnesia:sync_transaction/1` untuk Pengesahan Global
Walaupun mnesia:transaction/1 memastikan keatomikan setempat, nilai pulangannya tidak menjamin bahawa urus niaga telah disahkan pada semua replika Mnesia dalam persediaan teragih. Untuk tujuan itu, gunakan mnesia:sync_transaction/1.
mnesia:sync_transaction/1 menyekat pemanggil sehingga urus niaga berjaya disahkan pada semua nod yang menempatkan jadual terjejas. Ini penting untuk menjamin ketekalan kukuh dalam sistem teragih.
Gunakannya apabila anda benar-benar perlu mengetahui bahawa data konsisten merentasi seluruh kelompok anda sebelum meneruskan.
-module(sync_transaction_example).
-export([main/0]).
-record(item, {id, name}).
main() ->
% This example assumes a distributed Mnesia setup.
% For a single node, it behaves like mnesia:transaction/1.
mnesia:create_schema([node()]),
mnesia:start(),
mnesia:create_table(item, [{attributes, record_info(fields, item)}]),
mnesia:wait_for_tables([item], 5000),
Item = #item{id = 101, name = "Widget A"},
io:format("Attempting sync_transaction...~n"),
{atomic, ok} = mnesia:sync_transaction(fun() ->
mnesia:write(Item)
end),
io:format("Item written and committed across all replicas: ~p~n", [Item]),
mnesia:stop().Semakan Pengetahuan tentang Urus Niaga
Anda telah mempelajari urus niaga Mnesia dan cara memanipulasi data secara atomik. Mari uji pemahaman anda!
Urus Niaga: Jaring Keselamatan Data Anda
Dalam pelajaran ini, anda telah menguasai urus niaga Mnesia, yang menjadi asas penting untuk membina aplikasi yang kukuh dan boleh dipercayai.
- Kita mempelajari bahawa urus niaga menyediakan keatomikan, dengan memastikan operasi data "semua atau tiada".
- Anda berlatih menggunakan
mnesia:transaction/1untuk mengumpulkan operasi Mnesia. - Kita membincangkan
mnesia:write/1untuk menambah atau mengemas kini,mnesia:read/1untuk mendapatkan data danmnesia:delete/1untuk membuang rekod. - Kita menyentuh secara ringkas tentang
mnesia:sync_transaction/1untuk ketekalan teragih yang kukuh.
Seterusnya, kita akan mendalami konfigurasi Mnesia untuk operasi teragih, termasuk replikasi data dan penyimpanan tahan kegagalan merentasi kelompok.
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 “Transaksi dan Manipulasi Data” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP, termasuk “Transaksi dan Manipulasi Data”, 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 “Transaksi dan Manipulasi Data”?
Laksanakan transaksi atomik pada jadual Mnesia untuk memastikan ketekalan data merentas nod teragih 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 “Transaksi dan Manipulasi Data” 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
- Asas dan Skema Mnesia
- Transaksi dan Manipulasi Data
- Mnesia Teragih dan Replikasi
- Pengindeksan Mnesia dan Pengoptimuman Pertanyaan