طراحی پايگاه دادهها ۲
در این درس با مفاهیم پیشرفته طراحی پایگاه دادهها آشنا میشویم و در انتهای ترم انتظار میرود که دانشجو بر مفاهیمی چون تراکنش، همروندی و پروتکلهای کنترل آن، ترمیم و ایمنی پایگاه دادهها، بهینهسازی و دیگر مواردی که در یخش ریزمواد به تفصیل بیان شدهاند مسلط شده باشد.
ریز مواد
طرح اجرای متوالی، طرح اجرای همروند، مشکلات توارد کنترلنشده، طرح توالیپذیر، طرحهای معادل (نتیجهای-تعارضی-نمایی)، انواع طرحهای توالیپذیر (نتیجهای-تعارضی-نمایی)، آزمون توالیپذیری، قضیه بنیادی در تئوری توالیپذیری، کاربرد تئوری توالیپذیر
پروتکلهای قفلگذاری: دوگانی، چند اسلوبی، قفلگذاری دو مرحلهای (مبنایی-محافظهکار-شدید-جسور-دقیق)، پروتکل قفلگذاری روی چند واحد قفلشدنی، قفلگذاری قصدی، قفلگذاری درختی، قفلگذاری جنگلی، قفلگذاری چند نسخهای، راهحلهای مشکل بنبست (پیشگیری-اجتناب-کشف)، پروتکلهای مبتنی بر زمان مهر، پروتکلهای چند نسخهسازی، پروتکل تایید، پدیده شبح داده، قفلگذاری مسندی، کنترل همروندی در شاخص درختی، پارامترهای ارزیابی تکنیکهای کنترل همروندی.
تعریف، انواع خرابی، مدیر ترمیم، روشهای تخلیه حافظه نهان، امکانات ترمیم، ثبت با نوشتن پیشرس، انواع فایل ثبت، زدایش فایل ثبت، ایجاد نقطه وارسی، روشهای ترمیم خرابی سیستمی (UNDO-NO REDO, REDO-NO UNDO, REDO-UNDO, NO UNDO-NO REDO)، ترمیم خرابی رسانهای.
تعریف، عوامل نقض جامعیت، انواع محدودیت جامعیتی، روشهای توصیف محدودیت جامعیتی، سیستم فعال، قاعده فعال، معماری سیستم فعال، مدل اجرا، مراحل اعمال محدودیتها توسط سیستم فعال، مزایا و کاربردهای سیستم فعال، رهانا (تعریف-کاربرد-مزایا-مشکلات-کمداشتها)
تعریف، خطرات، تحلیل خطرات، شئ ایمنی، تدابیر ایمنی غیر کامپیوتری، تدابیر کامپیوتری: شناسایی کاربر، احراز هویت، مجازشماری، روشهای کنترل دستیابی، روشهای طراحی سیستم اطلاعاتی ایمن.
تعریف- مراحل کلی پردازش پرسش- تجزیه پرسش- پیادهسازی عملگرهای جبر رابطهای، بهینهسازی پرسش: بازنویسی، ارزیابی عبارات، انتخاب طرح اجرا: روش مبتنی بر هزینه، روش یافتاری، روشهای دیگر.
ردهبندی سیستم، اجزای سیستم، کاتالوگ سیستم، پارامترهای مربوط به کارایی، پارامترهای مربوط به معماری، پارامترهای مربوط به زبان دادهای فرعی، محورهای اصلی مقایسه سیستمها، محکزنی سیستم.
دستورات DML و کنترل تراکنش ها
در این فصل انواع دستورات DML(Data Manipulation Language) توضیح داده می شوند. دستورهای INSERT، DELETE، UPDATE از نوع DML هستند که باعث می شوند اطلاعات جدول های دیتابیس تغییر یابند. همچنین در ادامه، روش کنترل تراکنش ها بر اساس مفهوم READ CONSISTENCY و عملیات COMMIT، ROLLBACK و SAVEPOINT توضیح داده می شوند.
زمانی که یک دستور از نوع DML اجرا می شود یکی از حالت های زیر رخ می دهد:
1.اطلاعات جدید به یک جدول اضافه می شوند(توسط دستور INSERT).
2.اطلاعات قبلی تغییر می کند(توسط دستور UPDATE).
3.اطلاعات قبلی حذف می شوند(توسط دستور DELETE).
در دیتابیس اوراکل به مجموعه ای از دستورات DML که یک عمل خاصی را انجام می دهند یک تراکنش(TRANSACTION) می گویند.
دستور INSERT
سینتکس دستور INSERT را در شکل زیر می بینید. در این دستور کلمه TABLE نام یک جدول از دیتابیس می باشد و کلمات COLUMN نام ستون یا ستون هایی از آن جدول هستند که در لیست VALUES برای هر کدام یک مقدار خاص درنظر گرفته می شود تا در جدول مورد نظر درج شود.
نکته: در دستور INSERT برای مقادیری از نوع تاریخ یا رشته، از علامت ” استفاده می شود.
مثال: یک سطر جدید شامل اطلاعات دپارتمان شماره 70 به جدول DEPARTMENTS اضافه کنید.
نکته: اگر سطری که توسط دستور INSERT به یک جدول اضافه می کنیم، شامل اطلاعات برای تمام ستون های آن جدول است (و ترتیب ستون های جدول رعایت شده باشد) دیگر نیاز نیست در آن دستور از نام ستون ها استفاده کنیم.
مثال: جدول DEPARTMENTS دارای چهار ستون است که در آنها توسط دستور زیر اطلاعات با نوع داده مناسب درج می شوند ولی نام ستون ها استفاده نشده است.
نکته: اگر در دستور INSERT نام و مقدار یکی از ستون های جدول تعریف نشود، برای آن ستون مقدار NULL درج می شود. همچنین می توان در ستون های جدول به روش صریح و با استفاده از لیست VALUES یک مقدار NULL درج کرد.
مثال: جدول DEPARTMENTS چهار ستون دارد که توسط هر دو دستور در ستون سوم و چهارم مقدار NULL درج می شود.
نکته: می توان در دستور INSERT و در لیست VALUES از توابع مختلف استفاده نمود.
مثال: با استفاده از تابع SYSDATE تاریخ و زمان فعلی سیستم در ستون HIRE_DATE درج می شود.
مثال: اطلاعات کارمند جدید در جدول EMPLOYEES درج شود. از تابع تبدیل نوع داده TO_DATE استفاده می شود و تاریخ با فرمت مناسب ذخیره می شود.
کُپی اطلاعات با استفاده از دستور INSERT
اگر سه شرط زیر رعایت شوند می توان با استفاده از دستور INSERT اطلاعات یک جدول را در جدول دیگر کُپی کرد:
1.در داخل دستور INSERT از یک SUBQUERY استفاده شود.
2.نوع داده و تعداد ستون های دستور INSERT با دستور SUBQUERY برابر باشد.
3.در دستور INSERT از لیست VALUES استفاده نشود.
مثال: تمام سطرهایی که توسط دستور SUBQUERY انتخاب می شوند در جدول SALES_REPS درج شود.
مثال: یک کُپی از جدول EMPLOYEES در جدول COPY_EMP ذخیره شود (در دیتابیس جدول COPY_EMP با ساختار یکسان با جدول EMPLOYEES وجود دارد).
استفاده از متغیرهای تعویضی در دستور INSERT
در زمان درج اطلاعات توسط دستور INSERT می توان از متغیرهای تعویضی استفاده نمود. ابتدا متغیرهای تعویضی را با ذکر چند مثال توضیح می دهیم.
متغیرهای تعویضی در قسمت های مختلف یک دستور SQL از جمله نام جداول، ستون ها و یا عبارات ORDER BY و شروط WHERE استفاده می شوند. با استفاده از این متغیرها می توانیم مقادیر یا نام ها را از کاربر بپرسیم و یا در بیرون از دستور تعریف کنیم. تا زمانی که این متغیرها تعیین نشود دستور اجرا نمی شود. برای تعریف متغیر تعویضی باید از علامت & استفاده کنیم.
مثال: در این مثال ابتدا مقدار متغیر EMPLOYEE_NUM از کاربر پرسیده می شود و سپس بر اساس مقدار دستور SELECT اجرا می شود.
نکته: مقادیر رشته و تاریخ باید مابین علامت ‘ ‘ قرار بگیرند.
مثال: استفاده از چندین متغیر در یک دستور SELECT:
نکته: برای انکه فقط یکبار مقدار یک متغیر از کاربر پرسیده شود و در جاهای دیگر که آن متغیر قرار دارد از همان مقدار استفاده شود باید در زمان نوشتن متغیر برای مرتبه اول از علامت && استفاده گردد.
مثال: مقدار متغیر COLUMN_NAME را یک مرتبه از کاربر بپرسید و دستور زیر را اجرا کنید.
نکته: در محیط SQL*PLUS نیز می توان از متغیرهای تعویضی استفاده نمود.
مثال:
نکته: می توان بجای اینکه مقدار متغیر را از کاربر پرسید، از دستور DEFINE قبل از دستور SELECT استفاده نمود.
مثال: مقدار متغیر EMPLOYEE_NUM را برابر با 200 تنظیم کنید و دستور زیر را اجرا کنید.
مثال: اطلاعات مورد نیاز دپارتمان جدید از کاربر دریافت شود و در جدول DEPARTMENT درج گردد.
دستور UPDATE
یکی دیگر از دستورات DML دستور UPDATE است که از آن برای تغییر مقدار اطلاعات جداول استفاده می شود. در شکل زیر سینتکس مربوط به این دستور را می بینید.
نکته: اگر در این دستور از عبارت WHERE استفاده شود عملیات UPDATE فقط برای یک یا چند سطر خاص انجام می شود و در غیر این صورت تمام سطرهای جدول تغییر می کنند.
مثال: مقدار ستون DEPARTMENT_ID برای سطرهایی که مقدار EMPLOYEE_ID آنها برابر با 113 است به مقدار 50 تغییر یابد.
مثال: مقدار ستون DEPARTMENT_ID در تمام سطرها برابر با 110 شود.
مثال: مقدار حق کمیسیون کارمند شماره 114 برابر با مقدار NULL شود.
نکته: در دستور UPDATE می توان از دستور SUBQUERY استفاده نمود.
مثال: شغل و حقوق کارمند شماره 103 برابر با شغل و حقوق کارمند شماره 205 شود.
مثال: شماره دپارتمان تمام کارمندانی که شغل آنها با شغل کارمند شماره 200 برابر است به شماره دپارتمان کارمند شماره 100 تغییر یابد.
دستور DELETE
دستور DELETE یک دستور از نوع DML است که یک یا چند سطر از جدول را حذف می کند. سینتکس این دستور را در شکل زیر انواع تراکنش ها می بینید.
در دستور DELETE استفاده از کلمه FROM اختیاری است. همچنین اگر از عبارت WHERE استفاده شود فقط سطرهایی از جدول که مطابق با شرط WHERE هستند حذف می شوند و در غیر این صورت تمام سطرهای جدول حذف خواهند شد.
مثال: سطرهایی از جدول که در آن نام دپارتمان برابر با Finance است را حذف کنید.
مثال: تمام سطرهای جدول COPY_EMP را حذف کنید.
نکته: در دستور DELETE می توان از SUBQUERY استفاده نمود.
مثال: سطرهایی از جدول EMPLOYEES که نام دپارتمان آنها شبیه به Public می باشد را حذف کنید.
نکته: دستور TRUNCATE یک دستور از نوع DDL(DATA DEFINITION LANGUAGE) می باشد که شبیه به دستور DELETE عمل می کند. این دستور تمام سطرهای یک جدول را پاک می کند و فقط ساختار جدول را باقی می گذارد. در شکل زیر سینتکس این دستور را می بینید.
مثال: تمام اطلاعات جدول COPY_EMP حذف شود.
کنترل تراکنش های دیتابیس
هر ارتباطی که یک کاربر با دیتابیس برقرار می کند SESSION نامیده می شود. در دیتابیس اوراکل هر تراکنش در یک SESSION خاص و به وسیله مجموعه ای از دستورات از نوع DML یا DDL رخ می دهد.
اگر در یک تراکنش از دستورات DML مانند INSERT، DELETE، UPDATE استفاده شود باید جهت دائمی کردن تغییراتی که این دستورات ایجاد کرده اند از دستور COMMIT استفاده شود.
همچنین اگر در یک SESSION بعد از دستورات انواع تراکنش ها DML یک دستور از نوع DDL استفاده شود دیتابیس اوراکل به صورت اتوماتیک یک عمل COMMIT انجام می دهد و دیگر نیازی به اجرای دستور COMMIT نیست.
مثال: یک سطر از جدول EMPLOYEES حذف شود و یک سطر در جدول DEPARTMENTS درج گردد. سپس این تغییرات به صورت دائمی در دیتابیس ذخیره شوند
اگر بعد از دستورات DML بجای دستور COMMIT از دستور ROLLBACK استفاده شود تمام تغییراتی که توسط آن تراکنش در حافظه انجام گرفته است لغو می شود و اطلاعات به مقادیر اولیه باز می گردند. همچنین اگر قبل از COMMIT به صورت ناخواسته ارتباط با دیتابیس قطع شود به صورت اتوماتیک یک عمل ROLLBACK انجام می شود.
مثال: به اشتباه تمام سطرهای جدول COPY_EMP حذف می شوند ولی در ادامه با دستور ROLLBACK تمام سطرها برگرداننده می شوند.
نکته: اگر قبل از عمل COMMIT دستورات DML، داده های یک جدول تغییر یابند این تغییرات موقتی در همان SESSION با دستور SELECT نمایش می یابند.
مثال: به اشتباه تمام سطرهای جدول TEST حذف می شوند ولی دستور ROLLBACK تغییرات انجام شده را لغو می کند. همچنین در ادامه یک سطر با ID برابر با 100 حذف می شود و عمل COMMIT انجام می شود تا این تغییرات در دیتابیس ذخیره شوند. توجه شود که قبل از عمل COMMIT و در همان SESSION دستور SELECT تغییر انجام شده را نمایش می دهد.
زمانی که در یک SESSION توسط دستورات DML سطرهایی از یک جدول تغییر می کنند این سطرها LOCK می شوند بنابراین SESSIONهای دیگر نمی توانند همزمان آنها را تغییر دهند تا زمانی که یک عمل COMMIT یا ROLLBACK در آن SESSION رخ دهد.
وقتی یک تراکنش در حال اجرا می باشد اگر بعد از یک دستور DML از دستورNAME1 SAVEPOINT استفاده شود و سپس مراحل بعدی تراکنش انجام شود می توان با دستور ROLLBACK TO SAVEPOINT NAME1 به زمان اجرای آن SAVEPOINT بازگشت. البته به شرطی که عمل COMMIT انجام نشده باشد زیرا بعد از هر COMMIT تمامی SAVEPOINT های قبلی حذف می شوند.
مثال: در تراکنش زیر یک SAVEPOINT به نام A بعد از دستور DELETE و یکی دیگر به نام B بعد از دستورات UPDATE و INSERT انجام می شود. بنابراین می توان به هرکدام از آنها ROLLBACK کرد.
اصل READ CONSISTENCY
عملیاتی که توسط کاربران یک دیتابیس انجام می شود یا به صورت READ و با دستور SELECT است یا به صورت WRITE و با دستورات INSERT، UPDATE، DELETE. در تمام این عملیات باید مکانیزمی باشد که هر کاربر مستقل از دیگران به داده های قبل از آخرین COMMIT در دیتابیس دسترسی داشته باشد
دیتابیس اوراکل بر اساس اصل READ CONSISTENCY تضمین می کند یک کاربر در هر SESSION آخرین اطلاعات COMMIT شده را می بیند زیرا تا زمانی که COMMIT انجام نشود SESSION های دیگر متوجه تغییرات نخواهند شد. بنابراین اگر دو SESSION به منظور نوشتن اطلاعات در سطرهای یکسان اقدام کنند باید منتظر هم بمانند ولی در حالت های دیگر هر SESSION به اطلاعات مورد نیاز خود دسترسی دارد.
نکته: یک کاربر می تواند SESSIONهای مختلف داشته باشد و در سطح SESSION مفهوم READ CONSISTENCY پابرجاست.
نکته: زمانی که در یک SESSION با دستورات DML سطرهای یک جدول تغییر می کند قبل از عمل COMMIT اطلاعات قبلی در بخشی از دیسک به نام UNDO SEGMENT قرار دارد و SESSION های دیگر از طریق این بخش به اطلاعات قبلی دسترسی دارند تا زمانی که عمل COMMIT انجام شود.
عبارت FOR UPDATE در دستور SELECT
اگر یک کاربر به نام ALI، در یک دستور SELECT از عبارت FOR UPDATE استفاده کند سطرهایی که توسط دستور SELECT انتخاب شده اند LOCK می شوند و SESSIONهای دیگر نمی توانند آن سطرها را تغییر دهند تا زمانی که یک عمل COMMIT یا ROLLBACK توسط کاربر ALI اجرا شود. البته اگر آن سطرها از قبل توسط SESSIONهای دیگر LOCK شده باشند دیتابیس منتظر UNLOCK شدن آنها می ماند و سپس دستور SELECT FOR UPDATE را برای کاربر ALI اجرا می کند.
نکته: می توان در دستور SELECT FOR UPDATE از عبارت NOWAIT استفاده کرد تا اگر سطرهایی که می خواهیم LOCK کنیم از فبل LOCK بودند دیتابیس کنترل عملیات را به SESSION برگرداند و در پشت صحنه منتظر UNLOCK شدن آن سطرها بماند.
مثال: سطرهایی از جدول EMPLOYEES که JOB_ID برابر با SA_REP دارند راLOCK کنید.
مثال: برخی از سطرهای دو جدول EMPLOYEES و DEPARTMENTS را LOCK کنید.
نکته: اگر از عبارت FOR UPDATE OF COLUMN_NAMEاستفاده شود فقط سطرهایی که شامل ستون COLUMN_NAME هستند LOCK می شوند.
مثال: فقط سطرهایی از جدول EMPLOYEES که مطابق با شرط های دستور هستند LOCK شوند (ستون salary در جدول EMPLOYEES می باشد).
نکته: اگر از عبارت FOR UPDATE WAIT X استفاده شود دیتابیس X ثانیه صبر می کند تا شاید سطرهای مورد نظر UNLOCK شوند و سپس کنترل را به SESSION بازمی گرداند
انواع تراکنش ها
تحقیقات
استفاده از Transaction در برنامه نویسی
چون برای خودم استفاده از Transaction جالب و در برخی موارد حیاتی بود سعی کردم مقاله ای در این مورد قرار بدم تا شما دوستان نیز از سردرگمی هایی که ممکن است پیش آید رهایی یابید.
کی از ابزارهای فوق العاده سودمند در کار با بانک های اطلاعاتی Transaction ها هستند، اما متاسفانه بدلیل ضعف در مطالعه یا منابع، استفاده از Transaction ها را کمتر مشاهده می کنیم
معمولا در برابر اصرار بر اشتباه و ادامه آن، در منطق پیاده سازی و کدنویسی، یک ماژول یا عدم تمایل به ایجاد تغییرات در نحوه اجرا، مقاومت بخصوصی از طرف برنامه نویس مربوطه وجود دارد
بنابراین بجای سبد خرید و ماژول های دیگر، مثال “حساب بانکی” را مطرح میکنم که روش عقلانی دیگری برای پیاده سازی آن وجود ندارد، و هیچ توجیهی برای عدم استفاده از Transaction در پیاده سازی پذیرفته نیست
حساب بانکی شخصی، از نوع حساب جاری که دارای دسته چک است را در نظر می گیریم
موجودی فعلی: 2.000.000 ریال
چک به تاریخ امروز: 1.000.000 ریال
مبلغ کل یک فاکتور فرضی: 1.000.000 ریال
کارمزد کارت به کارت بانکی: 7.000 ریال
در نظر بگیرید این شخص رفته جلوی عابر بانک و می خواهد مبلغ فاکتور را بصورت کارت به کارت پرداخت کند، فرآیند تکمیل شده و به مرحله آخر رسیده:
“در صورت صحت اطلاعات دکمه تایید را فشار دهید”
همون موقع هم چک روز به مبلغ 1.000.000 ریال داخل شعبه در حال نقد انواع تراکنش ها شدن است و به باجه صندوق رسیده
حالات ممکن:
اگر صندوقدار زودتر دکمه تسویه رو بزنه:
چک پاس میشه و موجودی حساب میشه: 1.000.000 ریال
بنابراین وقتی شخص جلوی عابر بانک دکمه تایید رو می زنه پیغام “عدم وجود موجودی کافی” رو می بینه، چرا؟
مبلغ فاکتور + کارمزد کارت به کارت بانک < موجودی فعلی (بعد از پاس شدن چک)
1.000.0000 +7.000 > 1.000.000
اگر شخص جلوی عابر بانک زودتر دکمه تایید رو بزنه:
صندوقدار بانک با پیام “برگشت چک به دلیل عدم تامین موجود کافی” روبرو میشه، چرا؟
موجودی فعلی حساب (بعد از انتقال کارت به کارت) < مبلغ چک
1.000.0000 +7.000 > 1.000.000
اما به هر حال این وسط کلی Query روی جدول های مختلف اجرا شده و داده هایی تغییر پیدا کردن تا به مرحله آخر برسه، تکلیف اونها چی میشه؟
طبق تعریف کلی Transaction دارای خاصیتی است به نام ACID سرنام Atomicity Consistency Isolation Durability
همچنین دستورات RollBack و Commit
وقتی در انتهای Trans همه چیز درست باشد شما commit را فراخوانی می کنید و عملیات ثبت نهایی می شود
در صورت بروز هرگونه مشکلی در هر قسمتی از کوئری، با اجرای دستور RollBack کلیه تغییرات به ترتیب به حالت اولیه بر می گردند (Ctrl + Z خودمون)
تغییرات بانک اطلاعاتی معمولا ناشی از اتفاقات واقعی، مانند دریافت یک سفارش جدید از مشتری، انتقال وجه از حسابی به حسابی دیگر و امثال آن می باشد. در حقیقت، دریافت یک سفارش جدید تنها یک مورد تغییر در بانک اطلاعاتی نمی باشد.
بلکه باعث تغییرات چندگانه در بانک اطلاعاتی میشود:
۱- سفارش جدید در جدول سفارشات اضافه می شود.
۲- اعتبار مالی مشتری به اندازه سفارشی که داده است کاهش پیدا می کند.
۳- موجودی آن کالایی که سفارش داده شده است کاسته می شود.
۴- تعداد کل محصولات سفارش داده شده تغییر می کند.
۵- کل فروش ها برای دفتر مربوط به فروشنده تغییر می کند.
نکته ی مهم این مثال آن است که عملی که در ظاهر یک عمل ساده و غیر قابل تجزیه (اتمی) به نظر می رسد یعنی دریافت یک سفارش از مشتری، واقعا ۵ عمل به هنگام سازی روی بانک اطلاعاتی یعنی یک عمل INSERT و چهار عمل UPDATE است. علاوه بر این، بانک اطلاعاتی بین این چند عمل به هنگام سازی، حالت پایدار و سازگاری ندارد و به طور موقت، قیدهایی را نقض می کند مثلا بین عمل ۱ و ۲، سفارش مشتری ثبت شده اما اعتبار مالی مشتری کاهش پیدا نکرده است.
توجه: این تغییرات بستگی انواع تراکنش ها به طرح کلی بانک اطلاعاتی شما دارد. ممکن است در ساختار مورد نظر شما تنها تغییر اول ضروری باشه یعنی ثبت سفارش جدید. و موارد دیگر را توسط پرس و جو بدست آورد. بطور نمونه برای بدست آوردن اعتبار مالی فعلی مشتری کافیه جمع مبلغ خرید را بدست آورده و از اعتبار اولیه کم کنیم.
برای اینکه بانک اطلاعاتی حالت ثبات خود را حفظ کند، تمام تغییرات چندگانه فوق باید با هم اعمال شوند. اگر اشتباه در یک سیستم حالتی را بوجود آورد که بعضی تغییرات مورد پردازش واقع شوند و برخی واقع نشوند، جامعیت بانک اطلاعاتی از بین خواهد رفت. مثلا مشتری محصولی را سفارش می دهد اما از اعتبار مالی آن چیزی کاسته نمی شود.
به این ترتیب باید در بانک اطلاعاتی یک تناسب “همه یا هیچ” باشد. SQL بطور دقیق این قابلیت را از طریق پردازش تراکنش ارائه می دهد. که موضوع این سری مقالات آموزشی را تشکیل می دهد.
مورد دیگری که می توان در این راستا به آن اشاره کرد انتقال وجه بین دو حساب است. در اینجا مبلغی از حساب شما کسر و به حساب دیگری واریز می شود. در این فرایند، تراکنش این تضمین را می دهد که این میانه راه از بین نرود و یکی را طلب کار و دیگری را بدهکار کند (مثلا پول از حساب شما کسر ولی به حساب طرف واریز نشود یا برعکس)
تراکنش چیست؟
تراکنش یک یا چند دستور SQL می باشد مثل به روزرسانی، درج و یا حذف یک یا چندین سطر از داده ها که با همدیگر یک واحد منظقی از کار را شکل می دهند. این دستورات SQL که شکل دهنده ی تراکنش هستند، نوعا کاملا مرتبط به هم هستند و اعمال وابسته به هم را انجام می دهند. هر دستور در تراکنش قسمتی از یک کار را انجام می دهد، اما برای تکمیل کار، همه ی دستورات مذکور ضروری هستند.
گروه بندی دستورات بعنوان یک تراکنش به RDBMS می گوید که کل دستورات باید بطور خودکار اجرا شوند؛ در واقع همه ی دستورات باید بطور کامل اجرا شوند تا بانک اطلاعاتی حالت ثبات خود را حفظ کند.
بنابراین، واحد منطقی از کار (یعنی یک تراکنش) الزاما تنها یک عمل بانک اطلاعاتی نیست بلکه دنباله ای از چند عمل است که در حالت کلی، یک حالت سازگار از بانک اطلاعاتی را به یک حالت سازگار دیگر تبدیل می کند بدون آنکه در تمام نقاط میانی لازم باشد بانک اطلاعاتی در حالت سازگار باشد.
مثال های متعددی می شود برای تراکنش زد در ادامه به یک مورد اشاره میکنم:
افزودن یک سفارش: برای پذیرش سفارش یک مشتری، برنامه ورود سفارش باید (الف) جدول Products را مورد بازیابی و پرسش قرار دهد تا اطمینان حاصل شود که محصول سفارش شده موجود است یا خیر (ب) جدول Customers را مورد پرس و جو قرار می دهد تا مطمئن شود که آیا مشتری به اندازه ای که می خواهد سفارش دهد اعتبار مالی دارد یا خیر (ج) در صورت حصول اطمینان از دو مورد قبل سفارش را به جدول Orders وارد کرده (د) جدول Products را بروز در آورده، یعنی مقدار سفارش را از کل تعداد محصول کم کند (ه) جدول Employee را بروز در آورده، یعنی مقدار سفارش را به کل فروشهای فروشنده ای که سفارش را پذیرفته است اضافه کند و سایر به هنگام سازی های مورد نیاز دیگر.
در تراکنش فوق چند عمل، که هر یک مشتمل بر یک دستور مجزای SQL می باشد، مورد نیاز است تا تراکنش منطقی مجزایی را اجرا نماید. مفهوم تراکنش برای برنامه هایی که یک بانک اطلاعاتی را بروز در می آوردند، بسیار حساس می باشد، زیرا جامعیت یک بانک اطلاعاتی را تضمین می کند.
یک DBMS که بر مبنای SQL واقع شده است قرارداد زیر درباره ی دستورات در یک تراکنش را در پی دارد:
تراکنش در SQL
استفاده از Transaction در برنامه نویسی
همانطور که از نمودار پیداست. هنگامی که برنامه با خطایی مواجه می شود DBMS تمام تغییرات را برگردانده و وضعیت را به زمانی که تراکنش آغاز شده بود می گرداند. در مورد مشکل سخت افزاری نیز همین اتفاق می افتد.
بدیهی است در حالت ایده آل نمی توان تضمین کرد که تمام به هنگام سازی ها انجام شود. متاسفانه، چنین تضمینی نمی تواند فراهم شود زیرا همیشه این امکان وجود دارد که کارها به خوبی پیش نرود و اندکی بعد، سیستم دچار اشکال شود. برای مثال، ممکن است از کار افتادن سیستم بین عملیات اتفاق بیفتد یا هنگام اجرای عمل UPDATE، سرریزی محاسباتی اتفاق بیفتد و غیره.
اما سیستمی که از مدیریت تراکنش پشتیبانی می کند چنین تضمینی را فراهم می کند. به ویژه این که تضمین می کند اگر تراکنشی، به هنگام سازهایی را اجرا کند و قبل از رسیدن به پایان تراکنش، به هر دلیلی سیستم دچار خرابی شود آنگاه به هنگام سازی ها نادیده گرفته می شود. بنابراین، تراکنش باید به طور کامل اجرا شود یا به طور کامل لغو شود.
دستورات Transaction
ابتدا اجازه دهید مدل تراکنش در استاندارد ANSI/ISO را مورد بررسی قرار داده سپس دستورات مدیریت تراکنش در محصول تجاری SQL مورد نظر یعنی SQL Server را با هم مرور میکنیم.
SQL تراکنش های بانک اطلاعاتی را از طریق دو دستور پرازش تراکنش ساپورت می کند:
۱- دستور COMMIT خاتمه ی موفقیت آمیز یک تراکنش را اعلام می کند. این دستور به DBMS می گوید که مبادله تکمیل شده است؛ تمام دستوراتی که دربرگیرنده تراکنش هستند اجرا شده اند، و بانک اطلاعاتی باثبات می باشد.
۲- دستور ROLLBACK اعلام می کند که یک تراکنش با موفقیت به پایان نرسیده است. این دستور به DBMS می گوید که کاربر نمی خواهد تراکنش کامل شود؛ بلکه DBMS باید تمام تغییرات انجام شده روی بانک اطلاعاتی در طی تراکنش را برگرداند. در واقع، DBMS بانک اطلاعاتی را به همان حالتی بر می گرداند که قبل از شروع تراکنش بوده است.
دستورات COMMIT و ROLLBACK، مانند دستورات SELECT، INSERT و UPDATE، دستورات قابل اجرای SQL هستند.
استاندارد ANSI/ISO یک مدل برای تراکنش در SQL و نقش دستورات COMMIT و ROLLBACK تعیین کرده است. تقریبا بیشتر محصولات تجاری SQL از این مدل تراکنش، که بر اساس DB2 می باشد، استفاده می کنند. این استاندارد مشخص می کند که یک تراکنش در SQL بطور خودکار با اولین دستوری که توسط کاربر یا برنامه اجرا می شود، آغاز می گردد.
تراکنش از طریق دستورات بعدی SQL ادامه پیدا می کند تا اینکه با یکی از چهار مورد زیر خاتمه یابد:
۱- یک دستور COMMIT عمل تراکنش را با موفقیت به اتمام می رساند و تغییرات بانک اطلاعاتی را کامل می سازد. بلافاصله بعد از دستور COMMIT یک تراکنش جدید شروع می شود.
۲- یک دستور ROLLBACK با برگشت دادن تغییرات بانک اطلاعاتی، تراکنش را ناتمام می گذارد. بلافاصله بعد از دستور ROLLBACK یک تراکنش جدید آغاز می گردد.
۳- همچنین خاتمه موفقیت آمیز برنامه باعث خاتمه ی تراکنش می شود، دقیقا مانند این که دستور COMMIT اجرا شده باشد. از آنجایی که برنامه پایان یافته است، تراکنش دیگری برای شروع وجود ندارد.
۴- همچنین خاتمه غیر طبیعی برنامه تراکنش را ناتمام می گذارد، دقیقا همانطور که دستور ROLLBACK اجرا می شد. در این مورد هم، چون برنامه پایان یافته است، تراکنش جدید و دیگری برای شروع وجود ندارد.
سیستم پردازش تراکنش TPS
سیستم پردازش تراکنش TPS یا Transaction Processing System سیستمی برای گردآوری و تحلیل دادهها و ارائه اطلاعات پیرامون فعالیتها و عملیات سازمان میباشد. این سیستم در حوزه مدیریت فناوری اطلاعات مطرح است. در اوائل دهه ۵۰ و با ورود رایانه به سازمانها و به کارگیری آن د رانجام فعالیتهای پردازشی کسبوکار شکل گرفتند.امروزه نیز در عصر اقتصاد الکترونیک و لزوم هماهنگی سازمانها با تغییرات محیطی و انجام سزیع پردازشها این سیستمها از اهمیت بالایی برخوردار هستند.
ایـن سیستم ها، جایگزین روش دستی میشوند و امور ساخت یافتهای مانند: نگهداری سوابق، کنترل انبار، محاسبه حقوق و دستمزد و غیره را انجام میدهند. تاکید این سیستم بر پردازش حجم عظیمی از دادهها است و از ایـــن طریق کاهش هزینههای عملیات را در سازمان به همراه دارند. سیستم پردازش تراکنشی یک سیستمی است که جمع آوری وپردازش تعاملات و وقایعی که در اثر انجام عملیات و فعالیتهای یک سازمان رخ میدهند را برعهده دارد.
امور عملیاتی سازمان کــــه غالبا ماهیتی تکراری و مستمر دارند و به دلیل حـــجم بالا،نیروی انسانی زیادی را نیز به خود اختصاص میدهند را میتوان از طریق بــه کـــارگیری سیستمهای پردازشی تعاملی مکانیزه کــرد و از تعداد نیروی انسانی مورد نیاز کاست. چنین سیستم هایی در یک زمینه خاص طراحی و ضمن انجام پردازش داده ها، اطلاعات مورد نیاز سطح عمکلیات را تامین مینماید. امروزه TPSها در زمینههای مختلف سازمان طراحی و به کار گرفته میشوند و میتوانند پایه اطلاعاتی سایر سیستمهای سطوح بالاتر باشند.
تعریف سیستم پردازش تراکنش TPS
سیستم پردازش تراکنشی (TPS) سومین انواع تراکنش ها لایه از مدل عمومی سیستم اطلاعات مدیریت MIS به شمار میآید که عهده دار پردازشهای روتین سازمان است و بر دادههای مربوط به امور سازمان تأکید مینماید. این سیستمها از طریق فراهم سازی دادههای خام، MIS را حمایت میکنند. به عبارت دیگر، TPS بخش اصلی کار MIS را تشکیل میدهد. TPS، دادههای موراد نیاز سیستم اطلاعاتی را ثبت، ذخیره و همچنین اکثر گزارشات و اسناد مورد نیاز کاربران عملیاتی را تولید میکند. یکی از جنبههای TPS که سیستم را از سایر سیستمها متمایز مینماید، جنبه عمومی آن است. بدین معنی که این سیستم معمولاً در تمام سازمانها و مؤسسات قابل اجرا بوده و به کار گرفته میشود.
سیستمی که ساختار منابع موجود و توانمندیهای آتی را پیگیری مینماید، به TPS اشاره دارد.
سیستمی که انجام پردازشهای اولیه و روزمره دادهها به عهده آن است و براساس دادههای پردازش شده، انواع محصولات اطلاعاتی مانند: فرم ها، لیستهای در گردش داخلی سیستم، گزارشها و لیستهای چاپی و تصویری را تهیه میکند و به عنوان مبنایی برای تهیه گزارشهای بعدی برای مدیریت سازمان مورد استفاده قرار میگیرد، به TPS اشاره دارد.
در عین درست بودن تعاریف فوق میتوان تعریف زیر را مطرح نمود.
سیستمی است که جمع آوری و پردازش تعاملات و وقایعی که در اثر انجام عملیات و فعالیتهای یک سازمان رخ میدهند را برعهده دارد.
انواع سیستم پردازش تراکنش
دو نوع سیستم پردازشی تعاملات (TPS ) وجود دارد:
۱- سیستمهای پردازشی بهنگام: در این نوع سیستمها،ارتبــاط مستقیمی بین کاربر و برنامههای کاربردی وجود دارد. کاربر، دادههای مربوط به یک عـــمل یا معامله را وارد سیستم میکند و برنامه در مورد آن معامله به کاربرپاسخ میدهد. در این نوع پردازش، بین ورود داده ها، پردازش، به هنگام نمودن دادههای ذخیره شـده و ارائه گزارش بر اساس آن، فاصله زمانی وجود ندارد.
۲- سیستمهای پردازش دسته ای: در ایـن سیستمها، داده هـای وارده به یـک سیستم، در یک عملیات با فایل تشکیل گروه مـــی دهند و یکجا پردازش مــی شوند. بــعنـــوان مثــال،در یک سیستم پردازش انبار، تمـام کالاهای وارده و صادره دریک چارچـــوب زمــــانی مشخص، فرضا در یک روز معین،در یک گروه قرار گرفته، سپـــس بــر حسب شماره کـــالا مرتب شده و یکجا پردازش میشوند.
در یک دستهبندی دیگر انواع سیستم پردازش تراکنش TPS عبارتند از:
TPS عمومی : در این حالت حجم اطلاعات بالاست لیکن محاسبات ساده هستند در این سیستمها ظرافت انتخاب سیستم مدیریت پایگاه داده فعال است همچین روشی برای برنامهریزی و برنامه نویسی ساده است.از TPSهای عمومی میتوان به TPS عمومی حسابهای دریافتنی ،TPS حسابهای پرداختنی ،TPS عمومی حسابداری عمومی و…. اشاره کرد.
TPS فنی : در این حالت پیچیدگی پردازش اطلاعات مطرح است و حجم اطلاعات متوسط و زیاد است. اگر سیتم را ساده حساب کنیم حجم اطلاعات متوسط است و اگر پیچیده تلقی نماییم ،حجم اطلاعات زیاد خواهد بود.از TPSهای فنی میتوان به TPS فنی سفارشات مشتریان، TPS فنی برنامهریزی مواد ،TPS فنی موجودی کالا و … اشاره کرد.
مقاله سیستم پردازش مکانیزه با ترجمه
موضوع سیستم پردازش تراکنش TPS بسیار نادر و قدیمی است. با این وجود برای حل مشکلات دانشجویان این رشته برای ارائه درسی یک مقاله در زمینه سیستم پردازش تراکنش TPS همراه با ترجمه فارسی آماده شده است.
معرفی انواع بلاک چین
پس از ظهور بیت کوین به عنوان اولین نسل از فناوری بلاک چین، شرکت ها شروع به انتقال امور خود به پروژه های بلاک چین کردند. بر اساس نظرسنجی گارتنر در سال 2019، 60 درصد از مدیران انتظار دارند در سال های آینده بیشتر از بلاک چین در کار خود استفاده کنند. بر اساس این گزارش، انتظار می رود موارد استفاده از بلاک چین در سال های آینده رشد قابل توجهی را تجربه کنند. با این حال، انواع مختلفی از بلاک چین برای استفاده در شرایط مختلف مورد نیاز است.
چهار نوع اصلی از شبکههای بلاکچین وجود دارد: بلاکچینهای عمومی، بلاکچینهای خصوصی، بلاکچینهای هیبریدی . هر کدام از این پلتفرمها مزایا، معایب و کاربردهای خود را دارند که آنها را در ادامه بررسی می کنیم.
بلاک چین عمومی
این نوع بلاک چین اولین نوع فناوری بلاک چین و خاستگاه ارزهای رمزنگاری شده مانند بیت کوین بود که به رایج شدن فناوری دفتر کل توزیع شده (DLT) کمک کرد و همچنین به مسائل متمرکزسازی از جمله امنیت و عدم انواع تراکنش ها شفافیت پرداخت. DLT اطلاعات را در یک مکان ذخیره نمی کند، بلکه آن را در یک شبکه همتا به همتا توزیع می کند. ماهیت غیرمتمرکز آن به روشی برای اعتبارسنجی داده ها نیاز دارد. این روش یک الگوریتم اجماع است که به وسیله آن شرکت کنندگان در بلاک چین درباره وضعیت فعلی دفتر کل به توافق یا توافق می رسند.
هر کسی که به اینترنت دسترسی دارد می تواند وارد شبکه بلاک چین عمومی شود تا به یک گره مجاز تبدیل شود. این کاربر می تواند به سوابق فعلی و گذشته دسترسی داشته باشد و فعالیت های ماینینگ توسط ماینر را انجام دهد، محاسبات پیچیده ای که برای تایید تراکنش ها و افزودن آنها به دفتر کل استفاده می شود. از آنجایی که منبع باز است، هیچ سابقه یا تراکنش معتبری در شبکه را نمی توان تغییر داد و هر کسی می تواند تراکنش ها را بررسی کند، خطاها را پیدا کند یا تغییراتی را پیشنهاد دهد.
مزیت بلاک چین عمومی
یکی از مزایای بلاک چین های عمومی این است که کاملاً مستقل از سازمان ها هستند. بنابراین اگر سازمانی که آن را راهاندازی کرده از کار بیفتد، بلاک چین عمومی همچنان میتواند کار کند تا زمانی که هنوز رایانههایی به آن متصل هستند. یکی دیگر از مزایای بلاک چین های عمومی، شفافیت شبکه است. در واقع، بلاک چین های عمومی تا زمانی که کاربران پروتکل ها و رویه های امنیتی را به دقت دنبال کنند، عمدتاً امن هستند.
بلاک چین خصوصی
یکی دیگر از شبکه های بلاک چین، بلاک چین خصوصی می باشد که همانند یک شبکه بسته کار می کند. بلاک چین خصوصی یک شبکه غیرمتمرکز محسوب می شود که از اتصالات همتا به همتا استفاده می کند. کاربردهای بلاک چین خصوصی معمولا انواع تراکنش ها در یک شرکت یا سازمان می باشد. سرعت بلاک چینهای خصوصی، آنها را برای مواردی کاربردی میکند که بلاکچین از نظر رمزنگاری ایمن باشد، اما نهاد کنترل کننده نمیخواهد اطلاعات در دسترس عموم قرار گیرد. برای مثال، شرکتها ممکن است استفاده از فناوری بلاکچین را انتخاب کنند و در عین حال مزیت رقابتی خود را به اشخاص ثالث واگذار نکنند؛ آنها میتوانند از بلاکچینهای خصوصی برای مدیریت و حسابرسی استفاده کنند. موارد استفاده دیگر برای این نوع بلاکچین شامل مدیریت زنجیره تامین، مالکیت دارایی و رای گیری داخلی میباشد.
مزیت بلاک چین خصوصی
میتوان بلاکچینهای خصوصی را به عنوان اینترانت و بلاکچینهای عمومی را شبیه اینترنت در نظر گرفت. از آنجایی که سایز و اندازه بلاکچینهای خصوصی محدود میباشد، میتوانند بسیار سریع باشند و تراکنشها را بسیار سریعتر از بلاکچینهای عمومی پردازش کنند.
بلاک چین هیبریدی
نوعی فناوری بلاک چین که عناصر یک بلاک چین خصوصی و عمومی را ترکیب می کند. این به سازمانها اجازه میدهد تا یک سیستم مبتنی بر مجوز خصوصی را در کنار یک سیستم عمومی و بدون مجوز اجرا کنند و به آنها اجازه میدهد تا کنترل کنند چه کسی به دادههای ذخیرهشده در بلاک چین دسترسی دارد. به طور معمول، تراکنشها و سوابق در بلاک چین هیبریدی اعلام نمیشوند، اما در صورت لزوم، مانند اجازه دسترسی از طریق قرارداد هوشمند، میتوان آنها را تأیید کرد. اطلاعات محرمانه در شبکه نگهداری می شود اما انواع تراکنش ها همچنان می توان آنها را تأیید کرد. لازم به ذکر است که حتی اگر یک نهاد خصوصی مالک بلاک چین ترکیبی باشد، نمی تواند تراکنش ها را تغییر دهد.
مزیت بلاک چین هیبریدی
یکی از مزایای اصلی بلاک چین هیبریدی این است که از آنجایی که در یک اکوسیستم بسته عمل می کند، هکرهای خارجی نمی توانند حمله 51 درصدی را به شبکه انجام دهند. همچنین از حریم خصوصی محافظت می کند، اما امکان ارتباط با اشخاص ثالث را فراهم می کند. تراکنش ها ارزان، سریع هستند و مقیاس پذیری بهتری نسبت به شبکه بلاک چین عمومی ارائه می دهند.
جمع بندی
بلاکچین را میتوان انقلابی بزرگ در نظر گرفت؛ اتفاقی که به عقیده خیلی از بزرگان حوزه کامپیوتر، بزرگترین اختراع بشر بعد از اینترنت میباشد. در این مقاله انواع مختلف بلاکچین معرفی شد که هر کدام از آنها نحوه کارکرد، مزایا و معایب و همچنین موارد استفاده متفاوتی دارند. اولین نوع بلاکچین، بلاکچین عمومی میباشد که پر استفاده ترین نوع در میان پروژههای حوزه رمز ارزها میباشد.
5 1 0 0.0
دیدگاه شما