خصوصیات اسیدی در سیستم های مدیریت بانک اطلاعاتی چیست؟

ساخت وبلاگ

معاملات اسید تضمین می کند که یک بانک اطلاعاتی پس از اجرای گروهی از عملیات ، در حالت مداوم قرار خواهد گرفت. بیشتر بانکهای اطلاعاتی برای عملیاتی که بر یک رکورد واحد تأثیر می گذارد ، ضمانت های معامله ای ارائه می دهند. با این حال ، همه بانکهای اطلاعاتی از معاملات پشتیبانی نمی کنند که در چندین سوابق کار می کنند ، که می تواند مربوط به توسعه دهندگان که عادت به استفاده از آنها دارند ، باشد.

مدل داده MongoDB اجازه می دهد تا داده های مرتبط در یک سند واحد ذخیره شوند. ما تخمین می زنیم که 80 ٪ -90 ٪ برنامه هایی که داده های خود را به گونه ای مدل می کنند به گونه ای که از مدل سند استفاده می کند ، نیازی به معاملات چند مستند نخواهد داشت. با این حال ، MongoDB از معاملات اسید چند مستند برای موارد استفاده که به آنها نیاز دارد پشتیبانی می کند. توسعه دهندگان از انعطاف پذیری قادر به مدل سازی داده های خود به شکلی که معمولاً به معاملات چند مستند احتیاج ندارد بلکه در صورت انجام آنها در دسترس است ، قدردانی می کنند.

در این مقاله ، ما بررسی خواهیم کرد که معامله اسیدی چیست ، نحوه اجرای معامله در MongoDB و چرا و چه زمانی از یک مورد استفاده می کنیم.

معاملات اسیدی چیست؟

معامله گروهی از پایگاه داده است که عملیات را خوانده و می نویسند که تنها در صورت موفقیت همه موفق می شوند. معاملات می توانند روی یک رکورد واحد یا سوابق مختلف تأثیر بگذارند.

بیایید با یک معامله مثال که بر چندین سوابق تأثیر می گذارد ، قدم بزنید. تصور کنید که شما در حال ساختن یک عملکرد برای انتقال پول از یک حساب به حساب دیگر هستید که در آن هر حساب سابقه خاص خود است. اگر با موفقیت از حساب منبع پول می گیرید ، اما هرگز آن را به مقصد اعتبار ندهید ، یک مشکل جدی در حسابداری دارید. اگر به جای آن مقصد را اعتبار می دهید ، شما به همان اندازه مشکل بزرگی دارید (اگر نه بزرگتر) ، اما هرگز پول را از منبع خارج نکردید تا آن را بپوشانید. این دو عمل نوشتن باید هر دو اتفاق بیفتند ، یا هر دو اتفاق نیفتند تا سیستم سازگار باشد.

await session.withTransaction(async () => , <$inc: >, ) ؛if (subtractmoneyresults. modifiedCount! == 1)const addmoneyresults = در انتظار حساب کاربری . updateone (<_id: account2>, <$inc: >, ) ؛if (addmoneyresults. modifiedCount! == 1)>);

در این نمونه کد معاملات ، پول از یک حساب به حساب دیگر منتقل می شود. به روزرسانی های هر دو حساب باید موفق شوند یا معامله سقط شود. برای دریافت یک نسخه از نمونه کد کامل و خود آن را به عنوان مخزن GitHub شروع Node. js سریع شروع کنید و خودتان آن را اجرا کنید.

این نوع مشکلی است که معاملات چند رکورد برای حل آن اختراع شده است: ما به پایگاه داده می گوییم که ما یک معامله را انجام می دهیم ، و هر به روزرسانی را که در طول مسیر انجام می دهد ، پیگیری می کند. اگر اتصال قبل از اتمام معامله شکسته شود ، یا در صورت عدم موفقیت در معامله ، پایگاه داده تمام تغییراتی را که در طول معامله نوشت ، به عقب بازگردد.

نکته منفی در استفاده از معامله این است که بانک اطلاعاتی مجبور است منابع درگیر را قفل کند تا از دخالت همزمان با یکدیگر جلوگیری کند. این بدان معناست که سایر مشتریانی که سعی در نوشتن داده دارند ممکن است در انتظار تکمیل معامله ، تأثیر تأخیر در برنامه و در نهایت تجربه کاربر باشند.

خصوصیات اسید معامله چیست؟

اسید مخفف مخفی است که مخفف اتمی ، قوام ، انزوا و دوام است.

با هم ، این خصوصیات اسیدی اطمینان حاصل می کنند که مجموعه ای از عملیات پایگاه داده (که در یک معامله با هم قرار گرفته اند) حتی در صورت بروز خطاهای غیر منتظره ، پایگاه داده را در حالت معتبر قرار می دهند.

اتمی

اتمی تضمین می کند که تمام دستوراتی که یک معامله را تشکیل می دهند به عنوان یک واحد واحد رفتار می شوند و یا با هم موفق می شوند یا شکست می خورند. این مهم است زیرا در مورد یک رویداد ناخواسته ، مانند تصادف یا قطع برق ، می توانیم از وضعیت بانک اطلاعاتی اطمینان داشته باشیم. معامله یا با موفقیت انجام می شد یا در صورت عدم موفقیت بخشی از معامله ، بازپرداخت می شد.

اگر با مثال فوق ادامه دهیم ، پول از منبع کسر می شود و در صورت بروز هرگونه ناهنجاری ، تغییرات دور می شوند و معامله از بین می رود.

ثبات

قوام تضمین می کند که تغییرات ایجاد شده در یک معامله با محدودیت های پایگاه داده سازگار است. این شامل کلیه قوانین ، محدودیت ها و محرک ها است. اگر داده ها به حالت غیرقانونی تبدیل شوند ، کل معامله با شکست روبرو می شود.

با بازگشت به مثال انتقال پول ، بیایید بگوییم محدودیت وجود دارد که تعادل باید یک عدد صحیح مثبت باشد. اگر سعی کنیم بیش از حد پول بگیریم ، تعادل محدودیت را برآورده نمی کند. به همین دلیل ، قوام معامله اسید نقض می شود و معامله شکست می خورد.

انزوا

جداسازی تضمین می کند که تمام معاملات در یک محیط جدا شده انجام می شود. این امر به طور همزمان انجام معاملات را امکان پذیر می کند زیرا معاملات با یکدیگر تداخل نمی کنند.

به عنوان مثال ، بیایید بگوییم که مانده حساب ما 200 دلار است. دو معامله برای برداشت 100 دلار در همان زمان شروع می شود. معاملات به صورت انزوا انجام می شود و تضمین می کند که وقتی هر دو کامل شوند ، ما به جای 100 دلار تعادل 0 دلار خواهیم داشت.

دوام

دوام تضمین می کند که پس از اتمام معامله و تغییر در پایگاه داده ، همچنان ادامه می یابد. این تضمین می کند که داده های موجود در سیستم حتی در مورد خرابی های سیستم مانند خرابی یا قطع برق نیز ادامه خواهند یافت.

ویژگی های اسید معاملات همان چیزی است که به توسعه دهندگان اجازه می دهد تا شب را به روزرسانی های پیچیده ، هماهنگ انجام دهند و به خوبی بخوابند و بدانند که داده های آنها سازگار و با خیال راحت ذخیره می شود.

در MongoDB ، به روزرسانی های تک فیلم همیشه اتمی بوده است. مدل سند خود را به ذخیره داده های مرتبط که در یک سند واحد به آنها دسترسی دارند (در مقایسه با مدل رابطه ، که در آن داده های مرتبط ممکن است نرمال شده و بین جدول های مختلف تقسیم شود) وام می دهد. در بیشتر موارد ، یک طرحواره به خوبی طراحی شده به شما امکان می دهد بدون نیاز به معاملات چند مستند کار کنید.

هنگامی که به انطباق اسید چند مستند احتیاج دارید ، معاملات MongoDB در سراسر خوشه خود کار می کند و روشی را که انتظار دارید عمل می کند. در استفاده از معاملات در یک سیستم توزیع شده ، عملکرد سربار وجود دارد ، بنابراین می خواهید به محدودیت های منابع و اهداف عملکرد خود توجه داشته باشید.

مثال معامله اسیدی چیست؟

بیایید با مثال بانکی که قبلاً در مقاله بحث کردیم ، ادامه دهیم که پول از یک حساب به حساب دیگر منتقل می شود. بیایید هر یک از خصوصیات اسید را در این مثال بررسی کنیم:

  • اتمی: پول باید هر دو از یک حساب حذف شود و به دیگری اضافه شود ، یا معامله سقط شود. حذف پول از یک حساب بدون اضافه کردن آن به دیگری ، داده ها را در حالت متناقض قرار می دهد.
  • قوام: محدودیت پایگاه داده را در نظر بگیرید که یک حساب حساب نمی تواند زیر صفر دلار کاهش یابد. کلیه به روزرسانی های موجود در یک حساب حساب در داخل یک معامله باید حساب را با یک مانده معتبر و غیر منفی ترک کند یا معامله باید سقط شود.
  • جداسازی: دو درخواست همزمان را برای انتقال پول از همان حساب بانکی در نظر بگیرید. نتیجه نهایی اجرای درخواست های انتقال به طور همزمان باید همانند اجرای درخواست های انتقال به صورت متوالی باشد.
  • دوام: بلافاصله پس از تأیید یک بانک اطلاعاتی تأیید کرد که پول از یک حساب بانکی به دیگری منتقل شده است. پایگاه داده باید اطلاعات به روز شده را نگه دارد ، حتی اگر یک شکست غیر منتظره وجود داشته باشد.

Diagram showing how the ACID properties impact the flow of transferring money from one bank account to another.

نمودار نشان می دهد که چگونه خواص اسید بر جریان انتقال پول از یک حساب بانکی به دیگری تأثیر می گذارد.

چرا معاملات اسیدی مهم است؟

معاملات اسید اطمینان می دهد که داده ها در یک بانک اطلاعاتی سازگار هستند. در مدل های داده ای که داده های مرتبط بین چندین سوابق یا اسناد تقسیم می شوند ، معاملات اسید چند رکورد یا اسید چند مستند می تواند برای موفقیت یک برنامه بسیار مهم باشد.

مدل سند MongoDB به توسعه دهندگان این امکان را می دهد تا داده های مرتبط را با استفاده از آرایه ها و اشیاء تعبیه شده در یک سند واحد ذخیره کنند. ما تخمین می زنیم که 80 ٪ -90 ٪ برنامه ها هنگام استفاده از مدل سند برای ذخیره داده های مرتبط با هم ، نیازی به استفاده از معاملات چند مستند ندارند. MongoDB از معاملات چند مستند برای مواردی که داده های مرتبط در یک سند واحد موجود نیست ، پشتیبانی می کند.

معاملات اسید چگونه در MongoDB کار می کند؟

MongoDB پشتیبانی از معاملات اسید چند مستند در نسخه 4. 0 در سال 2018 را اضافه کرد و این پشتیبانی از معاملات اسید چند مستند توزیع شده در نسخه 4. 2 در سال 2019 را پشتیبانی کرد.

مدل سند MongoDB اجازه می دهد تا داده های مرتبط در یک سند واحد ذخیره شوند. مدل سند ، همراه با به روزرسانی های اسناد اتمی ، نیاز به معاملات را در اکثر موارد استفاده از بین می برد. با این وجود ، مواردی وجود دارد که معاملات MongoDB چند مجموعه واقعی ، بهترین انتخاب بهترین انتخاب است.

معاملات MongoDB به طور مشابه با معاملات در پایگاه داده های دیگر کار می کند. برای استفاده از معامله ، یک جلسه MongoDB را از طریق راننده شروع کنید. سپس از آن جلسه برای اجرای گروه عملیات پایگاه داده خود استفاده کنید. شما می توانید هر یک از عملیات CRUD (ایجاد ، خواندن ، به روزرسانی و حذف) را در چندین اسناد ، مجموعه های مختلف و چندین تکه اجرا کنید.

برای نمونه کد خاص نحوه اجرای معاملات ، شروع سریع در مرکز توسعه دهنده MongoDB را مشاهده کنید:

  • معاملات اسید چند مستند در MongoDB با Golang
  • معاملات اسید چند مستند در MongoDB با جاوا
  • معاملات اسید چند مستند در MongoDB با node. js
  • معاملات اسید چند مستند در MongoDB با پایتون

برای راهنماهای خاص زبان برای هر یک از زبانهایی که به طور رسمی توسط MongoDB پشتیبانی می شوند ، از مستندات درایورهای MongoDB دیدن کنید. برای لیست بهترین روشها و ملاحظات تولید ، به مستندات MongoDB مراجعه کنید.

چه زمانی باید از معاملات چند مستند MongoDB استفاده کنم؟

همانطور که قبلاً نیز اشاره کردیم ، ما تخمین می زنیم که 80 ٪ -90 ٪ برنامه هایی که از مدل سند استفاده می کنند ، نیازی به استفاده از معاملات در MongoDB ندارند.

برای 10 ٪ -20 ٪ برنامه های دیگر ، معاملات چند مستند در دسترس است.

برنامه هایی که به معاملات نیاز دارند ، معمولاً از مواردی استفاده می کنند که مقادیر بین احزاب مختلف رد و بدل می شوند. اینها معمولاً "سیستم ضبط" یا "خط مشاغل" هستند.

برنامه های مثال که ممکن است از معاملات چند مستند بهره مند شوند عبارتند از:

  • سیستمهایی که وجوه مانند برنامه های بانکی ، سیستم های پردازش پرداخت و سیستم عامل های معاملاتی را جابجا می کنند.
  • سیستم های زنجیره ای و رزرو که در آن مالکیت کالاها و خدمات از یک طرف به طرف دیگر منتقل می شود.
  • سیستم های صورتحساب که اطلاعات را در سوابق تفصیلی و همچنین سوابق خلاصه ذخیره می کنند.

بهترین شیوه های معاملات در MongoDB چیست؟

به طور کلی ، ما مدل سازی داده ها را به گونه ای توصیه می کنیم که داده هایی که به هم دسترسی پیدا می کنند در کنار هم ذخیره شوند. هنگامی که داده ها از این طریق مدل می شوند ، عملکرد بهتری خواهید داشت و معاملات لازم نخواهند بود.

برای برنامه هایی که به معاملات نیاز دارند ، بهترین روشهای زیر را توصیه می کنیم:

  • معاملات طولانی مدت را به قطعات کوچکتر بشکنید تا آنها از زمان پیش فرض 60 ثانیه ای تجاوز نکنند.(توجه داشته باشید که این زمان می تواند تمدید شود.) اطمینان حاصل کنید که عملیات در معامله شما از فهرست ها استفاده می کند تا سریع اجرا شود.
  • هر معامله را به 1000 اصلاح سند محدود کنید.
  • اطمینان حاصل کنید که نگرانی های خواندن و نوشتن مناسب پیکربندی شده است (توجه داشته باشید که شروع در نسخه 5. 0 ، پیش فرض MongoDB به نگرانی اکثریت لازم است).
  • رسیدگی به خطای مناسب را اضافه کنید و معاملات را دوباره امتحان کنید که به دلیل خطاهای گذرا انجام نمی شوند.
  • توجه داشته باشید که معاملات که بر چندین قسمت تأثیر می گذارند ، هزینه عملکرد را متحمل می شوند.

خلاصه

معاملات اسید آسایش را برای توسعه دهندگان فراهم می کند تا بدانند که بانک اطلاعاتی آنها پس از اجرای مجموعه ای از عملیات ، در وضعیت مداوم قرار دارد. پایگاه داده های رابطه ای به دلیل نحوه تقسیم داده های مرتبط بین جدول های مختلف ، به معاملات متکی هستند. پایگاه داده های دیگر مانند MongoDB به ندرت به معاملات نیاز دارند اما توانایی در معاملات رویداد را فراهم می کنند.

Atlas MongoDB پایگاه داده کاملاً مدیریت شده MongoDB است و ساده ترین راه برای شروع استفاده از MongoDB است. با ایجاد یک خوشه اطلس MongoDB رایگان با معاملات شروع کنید.

گزینه های باینری...
ما را در سایت گزینه های باینری دنبال می کنید

برچسب : نویسنده : هایده حائری بازدید : <-PostHit-> تاريخ : چهارشنبه 15 شهريور 1402 ساعت: 11:51