درک و استفاده از معاملات در خروجی زیر

  • 2021-09-26

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

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

معاملات چیست?

معاملات راهی برای گروه بندی با هم و جداسازی چندین عبارت برای پردازش به عنوان یک عملیات واحد است. به جای اجرای هر دستور به صورت جداگانه به سرور, در یک معامله, دستورات با هم همراه و در یک زمینه جداگانه از درخواست های دیگر اجرا.

جداسازی بخش مهمی از معاملات است. در یک معامله, اظهارات اعدام تنها می تواند محیط درون معامله خود را تحت تاثیر قرار. از داخل معامله, اظهارات می توانید داده ها را تغییر دهید و نتایج بلافاصله قابل مشاهده. از خارج تا زمان انجام معامله هیچ تغییری ایجاد نمی شود و در این زمان همه اقدامات درون معامله به یکباره قابل مشاهده می شوند.

این ویژگیها به پایگاههای اطلاعاتی کمک میکنند تا با فراهم کردن اتمی بودن (اقدامات در یک تراکنش یا همه متعهد هستند یا همه به عقب برمیگردند) و انزوا (خارج از تراکنش هیچ تغییری نمیکند تا زمانی که متعهد باشد در حالی که در داخل هر گزاره عواقب فوری دارد). اینها با هم به پایگاه داده کمک می کنند تا ثبات را حفظ کند (با تضمین اینکه تحولات نسبی داده نمی تواند رخ دهد). علاوه بر این, تغییرات در معاملات به عنوان موفق بازگشت نیست تا زمانی که به ذخیره سازی غیر فرار متعهد, فراهم می کند که دوام.

برای رسیدن به این اهداف, معاملات استخدام تعدادی از استراتژی های مختلف و سیستم های پایگاه داده های مختلف استفاده از روش های مختلف. خروجی زیر با استفاده از یک سیستم به نام کنترل همزمانی چند نسخه (سی سی), که اجازه می دهد تا پایگاه داده برای انجام این اقدامات با استفاده از عکس های فوری داده. این سیستمها با هم یکی از بلوکهای اساسی ساخت پایگاههای اطلاعاتی رابطهای مدرن را تشکیل میدهند و به این سیستمها اجازه میدهند تا دادههای پیچیده را با روشی مقاوم در برابر تصادف با خیال راحت پردازش کنند.

انواع شکست های سازگاری

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

چهار راه اصلی وجود دارد که ناسازگاری می تواند بسته به اجرای معامله ایجاد شود. تحمل شما برای سناریوهایی که ممکن است این سناریوها بوجود بیایند بر نحوه استفاده شما از معاملات در برنامه های شما تاثیر می گذارد.

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

این است که اغلب به عنوان یک نقض شدید ثبات در نظر گرفته, به عنوان معاملات به درستی جدا نیست فرم یکی دیگر. اظهاراتی که ممکن است هرگز به پایگاه داده متعهد نباشند می توانند بر اجرای سایر معاملات تاثیر بگذارند و رفتار خود را تغییر دهند.

معاملاتی که امکان خواندن کثیف را فراهم می کنند نمی توانند ادعای منطقی در مورد قوام داده های حاصل داشته باشند.

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

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

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

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

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

سطوح جداسازی معامله

معاملات یک راه حل "یک اندازه برای همه" نیستند. سناریوهای مختلف نیاز به معاملات متفاوتی بین عملکرد و حفاظت دارند. خوشبختانه, خروجی زیر اجازه می دهد تا به شما برای مشخص کردن نوع انزوا معامله شما نیاز دارید.

سطوح جداسازی پیشنهاد شده توسط اکثر سیستم های پایگاه داده شامل موارد زیر است:

خواندن غیر متعهد سطح انزوا است که کمترین تضمین را در مورد حفظ ثبات و انزوا داده ها فراهم می کند. در حالی که معاملات با استفاده از خواندن غیر متعهد دارای ویژگی های خاصی هستند که اغلب با معاملات مرتبط هستند مانند توانایی انجام چندین عبارت در یک زمان یا عقب انداختن اظهارات در صورت بروز اشتباه اجازه می دهد موقعیت های متعددی که سازگاری می تواند شکسته شود.

معاملات پیکربندی شده با سطح جداسازی غیر متعهد خواندن اجازه می دهد:

  • کثیف می خواند
  • خواندن های غیر تکراری
  • فانتوم می خواند
  • ناهنجاری های سریال سازی

این سطح از انزوا به طور کلی توصیه نمی شود زیرا تقریبا هیچ تضمینی در مورد سازگاری و جداسازی داده ها فراهم نمی کند. این است که عمدتا مفید است اگر شما نیاز به اظهارات گروه با هم در یک "همه یا هیچ چیز" مدل تعهد, اما هیچ تضمین یکپارچگی لازم نیست (یک اتفاق بسیار نادر).

خواندن متعهد یک سطح انزوا است که به طور خاص در برابر خواندن کثیف محافظت می کند. هنگامی که معاملات با استفاده از سطح متعهد به عنوان خوانده شده از ثبات, داده های غیر متعهد هرگز نمی تواند زمینه داخلی یک معامله را تحت تاثیر قرار. این فراهم می کند یک سطح اساسی از ثبات با تضمین این که داده های غیر متعهد هرگز یک معامله را تحت تاثیر قرار.

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

  • خواندن های غیر تکراری
  • فانتوم می خواند
  • ناهنجاری های سریال سازی

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

اگرچه خواندن قابل تکرار می تواند از خواندن غیر قابل تکرار و خواندن کثیف جلوگیری کند اما هنوز هم می تواند از این مشکلات انزوا رنج ببرد:

  • فانتوم می خواند
  • ناهنجاری های سریال سازی

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

برای اینودیب موتور خروجی زیر است (موتور عادی برای اکثر موارد), روش انزوا به عنوان خوانده شده تکرار به طور پیش فرض است.

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

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

تعریف معامله

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

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

بنابراین نحو اساسی یک معامله به این شکل است:

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

ما می توانیم دو بیانیه را که با هم این انتقال را در یک معامله که به نظر می رسد این است بسته بندی کنیم:

در اینجا 1 1000 از حساب با شناسه = 1 بدون قرار دادن $1000 به حساب با شناسه = 2 گرفته نخواهد شد . در حالی که این دو عبارت به صورت متوالی در تراکنش اجرا می شوند, متعهد خواهند شد, و بنابراین به طور همزمان بر روی مجموعه داده های اساسی اجرا می شوند.

بازگرداندن معاملات

در یک معامله, یا همه یا هیچ یک از اظهارات خواهد شد به پایگاه داده متعهد. کنار گذاشتن اظهارات و اصلاحات انجام شده در یک معامله به جای اعمال در پایگاه داده به عنوان "بازگشت" معامله شناخته می شود.

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

به صورت دستی رول اظهارات که در طول معامله فعلی داده شده است, شما می توانید دستور عقبگرد استفاده. این همه اظهارات در معامله در اصل بازگشت ساعت به شروع معامله لغو خواهد شد.

مثلا, فرض کنید ما از همان حساب های بانکی که قبلا استفاده می کردیم استفاده می کنیم, اگر بعد از صدور بیانیه های به روز رسانی متوجه شویم که ما به طور تصادفی مبلغ اشتباهی را منتقل کرده ایم یا از حساب های اشتباه استفاده کرده ایم, می توانیم تغییرات را به جای ارتکاب برگردانیم:

هنگامی که ما عقبگرد, $1500 هنوز هم در حساب با شناسه = 1.

استفاده از نقاط ذخیره هنگام برگشت

به طور پیش فرض, دستور عقبگرد بازنشانی معامله به جایی که بود که معامله شروع و یا شروع دستورات برای اولین بار نامیده می شدند. اما اگر ما فقط می خواهید برای برگرداندن برخی از اظهارات در معامله?

در حالی که شما می توانید مکان های دلخواه را مشخص کنید به رول به هنگام صدور دستور عقبگرد, شما می توانید به هر رول "صرفه جویی در نقاط" که شما در طول معامله تنظیم کرده اید. شما می توانید مکان در معامله خود را جلوتر از زمان با دستور نقطه ذخیره علامت و سپس مرجع کسانی که مکان های خاص زمانی که شما نیاز به عقب.

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

برای مشخص کردن یک نقطه ذخیره, صدور فرمان ذخیره نقطه پس از یک نام برای نقطه ذخیره:

برای بازگشت به نقطه ذخیره که عقبگرد به فرمان استفاده کنید:

بیایید مثال متمرکز بر حساب را که استفاده کرده ایم ادامه دهیم:

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

تنظیم سطح انزوای معاملات

برای تنظیم سطح انزوا شما می خواهم برای یک معامله, شما می توانید بیانیه معامله مجموعه ای با بند سطح انزوا استفاده. بیانیه معامله مجموعه اجازه می دهد تا شما را به تغییر سطوح انزوا و خواندن و نوشتن اجازه معاملات.

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

می تواند هر یک از این موارد باشد (که قبلا به تفصیل توضیح داده شد):

  • خواندن غیر متعهد
  • خواندن متعهد
  • به عنوان خوانده شده تکرار (حالت پیش فرض خروجی زیر از عمل)
  • قابل سریالسازی

شما همچنین می توانید کلمات کلیدی جهانی و یا جلسه در هنگام صدور فرمان را تحت تاثیر قرار دامنه های مختلف فراهم می کند.

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

اصلاح کننده جلسه (مانند سطح جداسازی معامله جلسه تنظیم شده ) به شما امکان می دهد سطح انزوا را برای هر تراکنش بعدی در همان جلسه تغییر دهید. یک بار دیگر, این هیچ معاملات موجود تاثیر نمی گذارد.

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

اگر شما معاملات متعدد است که باید به ترتیب اجرا شود, شما به صورت اختیاری می توانید زنجیره ای با هم با استفاده از دستور متعهد و زنجیره ای.

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

در این بیانیه کار می کند دقیقا به عنوان اگر شما صادر مرتکب; تنظیم سطح انزوا معامله; شروع معامله :

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

تراکنش ها عملکردهای مفیدی را فراهم می کنند که می تواند به حفظ داده های شما در یک حالت منسجم کمک کند. با این حال, سطوح مختلف انزوا دارای تعدادی از معاملات تجاری است که باید سعی کنید در نظر داشته باشید. تعیین سطح مناسب حفاظت برای مورد استفاده شما می تواند نیاز به اکتشاف و تفکر داشته باشد. این امر به ویژه اگر معاملات برای یک مدت طولانی اجرا خواهد شد, به عنوان پایگاه داده ممکن است به طور قابل توجهی تغییر قبل از مرتکب رخ می دهد, که می تواند به عقبگرد و کار دستی بیشتر منجر.

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

Justin Ellingwood

جاستین الینگوود

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

ثبت دیدگاه

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