Rumah >Peranti teknologi >industri IT >Sokongan Java dan MongoDB 4.0 untuk urus niaga asid berbilang dokumen

Sokongan Java dan MongoDB 4.0 untuk urus niaga asid berbilang dokumen

Lisa Kudrow
Lisa Kudrowasal
2025-02-16 12:36:13166semak imbas

Monologi MongoDB 4.0 Penjelasan terperinci mengenai sokongan urus niaga asid

Java and MongoDB 4.0 Support for Multi-document ACID Transactions

(artikel ini dicipta dengan kerjasama MongoDB. Terima kasih atas sokongan anda terhadap rakan kongsi yang membuat SitePoint mungkin.)

MongoDB 4.0 menambah sokongan untuk urus niaga asid berbilang dokumen. Tetapi adakah ini bermakna bahawa MongoDB tidak menyokong urus niaga sebelum ini? Tidak begitu, MongoDB sentiasa menyokong urus niaga dokumen tunggal. MongoDB 4.0 menjamin bahawa urus niaga ini boleh diperluaskan kepada pelbagai dokumen, pelbagai kenyataan, pelbagai koleksi, dan pelbagai pangkalan data. Tanpa beberapa bentuk jaminan integriti data transaksi, apakah lagi pangkalan data berguna?

Sebelum menyelam ke dalam artikel ini, anda boleh mencari semua kod di sini dan cuba urus niaga asid multi-dokumen.

mata utama

    MongoDB 4.0 memperkenalkan urus niaga asid berbilang dokumen yang memanjangkan jaminan transaksi kepada pelbagai dokumen, penyata, koleksi, dan pangkalan data, dengan itu meningkatkan integriti data dan konsistensi.
  • Sebelum MongoDB 4.0, MongoDB menyokong transaksi dokumen tunggal, memastikan operasi atom dalam satu dokumen, dan sesuai untuk kebanyakan aplikasi.
  • MongoDB 4.0 Transaksi asid multi-dokumen adalah konsisten dengan urus niaga pangkalan data tradisional, yang menyediakan atom, konsistensi, pengasingan, dan kegigihan dalam operasi yang lebih kompleks.
  • Tetapan untuk menggunakan urus niaga asid berbilang dokumen termasuk memulakan replika MongoDB, menubuhkan persekitaran Java dengan kebergantungan yang diperlukan, dan melaksanakan operasi transaksi melalui skrip yang disediakan.
  • Demonstrasi sebenar dalam artikel menunjukkan pelaksanaan transaksi multi-dokumen, termasuk senario di mana urus niaga dilakukan atau dilancarkan kembali berdasarkan ketersediaan inventori, memastikan konsistensi keadaan pangkalan data.
permulaan cepat

Langkah 1: Mula MongoDB

Mulakan replika MongoDB tunggal dengan sekurang-kurangnya versi 4.0.0 pada port 27017 localhost.

jika anda menggunakan Docker:

anda boleh menggunakan
    .
  • start-mongo.sh Apabila anda selesai, anda boleh menggunakan
  • .
  • stop-mongo.sh Jika anda mahu menyambung ke MongoDB menggunakan shell mongo, anda boleh menggunakan
  • .
  • connect-mongo.sh
  • jika anda lebih suka memulakan mongod secara manual:

  • mkdir /tmp/data && mongod --dbpath /tmp/data --replSet rs
  • mongo --eval 'rs.initiate()' Langkah 2: Mula Java

Demo ini mengandungi dua program utama: dan .

ChangeStreams.java Perubahan aliran membolehkan anda menerima pemberitahuan sebarang perubahan data dalam koleksi MongoDB atau pangkalan data. Transactions.java

Proses transaksi adalah demonstrasi itu sendiri.
  • Anda memerlukan dua cengkerang untuk menjalankannya.
  • jika anda menggunakan Docker:

shell pertama:

shell kedua:

<code class="language-bash">./compile-docker.sh
./change-streams-docker.sh</code>
Jika anda tidak menggunakan Docker, anda perlu memasang Maven 3.5.x dan JDK 10 (atau versi minimum JDK 8, tetapi anda perlu mengemas kini versi Java dalam

):

<code class="language-bash">./transactions-docker.sh</code>
shell pertama:

<code class="language-bash">./compile-docker.sh
./change-streams-docker.sh</code>

shell kedua:

<code class="language-bash">./transactions-docker.sh</code>

mari kita bandingkan urus niaga dokumen tunggal yang sedia ada dengan urus niaga multi-dokumen yang serasi asid untuk MongoDB 4.0 dan belajar cara menggunakan Java untuk memanfaatkan ciri baru ini.

Versi sebelum MongoDB 4.0

Walaupun di MongoDB 3.6 dan lebih awal, setiap operasi menulis diwakili sebagai transaksi yang dilancarkan pada lapisan penyimpanan dengan tahap dokumen tunggal. Oleh kerana model dokumen menggabungkan data yang berkaitan, jika tidak memodelkan jadual ibu bapa dan anak yang berlainan dalam skema tabular, operasi dokumen tunggal atom MongoDB menyediakan semantik transaksional yang memenuhi keperluan integriti data kebanyakan aplikasi.

Setiap operasi menulis biasa yang mengubah pelbagai dokumen sebenarnya akan berlaku dalam beberapa transaksi bebas: satu transaksi setiap dokumen.

Mari kita ambil aplikasi pengurusan inventori yang sangat mudah sebagai contoh.

Pertama sekali, saya memerlukan set replika MongoDB, jadi sila mulakan MongoDB seperti yang diterangkan di atas.

Sekarang mari masukkan dokumen berikut ke dalam koleksi produk:

<code class="language-bash">./compile.sh
./change-streams.sh</code>

Dengan mengandaikan promosi sedang dijalankan, kami ingin menawarkan pelanggan kami diskaun 20% untuk semua produk.

Tetapi sebelum menggunakan diskaun ini, kami ingin menggunakan aliran perubahan untuk memantau berapa lama operasi ini berlaku di MongoDB.

Lakukan yang berikut dalam shell Mongo:

<code class="language-bash">./transactions.sh</code>

Tinggalkan cangkang ini, buka satu lagi shell mongo dan gunakan diskaun:

<code class="language-javascript">MongoDB Enterprise rs:PRIMARY> db.product.insertMany([
    { "_id" : "beer", "price" : NumberDecimal("3.75"), "stock" : NumberInt(5) }, 
    { "_id" : "wine", "price" : NumberDecimal("7.5"), "stock" : NumberInt(3) }
])</code>

Seperti yang anda lihat, kedua -dua dokumen dikemas kini menggunakan baris arahan tunggal, tetapi tidak dalam satu transaksi. Inilah yang kita lihat dalam shell aliran perubahan:

<code class="language-javascript">cursor = db.product.watch([{$match: {operationType: "update"}}]);
while (!cursor.isExhausted()) {
  if (cursor.hasNext()) {
    print(tojson(cursor.next()));
  }
}</code>

Seperti yang anda lihat, masa kluster kedua -dua operasi (lihat clusterTime kekunci) adalah berbeza: operasi ini berlaku dalam kedua yang sama, tetapi kaunter untuk cap waktu ditingkatkan dengan 1.

Jadi di sini, kemas kini satu demi satu, walaupun ini berlaku dengan cepat, yang lain boleh membaca dokumen itu semasa kemas kini berjalan dan hanya melihat salah satu produk mempunyai diskaun.

Kebanyakan masa, ini adalah sesuatu yang anda boleh bertolak ansur dalam pangkalan data MongoDB, ketika kami cuba menanamkan data yang berkaitan atau berkaitan dengan dokumen yang sama. Oleh itu, dua kemas kini ke dokumen yang sama berlaku dalam satu transaksi:

<code class="language-javascript">PRIMARY> db.product.updateMany({}, {$mul: {price:0.8}})
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
PRIMARY> db.product.find().pretty()
{
    "_id" : "beer",
    "price" : NumberDecimal("3.00000000000000000"),
    "stock" : 5
}
{
    "_id" : "wine",
    "price" : NumberDecimal("6.0000000000000000"),
    "stock" : 3
}</code>
Walau bagaimanapun, kadang -kadang anda tidak boleh memodelkan semua data yang relevan ke dalam satu dokumen, dan terdapat banyak sebab untuk memilih untuk tidak membenamkan dokumen.

MongoDB 4.0 menggunakan transaksi asid multi-dokumen

Transaksi asid multi-dokumen di MongoDB sangat mirip dengan apa yang mungkin anda pelajari dari pangkalan data hubungan tradisional.

Urus niaga MongoDB adalah operasi perbualan yang berkaitan yang mesti dikemukakan secara atom atau sepenuhnya dilancarkan dengan cara pelaksanaan semua atau tidak.

Transaksi digunakan untuk memastikan operasi adalah atom walaupun merentasi pelbagai koleksi atau pangkalan data. Oleh itu, dengan menggunakan pengasingan snapshot, pengguna lain hanya dapat melihat semua tindakan atau tidak ada tindakan.

Mari kita tambahkan keranjang belanja kepada contoh kami.

Dalam contoh ini, 2 koleksi diperlukan kerana kita berurusan dengan 2 entiti perniagaan yang berbeza: pengurusan inventori dan kereta yang setiap pelanggan boleh membuat semasa membeli -belah. Setiap dokumen dalam koleksi ini mempunyai kitaran hayat yang berbeza.

Dokumentasi dalam Koleksi Produk menunjukkan item yang saya jual. Ini termasuk harga semasa produk dan inventori semasa. Saya mencipta pojo untuk mewakilinya: Product.java.

<code class="language-bash">./compile-docker.sh
./change-streams-docker.sh</code>

Apabila pelanggan menambah item pertamanya ke kereta, kereta itu dibuat, dan apabila pelanggan terus menyemak atau meninggalkan laman web, kereta itu dipadamkan. Saya mencipta pojo untuk mewakilinya: Cart.java.

<code class="language-bash">./transactions-docker.sh</code>

Cabaran di sini adalah bahawa saya tidak boleh menjual lebih banyak daripada yang saya ada: Jika saya mempunyai 5 bir untuk menjual, saya tidak boleh mempunyai lebih daripada 5 bir dalam kereta belanja pada pelanggan yang berbeza.

Untuk memastikan ini, saya perlu memastikan bahawa operasi membuat atau mengemas kini kereta pelanggan adalah atom dengan kemas kini inventori. Di sinilah transaksi multi-dokumen dimainkan. Jika seseorang cuba membeli sesuatu yang saya tidak ada dalam stok, urus niaga mesti gagal. Saya akan menambah kekangan kepada inventori produk:

<code class="language-bash">./compile.sh
./change-streams.sh</code>

(perhatikan bahawa ini sudah termasuk dalam kod Java.)

Untuk memantau contoh kami, kami akan menggunakan aliran perubahan MongoDB yang diperkenalkan di MongoDB 3.6.

Dalam setiap benang proses ini yang dipanggil ChangeStreams.java, saya akan memantau salah satu daripada 2 koleksi dan mencetak setiap operasi dan masa klusternya yang berkaitan.

... (Kandungan berikut perlu ditambah dengan coretan kod Java dan penjelasan berdasarkan kod yang disediakan. Panjangnya terlalu panjang dan ditinggalkan di sini) ....

Langkah seterusnya

Terima kasih kerana meluangkan masa untuk membaca catatan saya - Saya harap anda dapati ia berguna dan menarik. Sebagai peringatan, semua kod boleh didapati di repositori GitHub ini untuk anda bereksperimen dengan.

Jika anda mencari cara yang sangat mudah untuk bermula, anda boleh melakukannya dalam hanya 5 klik dalam perkhidmatan pangkalan data MongoDB Atlas di awan.

Di samping itu, urus niaga asid multi-dokumen bukanlah satu-satunya ciri baru di MongoDB 4.0, jadi jangan ragu untuk menyemak kursus percuma kami M040: Ciri-ciri dan Alat Baru di MongoDB 4.0 di Universiti Mongodb dan Panduan kami mengenai Ciri-ciri Baru di MongoDB 4.0, di mana anda boleh mengetahui lebih lanjut mengenai penukaran jenis asli, alat visualisasi dan analisis baru, dan integrasi Kubernet.

... (kandungan berikut adalah FAQ, artikelnya terlalu panjang, ditinggalkan di sini) ....

Atas ialah kandungan terperinci Sokongan Java dan MongoDB 4.0 untuk urus niaga asid berbilang dokumen. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Cara Memulakan Buletin PemajuArtikel seterusnya:Cara Memulakan Buletin Pemaju