بخشی از مقاله
پایگاه داده فعال
چكيده
پايگاههاي دادة فعال با هدف ايجاد تعامل در پايگاههاي داده ايجاد شدند. در اين نوع پايگاه داده با تعريف قوانين و بدون نياز به كدنويسي، سيستم قادر به عكسالعمل مناسب در مقابل رويدادهاي مهم در شرايط خاص ميباشد. تعريف قوانين سادهترين نوع بيان محدوديتها بوده كه براي متخصصين محيط نيز قابل درك ميباشد. اما در بيان تجربيات اغلب از كلمات فازي استفاده ميشود كه ترجمه آنها به مقادير دقيق منجر به كاهش ارزش معنايي دانش ميشود. فازيسازي پايگاههاي داده فعال با هدف نزديكتر نمودن زبان بيان قوانين به زبان طبيعي انسان مطرح شد. اين امر كمك ميكند دانش متخصصين، مستقيماً به پايگاه داده منتقل شود. ضمن اينكه تغييرات نيز با كمترين هزينه، بر قوانين تعريف شده اعمال ميشود.
در اولين گام از فازيسازي پايگاههاي دادة فعال ولسكي و بوازيز به فازي نمودن رويداد، شرط و واكنش در تعريف قوانين پرداختهاند و طي سه مقاله نتايج آن را ارائه نمودند، آنها در پروژه Tempo به پيادهسازي فازي اين سه بخش پرداختهاند.
اين پاياننامه به فازي نمودن ساير بخشهاي پايگاههاي دادة فعال ميپردازد. اين بخشها شامل رويدادهاي مركب، انتخاب فازي اجزاء رويدادهاي مركب، انتخاب فازي زمان بررسي شرط و اجراي واكنش قوانين ميباشد. همچنين راهحلهايي براي دو مشكل پايانناپذيري اجراي قوانين و يكتايي پاسخ در پايگاههاي دادة فعال فازي ارائه شده است.
فازي نمودن پايگاههاي دادة فعال با هدف كاربرديتر نمودن پايگاههاي داده مطرح شد. مدل اجرايي پايگاههاي دادة فعال در بسياري موارد نظير زمان بررسي شرط و يا تعيين اولويت قوانين از پيش فرض سيستم استفاده مينمايد. فازي نمودن اين نوع پايگاه داده كمك ميكند تا سيستم سياستهاي اجرايي پايگاه داده را در زمان اجرا و با استفاده از شدت وقوع رويدادها (به صورت معنايي و پويا) تعيين نمايد.
در ادامة اين پاياننامه يك معماري ساده از پايگاه دادة فعال ارائه ميشود و در پايان با يك نمونة پيادهسازي شده از پايگاه دادة فعال فازي موارد پيشنهادي ارزيابي ميگردد.
كليدواژه: پايگاه دادة فعال، مفاهيم فازي، عدم قطعيت، سيستمهاي محرك.
فصل اول: كليات
1-1 مقدمه
با ايجاد سيستمهاي مديريت پايگاه داده عمده مشكلات ساختار، پشتيباني و مديريت دادههاي حجيم در سيستمهاي فايلي برطرف شد اما توجهي به جنبههاي رفتاري پايگاه داده نشد. به اين معنا كه با استفاده از قيود جامعيت شايد بتوان از منفي شدن مبلغ حقوق كارمندان جلوگيري نمود اما نميتوان مانع از بيشتر شدن حقوق آنها از مديرانشان شد. در چنين مواردي كاربران پايگاه داده با اجراي يك پرس و جو موارد نقض محدوديتهايي از اين قبيل را پيدا نموده و خود اقدام به اصلاح آنها مينمايند.
مواردي اين چنين و نيز گزارشات مديريتي در آغاز ماه از جمله كارهاي مشخص و داراي ضابطهاي ميباشند كه انجام آنها تكراري و قابل تفويض به سيستم است.
كاربران غيرمجاز با استفاده از يك سر گزارش، غيرمستقيم به اطلاعات كليدي دست يافته و اقدام به تغيير آنها مينمايند. پيدا نمودن چنين تغييراتي كه معمولاً بعد از گزارشات اتفاق ميافتند، به راحتي امكانپذير نيست. همانطور كه مشاهده ميشود در يك پايگاه داده معمولي رديابي رويدادهايي كه در سيستم اتفاق افتادهاند (رخدادها) نيز ممكن نبوده و نياز به يك سيستم با پشتيباني جنبههاي رفتاري ميباشد.
در گام اول براي فراهم كردن امكان تعامل پايگاه داده با كاربر سيستمهاي محرك نظير Oracle به وجود آمدند. اما اين نوع سيستمها تنها قادر به تشخيص رويدادهاي ساختاري نظير اضافه، حذف و تغيير مقادير در پايگاه داده ميباشند. به عبارت ديگر اين سيستمها با ايجاد تغيير در يك قلم داده عكسالعمل نشان ميدهند و اين براي كاربران پايگاه داده كافي نيست. براي اين كاربران ممكن است رويدادهايي نظير نخواندن حسابها در آغاز ماه و يا يك رويداد خارجي نظير فشردن يك كليد نيز مهم باشد كه در اين موارد سيستمهاي محرك، پاسخگو نيستند [2].
درگام بعد پايگاه دادة فعال با افزودن قوانين به پايگاههاي داده امكان تعامل (كنش و واكنش) بين سيستم و پايگاه داده را ايجاد نمود. اين نوع پايگاه داده داراي دو بخش مديريت داده و مديريت قوانين ميباشد. بخش مديريت داده مسئول حفظ خواص پايگاه داده در سيستمهاي كاربردي بوده و بخش دوم با مديريت قوانين مسئول واكنش به رويدادهاي سيستم ميباشد. در اين نوع پايگاه داده طراحان سيستم قادرند با تعريف قوانين كه نزديكترين بيان به زبان طبيعي ميباشد، سيستم را وادار به عكسالعمل مناسب در مقابل رويدادهاي مهم نمايند [21].
پايگاه داده فعال با استفاده از قوانين قادر به «پشتيباني گستردهتر قيود جامعيت و سازگاري دادهها، واكنش در مقابل رخدادهاي سيستم كاربردي، عدم اجراي تقاضاهاي مشكوك، رديابي رويدادها، گزارشات ماهانه و...» ميباشد.
همانطور كه گفته شد آنچه كه به طور معمول باعث ميشود يك پايگاه داده را فعال بدانيم، عكسالعمل سيستم در مقابل وضعيتهايي است كه در پايگاه داده و يا حتي خارج از آن به وجود ميآيد. اين وضعيتها ميتواند شامل يك حذف غيرمجاز و يا بالا رفتن فشار محيط باشد. بايد توجه داشت كه داشتن تعامل براي يك پايگاه داده لازم اما كافي نيست. بسياري سيستمهاي پايگاه داده بدون رعايت اصول پايهاي كه در زير به آن اشاره ميشود به طور عام پايگاه دادة فعال ناميده شوند [3].
اينگونه سيستمها بايد يك پايگاه داده باشند، يعني در صورتي كه كاربر فراموش كرد، سيستم مورد نظر پايگاه دادة فعال است بتواند از آن به عنوان يك پايگاه داده معمولي استفاده نمايد (در صورت لزوم بتوان به عنوان يك پايگاه دادة معمولي از آن استفاده نمود).
در اينگونه سيستمها بايد امكان تعريف و مديريت قوانين وجود داشته باشد. اين قوانين در پايگاه داده فعال داراي سه جزء رويداد ، شرط و واكنش ميباشند.
اين سيستمها بايد داراي يك مدل اجرايي باشند. به اين ترتيب كه با بروز رويداد و صحت شرط، واكنش قانون اجرا شود. يك پايگاه داده فعال بايد قادر به آشكارسازي رويدادها و بررسي شرط قوانين فعال و اجراي فرامين واكنش باشد.
علاوه بر موارد فوق، بهتر است در اين سيستمها محيط مناسبي براي تعريف و امكان كامپايل كردن قوانين فراهم شود كه به كاربر در تعريف قوانين كمك كند.
فازيسازي پايگاههاي داده فعال با هدف نزديكتر نمودن زبان بيان قوانين به زبان طبيعي طراحان مطرح شد. اغلب تقاضاهاي كاربران پايگاه داده فعال، فازي ميباشد. به عنوان نمونه در تقاضاهايي نظير عدم تعلق پاداش به كارمندان «كمكار»، «افزايش» فشارخون، محاسبة حقوق كارمندان در «پايان» هر ماه و... از كلمات فازي استفاده شده است كه عدم پشتيباني مفاهيم فازي و به كار بردن مقادير دقيق منجر به حصول نتايج نامطلوب در برخي سيستمهاي كاربردي ميشود.
تفاوت اصلي در فازيسازي پايگاه دادة فعال با ساير سيستمهاي فازي، در نوع تعريف قوانين ميباشد. به اين ترتيب كه در تعريف قوانين در اينجا از سه جزء اصلي رويداد، شرط و واكنش استفاده ميشود در صورتي كه سيستمهاي مبتني بر قانون عموماً از دو جزء شرط و واكنش تشكيل شدهاند اما فازي نمودن شرط و واكنش قوانين در پايگاههاي داده فعال تفاوت چنداني با شرط و واكنش فازي در سيستمهاي مبتني بر قانون ندارد و در فازي نمودن رويداد نيز ميتوان از همان سياق رويدادهاي فازي استفاده نمود اين بحث توسط ولسكي و بوازيز در [12] مطرح شده است.
در اين پاياننامه سعي شده است بحثهاي مطرح شده در پايگاههاي داده فعال فازي، با يك نمونه پيادهسازي شده بررسي شود. همچنين ساير موارد قابل فازيسازي در يك پايگاه دادة فعال بررسي شده است كه از آن جمله ميتوان به فازيسازي وضعيتهاي زمانبندي و اولويتدهي فازي رويدادها اشاره نمود.
1-2 مروري بر فصول پاياننامه
در ادامه اين پاياننامه در فصل دوم مفاهيم پايگاه دادة فعال ارائه شده است. همچنين مدل اجرايي، نمونههايي از اين نوع پايگاه داده و برخي كاربردهاي پايگاه دادة فعال در ادامة اين فصل آمده است.
در فصل سوم مختصري از مفاهيم فازي ارائه شده است.
فصل چهارم شامل چگونگي پشتيباني مفاهيم فازي در بخشهاي مختلف يك پايگاه داده فعال ميباشد.
فصل پنجم به ارزيابي پايگاه دادة فعال فازي ميپردازد و مزايا و معايب استفاده از پايگاههاي دادة فعال فازي نسبت به پايگاههاي دادة فعال با يك نمونة پيادهسازي شده و مقايسة آن با نمونة غيرفازي ارائه شده است.
در فصل ششم نتيجة فازي نمودن پايگاه دادة فعال و مشكلاتي كه حل شده است و آنچه باقي مانده ذكر شده است.
فصل دوم: پايگاه داده فعال
پايگاه داده فعال با هدف افزودن تعامل به پايگاه داده و با استفاده از تعريف قوانين ايجاد شد. اولين پايگاه داده فعال، توسط Dayal و همكارانش در يك پروژه دانشگاهي به نام [4]Hipac مطرح شد. پايگاه داده اين نرمافزار همانند [7]Reach، [8]Samos، [9]Exact، [10]Chimera شيءگرا ميباشد. علاوه بر پايگاههاي داده فعال شيءگرا سيستمهايي با پايگاه دادهي فعال رابطهاي نيز ايجاد شدهاند كه از جملة آنها ميتوان [5]Starburst و [6]Arial را نام برد، اين نوع پايگاههاي داده به جاي واكنش در مقابل فراخواني متد يا تغيير خصيصهها به تغيير، حذف و اضافه در جداول پايگاه داده حساس ميباشند [11]. از اواخر دهه هشتاد مبحث بانك اطلاعاتي مورد توجه قرار گرفت كه ظهور محصولات تجاري نظير [34]Versant و [34]Interbase مويد اين مطلب است.
اين نوع پايگاه داده داراي دو بخش مديريت داده و مديريت قوانين ميباشد. بخش مديريت داده مسئول حفظ خواص پايگاه داده نظير سازماندهي، مديريت و پشتيباني دادههاي حجيم ميباشد. بخش دوم يا مديريت قوانين مسئول واكنش به رويدادهايي است كه در سيستم اتفاق ميافتند.
2-1 مديريت داده
اين بخش مسئول حفظ خواص پايگاه داده ميباشد، به طوري كه طراحان ميتوانند بدون ترجمه به قابليتهاي پايگاه داده فعال و همانند يك پايگاه داده معمولي از آن استفاده نمايند. ضمن اينكه خواص پايگاه داده را در يك پايگاه داده فعال ميتوان به صورت مطلوبتري ايجاد نمود.
برقراري قيود جامعيت توسط قوانين در پايگاه داده محدود ميباشد. اين قيود در يك پايگاه داده معمولي فقط روي يك جدول قابل تعريف ميباشند در حالي كه با استفاده از قوانين پايگاه داده فعال، امكان تعريف محدوديت بر روي چندين جدول نيز وجود دارد.
همچنين سازگاري بين دادهها و امنيت با استفاده از قوانين به صورت گستردهتري پشتيباني ميشود.
2-2 مديريت قوانين
پايگاه دادة فعال با استفاده از قوانين تعامل را به پايگاه داده ميافزايند. اين امر باعث ميشود بدون استفاده از كدهاي نرمافزار به رويدادهاي سيستم پاسخ داده شود، در نتيجه تغيير در ضوابط سيستم كاربردي با كمترين هزينه و با تغيير قوانين به راحتي امكانپذير است.
در اين فصل انواع تعريف و پيچيدگيهاي رفتاري قوانين در اين نوع سيستمها و مدلهاي اجرايي متفاوت (با توجه به تعريف يك قانون) ارائه خواهد شد.
2-2-1 تعريف قانون
در پايگاه داده فعال هر قانون داراي سه بخش رويداد، شرط و واكنش ميباشد و قانوني داراي هر سه جزء فوق باشد اصطلاحاً ECA ناميده ميشود.
Rule Rule_Name
[ON Event]
[IF Condition]
THEN Action
به طور كلي وجود دو جزء رويداد و شرط در تعريف قوانين ميتواند اختياري و يا اجباري باشد. در برخي نمونههاي پيادهسازي شده پايگاه داده فعال تنها تعريف يكي از دو جزء اختياري است يعني امكان عدم تعريف رويداد در قانون وجود دارد و حضور شرط اجباري است. در زبانهايي كه تعريف هر دو جزء اختياري باشد، تعريف يكي از آنها در هر قانون الزامي است در غير اين صورت تبديل به يك قانون هميشه درست ميشود.
در صورت حذف شرط (EA Rule) با بروز رويداد، واكنش آن اجرا ميشود و با حذف رويداد (CA Rule) در صورت برقراري شرط، واكنش قانون مربوطه به اجرا درميآيد.
در اين قسمت ابتدا به شرح مختصري از هر سه جزء قانون و نكاتي كه در استفاده از ECA بايد رعايت شوند ميپردازيم و سپس انواع رفتارهاي مدل اجرايي پايگاه داده فعال بيان ميشود.
2-2-1-1 رويداد
رويدادها در نقطهاي از زمان اتفاق ميافتند و به سه صورت تقسيمبندي ميشوند. در نوع اول با توجه به منبع به وجود آورندة خود به هشت گروه ساختاري، انتزاعي، تراكنش، كاربر، استثناء، زمان، خارجي و زيرمجموعه تقسيم ميشوند.
در نوع دوم با توجه به اينكه از يك رويداد ساده تشكيل شدهاند يا از تركيب جبري منطقي رويدادهاي ساده به وجود آمدهاند به دو گروه ساده و مركب تقسيم ميشوند.
در نوع سوم با توجه به زمان بروز نمونههاي يك رويداد به سه گروه آغازين، مباني و پاياني تقسيم ميشوند كه در ادامه به شرح مختصري از انواع رويدادها در اين سه گروه ميپردازيم.
انواع رويدادها با توجه به منبع به وجود آورندة آنها عبارتند از [13][14]:
ساختاري: يك رويداد به دليل انجام عملياتي روي ساختار پايگاه داده فعال ميشود (در مدل رابطهاي تغيير و حذف و اضافة يك ركورد و در مدل شيءگرا تغيير خصيصهها، فراخواني متد و ارسال پيام).
ON Update emp.id
انتزاعي: رويداد به صورت واضح توسط طراح يا برنامة كاربردي فعال ميشود (طراح ميتواند گرفتن يك گزارش خاص را يك رويداد معرفي كند كه در صورتي كه يك مجموعة تهي توليد نكند يك رويداد انتزاعي است).
تراكنش: رويدادها، دستورالعملهاي تراكنشي نظير Start و Abort و Commit ميباشند.
ON Begin Transaction Emergency
كاربر: رويداد به دليل عملكردها و مكانيزمهاي برنامهنويسي فعال ميشود (دادن پيام مناسب به كاربري كه مشغول وارد كردن داده ميباشد).
استثناء: انجام عمليات غيرمجاز در سيستم موجب بروز اين نوع رويداد ميشود (دستيابي غيرمجاز كاربران به اطلاعاتي كه مجوز مناسب آن را ندارند).
زمان: اين نوع رويدادها در نقطهاي از زمان فعال ميشوند (مثلاً اول هر ماه).
خارجي: رويدادهايي كه به دليل وقوع رويدادي در خارج از سيستم بروز ميكنند در اين گروه قرار ميگيرند (فشردن كليد).
زيرمجموعه: بيانگر زيرمجموعهاي از اطلاعات و يا اعضاي خاصي از مجموعه ميباشند (همه، به استثناي اهالي تهران و يا همة كساني كه مجوز حذف داده روي جدول اشخاص را دارند).
در نوع دوم رويدادها به دو دستة ساده و مركب تقسيم ميشوند. رويدادي كه تنها از يك جزء تشكيل شده است ساده و رويدادهايي كه از تركيب جبري و منطقي رويدادهاي ساده به دست ميآيند مركب ناميده ميشوند.
اين عملياتهاي جبري عبارتند از [3]:
And : رخ دادن هر دو رويداد (E1 And E2)
OR : رخ دادن يكي از دو رويداد (E1 Or E2)
Not : عدم رخ دادن رويداد در فاصلة زماني معين.
(E1; not E2;E3) به معني عدم بروز رويداد دوم در فاصلة زماني بين بروز رويداد اول و سوم
SEQ : نشاندهندة ترتيب اجراي دو رويداد ميباشد.
(Seq (E1,E2) : به اين معنا است كه رخ دادن رويداد دوم بايد پس از رويداد اول انجام يافته باشد از نماد ":" نيز استفاده ميشود.
Times : بيانگر نمونة معين يك رويداد ميباشد
Times (n.E) يعني نمونة nام رويداد E
رويدادها در پايگاه دادة فعال ممكن است به دفعات رخ دهند. به رويدادهايي كه اتفاق افتادهاند و از يك نوع ميباشند، نمونههاي يك رويداد گفته ميشود. در نوع سوم تقسيمبندي، بسته به زمان رخ دادن يك نمونه از رويداد، نمونهها به سه نوع آغازين ، مياني و پاياني تقسيم ميشوند.
نمونهاي از يك رويداد كه داراي كمترين مرتبة زماني در بين نمونههاي همان رويداد باشد نمونة آغازين و نمونهاي كه داراي بيشترين مرتبة زماني باشد نمونة نهايي رويداد ناميده ميشود به ساير نمونهها، نمونههاي مياني گفته ميشود [13].
در مثال زير E1(1) يك نمونة آغازين و E1(4) يك نمونة پاياني رويداد E1 ميباشند.
E1(1); E1(2); E1(3); E1(4)
امكان وقوع همزمان نمونههاي يك رويداد موجب ايجاد ناسازگاري در تعيين نوع نمونهها ميشود. بحث همزماني رويدادها در يك سيستم متمركز تنها در دو صورت امكانپذير است.
يكي از رويدادها زماني و ديگري غيرزماني باشد.
يك رويداد ساده با حداقل يك رويداد مركب ميتوانند همزمان رخ دهند.
لازم به ذكر است دو رويداد ساختاري همزمان اتفاق نميافتند به عبارت ديگر رخ دادن رويداد اضافه همزمان با رويداد حذف امكانپذير نيست [15].
علاوه بر مرتبة رخ دادن نمونهها ترتيب رخ دادن نمونههاي يك نوع رويداد و نمونههاي رويدادهاي ديگر نيز قابل توجه است كه آغازين و نهايي شدن نمونهها را تحت تأثير قرار ميدهد. مثلاً در توالي دو رويداد، انتخاب نمونة نهايي رويداد اول، ميتواند نمونه رويدادي باشد كه قبل از كلية نمونههاي رويداد دوم اتفاق افتاده است: Exclusive و با نمونه رويدادي باشد كه قبل از آخرين نمونة رويداد دوم اتفاق افتاده است: Shared [13].
E1(1); E1(2); E2(1); E1(3)
E1(2) Last Exclusive
E(3) Last Shared
2-2-1-2 شرط
بخش دوم قانون شرط ميباشد. پس از بروز يك رويداد نوبت به بررسي شرط قوانين رويداد مربوطه ميرسد و در صورت صحت شرط، قانون مربوط در صف اجرا قرار ميگيرد.
در قسمت شرط، يك مقايسه و يا يك پرس و جو ميتواند قرار بگيرد، در صورتي كه نتيجة پرس و جو تهي نباشد، شرط برقرار است.
انتخاب زمان بررسي شرط يك قانون پس از بروز رويداد آن از سياستهايي است كه توسط سيستم تعيين ميشود. اين زمان ميتواند فوري ، تأخيري و يا مجزا باشد. برخي سيستمها تنها يك سياست را پشتيباني ميكنند (نظير NAOS) و برخي نيز همة سياستها را پشتيباني ميكنند (Hipac). در چنين سيستمهايي در هر قانون سياست مورد نظر طراح تعريف ميشود و در صورت عدم تعريف، يك سياست به عنوان پيشفرض براي همة قوانين در نظر گرفته ميشود.
در تعيين شرط هر قانون، طراح بايد بتواند براي ارزيابي شرط از مقادير قبل و يا بعد از رويداد استفاده نمايد. نام تراكنشي كه رويداد در آن اتفاق افتاده است و يا نام كاربري كه باعث بروز رويداد شده نيز ممكن است در قسمت شرط استفاده شود. اين مقادير به همراه رويداد ارسال ميشود و پارامترهاي رويداد ناميده ميشود [16].
2-2-1-3 واكنش
واكنش هر قانون كلية عملياتي است كه در صورت وقوع رويداد و صحت شرط بايد اجرا شود. اين عمليات عبارتند از اضافه، حذف و تغيير دادهها در پايگاه داده، تغيير مجموعهاي از قوانين، فراخواني خارجي، ارسال پيام به مسئول و يا كاربران سيستم، انصراف از اتمام كار يك تراكنش و در نهايت به جاي فرامين واكنش يك سري فرامين ديگر اجرا شود (به عنوان نمونه به جاي انجام عمليات حذف پيامي به مسئول سيستم ارسال شود).
برخي زبانها قادر به تعريف دو نوع متفاوت از اجراي واكنش يك قانون ميباشند. در نوع اول، ارزيابي و اجرا قبل از اجراي فرمان رويداد صورت ميگيرد به عنوان مثال در SAMOS با استفاده از كلمة كليدي Before انجام رويداد به بعد از اجراي فرامين واكنش موكول ميشود و كلمة كليدي After به معناي اجراي واكنش پس از اجراي رويداد ميباشد [11]. به عنوان مثال با رسيدن فرمان حذف يك ركورد ابتدا يك پشتيبان تهيه و سپس عمل حذف انجام شود.