در یک برنامه پایگاه داده MongoDB هنگامی که شما بین دو نهاد رابطه والدین و فرزند دارید ، مانند سفارشات و جزئیات سفارش ، به طور معمول اسناد کودک (جزئیات سفارش) را در یک سند والدین (سفارش) جاسازی می کنید. چنین روش طراحی طرحواره نه تنها به خواندن سریعتر کمک می کند بلکه به تحقق اتمی نیز کمک می کند. عملیات نوشتن روی یک سند واحد اتمی است. با این حال ، ‘چگونه اتمی را هنگام کار با اسناد متعدد حفظ می کنید؟"
این یکی از مقالات بسیاری در سریال های چند قسمتی است که Mastering MongoDB-یک نکته در روز ، صرفاً برای شما ایجاد شده است تا با یادگیری "یک نکته در روز" به MongoDB تسلط داشته باشید. در چند مقاله ، من می خواهم نکات مختلفی را ارائه دهم تا به شما در پاسخ به سؤال فوق کمک کنم. در این مقاله به بحث در مورد معاملات چند مستند ، یک ویژگی جدید در MongoDB v4. 0-برنامه های کاربردی آن ، استفاده از سناریوهای موردی و در نهایت برخی از تمرینات آزمایشگاهی دستی.
تسلط-معاملات چند مستند
معاملات چیست
در MongoDB ، یک عملیات نوشتن روی یک سند واحد اتمی است ، حتی اگر این عملیات چندین اسناد تعبیه شده را در یک سند واحد اصلاح کند. هنگامی که یک عمل نوشتن واحد ، مانند Updatemany ، چندین اسناد را اصلاح می کند ، اصلاح هر سند اتمی است ، اما عملکرد به عنوان یک کل اتمی نیست. برخی از موارد استفاده نیز ممکن است شما را ملزم به اصلاح چندین عملیات نوشتن به عنوان بخشی از عملکرد واحد کند. در چنین سناریوهایی برای اجرای اتمی در چندین عملیات نوشتن به معاملات نیاز دارید.
چرا از معاملات استفاده کنید
تا زمانی که MongoDB v4. 0 تنها راهی که می توانید معاملات را تقلید کنید ، اجرای یک تعهد دو فاز در برنامه خود است. امانوئل اولائوجو مقاله ای با عنوان "Fawn: Transactions in MongoDB" را در تعهدات دو فاز با استفاده از ماژول Fawn برای برنامه های Node. js نوشت. لطفاً توجه داشته باشید که تعهدات دو فاز فقط می تواند معنایی مانند معامله را ارائه دهد. در حالی که استفاده از تعهد دو فاز ، امکان برنامه های کاربردی در طی تعهد دو فاز یا بازگشت مجدد وجود دارد.
MongoDB v4. 0 معاملات چند مستند را برای مجموعه های ماکت معرفی می کند و می تواند در چندین عملیات ، مجموعه ها و اسناد استفاده شود. معاملات چند مستند یک دیدگاه جهانی در سطح جهانی از داده ها ارائه می دهد ، و اجرای همه یا هیچ چیز را برای حفظ یکپارچگی داده ها اجرا می کند. معاملات دارای خواص زیر خواهد بود
- هنگامی که یک معامله انجام می شود ، تمام تغییرات داده های انجام شده در معامله ذخیره می شوند.
- در صورت عدم موفقیت در معامله ، معامله قطع می شود
- هنگامی که یک معامله قطع می شود/سقط می شود ، تمام تغییرات داده های انجام شده در معامله دور ریخته می شوند.
- تا زمان انجام معامله ، هیچ عملیاتی نوشتن در معامله در خارج از معامله قابل مشاهده نیست.
تمرینات آزمایشگاهی دستی
این تمرین آزمایشگاه به شما کمک می کند تا نحوه استفاده از معاملات را در یک پوسته MongoDB درک کنید. از آنجا که معاملات چند مستند فقط برای مجموعه های ماکت در دسترس است ، لطفاً اطمینان حاصل کنید که حداقل 1 ماکت عضو به جای مونگود مستقل دارید.
قبل از شروع کار ، من می خواهم که شما از چند نکته آگاه باشید
- فقط می توانید عملیات خواندن/نوشتن (CRUD) را در مجموعه های موجود مشخص کنید.
- یک معامله چند مستند نمی تواند شامل یک عمل درج باشد که منجر به ایجاد یک مجموعه جدید شود.
- معاملات با یک جلسه همراه است.
- در هر زمان معین ، شما می توانید حداکثر یک معامله باز را برای یک جلسه انجام دهید.
- برای مرتبط کردن عملیات خواندن و نوشتن با یک معامله باز ، جلسه را به عملیات منتقل می کنید.
محیط تنظیم
اول ، شما به یک محیط برای بازی در اطراف نیاز دارید. اگر قبلاً یک محیط ماکت MongoDB v4. 0 دارید ، ممکن است این مرحله را کنار بگذارید.
مجموعه بعدی تمرینات نشان می دهد که چگونه کار تعهدات / سقط جنین و از همه مهمتر نیز چگونگی عملکرد چندین نوشتن با درگیری های نوشتن را شامل می شود که منجر به سقط جنین می شود. برای کمک به شما در درک بهتر ، من خروجی این دستورات را در زیر آنها به عنوان نظر درج کرده ام.
صرفه جویی در تغییر داده ها با تعهدات
دستورات پوسته زیر MongoDB در زیر مجموعه شخص را با برخی از داده های نمونه در آن نشان می دهد. توجه کنید که سند تازه اضافه شده در معامله تا زمان انجام جلسه 1 در شیء مجموعه DB. Person قابل مشاهده نیست.
دستورات MongoDB نشان دهنده تغییرات داده در معامله هنگام انجام معامله است.
دور انداختن داده ها با سقط جنین
دستورات پوسته زیر MongoDB در زیر مجموعه شخص را با برخی از داده های نمونه در آن نشان می دهد. توجه کنید که سند تازه اضافه شده در معامله تا زمانی که جلسه 1 متوقف نشود ، در مورد مجموعه DB. Person قابل مشاهده نیست.
دستورات MongoDB که نشان دهنده تغییرات داده در معامله است ، هنگامی که معامله در جلسه سقط می شود ، دور ریخته می شوند.
معاملات بدون درگیری نوشتن می تواند انجام شود
در کد زیر ، ممکن است متوجه شوید که چندین عملیات نوشتن (درج ، بروزرسانی و حذف) از چندین دامنه ، در داخل/خارج از معامله استفاده می شود. تا زمانی که هیچ WritEconflict وجود نداشته باشد ، می توانید با موفقیت این معامله را انجام دهید.
معاملات با درگیری های نوشتن سقط شده است
اگر دو یا چند عمل نوشتن همان سند را از دامنه های مختلف تغییر دهید ، تغییر داده ها در یک معامله تأثیر می گذارد بر تغییر داده ها از سایر معاملات. هنگامی که چنین نوشتاری وجود داشته باشد ، عملیات منجر به TransientTransactionError و سقط جنین می شود. این نوشتن ها می توانند ترکیبی از عملیات درج/به روزرسانی/حذف باشند. در زیر مثال ، دو عمل حذف در همان سند که در دو معاملات مختلف فراخوانی شده است ، نشان می دهد.
خلاصه
پشتیبانی از معاملات چند مستند برای مجموعه های ماکت فقط آغاز است. انتشار آینده ممکن است معاملات را در سراسر استقرار Sharded و سطوح مختلف انزوا که ممکن است از دیگر پایگاه داده های رابطه ای در معرض دید خود قرار دهند ، برطرف کند. من می خواهم یک نکته مهم را یادآوری کنم -
وی گفت: "فقط به این دلیل که اکنون از معاملات پشتیبانی می کنید ، نباید مدل داده را در حدود 3 شکل عادی طراحی کنید. شما همیشه باید یک طرح طرح MONGODB مؤثر داشته باشید تا اطمینان حاصل کنید که کاربرد شما بسیار عملکرد دارد.
معامله چند مستند در مقایسه با سند تک می نویسد ، هزینه عملکرد بیشتری را متحمل می شود. بنابراین ، "هزینه عملکرد استفاده از معاملات چیست؟"سوال عالی! اما این یک موضوع برای یک روز دیگر است.
امیدوارم امروز چیز جدیدی را در مورد شما آموخته اید که مسیر "تسلط بر MongoDB - یک نکته در روز" را مقیاس می کند.
تجارت با گزینههای باینری...
ما را در سایت تجارت با گزینههای باینری دنبال می کنید
برچسب :
نویسنده : نازنین فراهانی
بازدید : 44
تاريخ : سه
شنبه
16 خرداد
1402 ساعت: 20:57