PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مروري بر ويژگي هاي نسخه 5.0.1 بانك اطلاعاتي MySQL



TAHA
11-26-2009, 11:05 PM
مروري بر ويژگي هاي نسخه 5.0.1 بانك اطلاعاتي MySQL

طرف‌داران فلسفه نرم‌افزار‌هاي منبع باز همواره از MySQL به عنوان نمونه‌اي ياد مي‌كنند كه توانسته است به‌خوبي با نمونه‌هاي بانك‌هاي اطلاعاتي اختصاصي همانندSQL server كه سرمايه‌گذاري‌هاي سنگيني براي توسعه آن انجام مي‌شود، رقابت كند (هر چند كه مايكروسافت بر اساس يك سياست كلي تنها رقيب خود را در زمينه بانك‌هاي اطلاعاتي، محصولا‌ت اوراكل مي‌داند و اصولاً توجهي به نرم‌افزارهاي منبع باز نمي‌كند). اما واقعيت آن است كه در دنياي برنامه‌نويسي اين دو نرم‌افزار در رقابت تنگاتنگ قرار دارند.
آخرين نسخه MySQL همراه مجموعه‌اي از قابليت‌ها و امكانات عرضه شده است كه آنرا بيش از پيش به‌سمت كاربردهاي <بزرگ مقياس> سوق مي‌دهد. برخي از ناظران معتقدند هدف اوليه تغييرات و پيشرفت‌هاي ارائه شده در نسخه 5 اين نرم‌افزار، بيش از هر چيز ديگري معطوف برنامه‌نويسي پيشرفته در كاربردهاي گسترده و بزرگ است. يكي از منابع مورداستفاده در تهيه اين مقاله در اين زمينه چنين بيان مي‌كند: <آيا زمان آن فرا رسيده است كه اوراكل باز گردد و به پشت‌سر خود نگاه كند؟> جالب است كه نويسنده در نوشته خود اصلاً اسمي از مايكروسافت و SQL server نياورده است!
بانك‌اطلاعاتي سرور از نوع Embedded
اگرچه قابليت استفاده از اين بانك اطلاعاتي به صورت سرور Embedded موضوع جديدي محسوب ن-م-ي‌ش-ود و از نسخه 4 MySQL به بعد همواره وجودداشته است، اما اين ويژگي از سوي كاربران همچنان نسبتاً ناشناخته باقي‌مانده است. استفاده از موتور نرم‌افزاري اين بانك اطلاعاتي به صورت Embedded با توجه به آن‌كه اين نرم‌افزار از نظر توابع API به‌طور كامل با مدل Client/Server سازگاري دارد، بسيار ساده است. در واقع براي به‌كارگيري اين نرم‌افزار به صورت Embedded تنها كافي است تا يك تغيير كوچك در سورس كد (نسبت به روش معمول) اعمال شود. نمونه‌اي از يك قطعه كد به زبان C (كه در گوشه و كنار اينترنت به فراواني يافت مي‌شود) اين مطلب را به‌خوبي نمايش مي‌دهد. (به قطعه كد شماره يك مراجعه نماييد)



http://pnu-club.com/Data/Gallery/2005/9/48_mysql5.0.1.2_s.jpg

Unionها
يونيون‌ها موجوداتي هستند كه امكان تركيب دو يا چند Query را در يك DataSet فراهم مي‌كنند (البته با فرض اين كه اسامي ستون، نوع داده و ترتيب فيلد مطابقت داشته باشند). يونيون‌ها مكانيسم بسيار قدرتمندي براي انواع گوناگون جستجو‌هاي پيشرفته محسوب مي‌شوند. به‌طور معمول زماني يونيون‌ها به‌كار برنامه‌نويسان مي‌آيند كه در كاربردهاي مورد نظر آن‌ها، دو جدول شامل اطلاعات نسبتاً مرتبط وجود داشته باشند. به عنوان مثال، در صورتي‌كه در ساختار يك بانك اطلاعاتي، يك جدول شامل اطلاعات فروشندگان باشد و جدول ديگري براي ثبت داده‌هاي شركت‌هاي فروشنده لوازم ساختماني به‌كار رفته باشد، مي‌توان از يونيون براي جستجوي همزمان در دو جدول و به‌دست آوردن يك مجموعه پاسخ يا result set بهره گرفت.
SubQueryها
از SubQuery‌ها و جداول مشتق شده براي قرار دادن عبارات انتخابي در يك SQL Statement ديگر استفاده مي‌شود. مثلاً اگر در بخش FROM عبارت جستجوي خود از يك عبارت SELECT ديگر استفاده كنيد، در اين صورت، عبارت SELECT خارجي از نتايج به‌دست آمده از عبارت SELECT به‌كار رفته در بخش FROM كلي جستجو، استفاده خواهد كرد. اين ويژگي هم يكي از ابزارهاي قدرتمندي است كه در كاربردهاي پيشرفته به كمك برنامه‌نويسان مي‌آيد.
عبارات از قبل آماده
برنامه‌نويسان آشنا با گرامر عبارات ODBC ازپيش آماده (ODBC Prepared statement) از اين پس مي‌توانند اين ويژگي را در مجموعه API بانك اطلاعاتي MySQL كه به زبان C نوشته است، نيز بيابند. مثلاً:
SELECT * FROM customer WHERE annual_sales > ? AND
?= region
اصطلاح عبارت جستجوي فوق آماده يا‌ prepare شد، برنامه‌نويس مي‌تواند توسط توابع API نرم‌افزار MySQL مقادير گوناگوني را به علامت‌هاي سؤال‌هاي به‌كار رفته در عبارت، متصل يا Bind كنند. مزيت عمده پشتيباني از چنين قابليتي در آن نهفته است كه ديگر براي هر عبارت جستجويي كه به ازاي هر يك از مقادير متغير علامت سؤال ايجاد مي‌شود، نيازي به توليد مجدد query نخواهد بود. اهميت اين موضوع زماني بيشتر آشكار مي‌گردد كه قرار باشد يك عبارت جستجوي از پيش آماده مكرراً اجرا شود. در اين وضعيت‌ به‌دليل آن‌كه query‌ها فقط يك‌بار ساخته و بهينه‌سازي مي‌شوند، سرعت اجراي نرم‌افزار به طرز محسوسي بالا خواهد بود (در واقع سرعت اجراي نرم‌افزار در قياس با حالت معمول، دچار افت قابل توجهي نخواهد شد).
چندين DataSet در يك فراخواني
از زمان عرضه نسخه 4.1 نرم‌افزار MySQL، برنامه‌نويسان مي‌توانسته‌اند توسط يك فراخواني، چندينquery را بر روي سرور به اجرا بگذارند. اين مطلب به معني آن است كه نرم‌افزار Client قادر به دريافت چندين resultSet خواهد بود. اين قابليت در مواقعي كه برنامه‌نويس از پيش مي‌داند كه چندين جستجو مستقل و ناوابسته به يكديگر بايد در كاربرد مشخصي به اجرا گذاشته شوند، عامل صرفه‌جويي بسيار مفيدي محسوب مي‌شود. علاوه بر مواردي كه در بالا مورد بررسي قرار داديم، اين قابليت زماني كه آن‌را در كنار ويژگي جديد نسخه 5 اين نرم‌افزار يعني پشتيباني ازStored Procedure‌ها مورد بررسي قرار دهيم، اهميت دوچندان خواهد يافت. زيرا مي‌دانيم كه هر Stored Procedure ممكن است منجر به توليد و بازگشت دادن چندين resultSet شود.
Viewها
Viewها براي نخستين بار در نسخه جديد MySQL مورد پشتيباني قرار گرفته‌اند. Viewها اين امكان را براي كاربر فراهم مي‌آورند كه بتواند داده‌هاي مجموعه‌اي از جداول را همانند اطلاعات يك جدول ببيند. واقعيت آن است كه Viewها از ديد برنامه‌نويسان از اهميت چنداني برخوردار نيستند. اما براي مديران بانك‌هاي اطلاعاتي، view يك ابزار كارآمد محسوب مي‌شود. در آخرين نسخه بانك‌اطلاعاتي MySQL ،view‌ها داراي قابليت Update شدن هستند.


Stored procedureها و توابع
طرفداران MySQL تا همين اواخر از اين‌كه نرم‌افزار بانك‌اطلاعاتي محبوبشان ازStored procedure‌ها پشتيباني نمي‌كند، دلخور مي‌شدند. اما از زمان عرضه نسخه 4، شركت MySQL AB وعده داده بود كه از اين قابليت در نسخه 5 پشتيباني خواهد كرد. بدين ترتيب براي نخستين بارStored procedureها در نسخه‌هاي 5 و 5.0.10 به كار گرفته شدند.
يك stored procedure ‌همان‌طور كه از نام آن مشخص مي‌شود، دستور فرايند يا تابعي است كه در محل خودِ بانك اطلاعاتي ذخيره‌سازي مي‌شود. stored procedure از چندين منظر داراي اهميت فراوان است. اصولاً يك stored procedure تابعي است كه برنامه‌نويس از آن براي انجام عمليات منطقي پيچيده بر روي داده‌هاي بانك اطلاعاتي استفاده مي‌كند. البته بايد توجه داشته باشيد كه چنين تابعي در خود بانك اطلاعاتي ذخيره مي‌شود. بدين ترتيب خواص متعددي كه به آن اشاره كرديم،‌ در اين شرايط تحقق مي‌يابند. نخست آن‌كه در يك مدل برنامه‌هاي كاربردي از نوع Client/server، انجام چنين عمليات پيچيده‌اي به هيچ وجه به سكويي كه بخش Client بر روي آن در حال اجرا خواهد بود، وابسته نيست. نكته ديگر آن‌كه در سيستم‌هاي شبكه، انجام عمليات پيچيده و سنگين تحت هيچ شرايطي منجر به ايجاد ترافيك در سطح شبكه و در نتيجه ايجاد تأخير نخواهد شد. زبان مورد استفاده براي نوشتن توابع ذخيره شده در بانك Stored procedure، زبان استانداردي است كه 2003 SQL نام دارد. اين زبان همان زباني است كه بسياري از بانك‌هاي اطلاعاتي از آن براي چنين منظور‌هايي استفاده مي‌كنند. به عنوان مثال بانك اطلاعاتي معتبر و معروف IBM به نام DB2 هم از همين زبان براي بيان روتين‌هاي توابع خود بهره مي‌گيرد.

مطلب ديگري كه نبايد آن‌را فراموش كرد آن است كه در نسخه آخر MySQL قابليت مهمي گنجانده شده است كه امكان بازگرداندن نتايج يك عبارت جستجويSELECT را به‌سمت كلاينت، فراهم مي‌كند. در صورتي‌كه نرم‌افزارMySQL از چنين قابليتي پشتيباني نمي‌كرد و برنامه‌نويسان ناگزير مي‌شدند تا يك cursor بر روي query باز كنند و نهايتاً يك resultSet بسازند. هرچند كه انجام چنين عملياتي براي برنامه‌نويسان بانك‌هاي اطلاعاتي كار دشواري محسوب نمي‌شود، اما با اين حال كاري است كه نياز به توجه كامل برنامه‌نويس براي برگرداندن نتيجه يك query به كاربر دارد. از آنجايي‌كه در كاربردهاي مشخصي، امكان بازگشت چندين resultSet به كاربر متصور است، اهميت ويژگي مورد بحث در چنين شرايط خاصي بيشتر نمايان خواهد شد. بر همين اساس توصيه مي‌شود در چنين شرايطي، حد‌المقدور از نسخه‌هاي بالاتر از نسخه 4.1 MySQL استفاده شود.
در پروژه‌هاي بزرگ و پيچيده‌تر،stored procedureها نقش ديگري نيز مي‌يابند. معمولاً مرسوم است كه در پروژه‌هاي بزرگ، يك يا دو نفر از برنامه‌نويسان خبره بانك‌هاي اطلاعاتي وظيفه مي‌يابند تا به حل مسائل پيچيده‌تر بپردازند و حاصل كار خود را به‌صورت يك عبارت SQL و در قالب يك Stored procedure تحويل دهند. بدين ترتيب مابقي برنامه‌نويسان مي‌توانند به پياده‌سازي بخش‌هاي ديگر پروژه بپردازند.
Replication
اگرچه اين ويژگي از ديرباز در نرم‌افزار MySQL مورد توجه بوده است، در نسخه جديد MySQL پيشرفت‌هاي قابل توجهي در ارتباط با اين موضوع از جهات سرعت اجرا و قابليت اطمينان صورت گرفته است. ويژگي replication از چندين جهت مهم تلقي مي‌شود.
نخست آن‌كه استفاده از replication تقريباً در اكثر نرم‌افزارهاي كاربردي بزرگ مقياس (كه كاربران متعددي در حال قرائت اطلاعات از جداول هستند)، روش متداولي به‌شمار مي‌رود. در چنين شرايطي به‌طور معمول كاهش سرعت اجراي نرم‌افزار كاربردي، هيچ چاره‌اي به‌جز بهره جستن از منابع سخت‌افزاري سريع‌تر نخواهد داشت. اما يك راه‌حل هوشمندانه ديگر نيز براي جبران مسأله سرعت اجرا وجود دارد. در اين روش مي‌توان يك بانك اطلاعاتي را فقط براي خواندن از اطلاعات به‌كار گرفت و از چندين بانك‌هاي اطلاعاتي ديگر براي نوشتن و ذخيره اطلاعات استفاده كرد.
كاربرد متداول ديگر replication، ايجاد يك پشتيبان زنده يا Hot Backup از بانك‌هاي اطلاعاتي به اصطلاح mission critical است. (اصطلاح mission critical به وضعيت‌هايي گفته مي‌شود كه در آن‌ها حتي توقف‌هاي لحظه‌اي نرم‌افزار، منجر به بروز خسارت خواهد شد. به عنوان مثال، نرم‌افزارهاي كنترلي دماي راكتور يك نيروگاه هسته‌اي، تشكيل چنين حالتي دارند. زيرا توقف لحظه‌اي فرايند كنترل دما در چنين كاربردهايي مسلماً بسيار خطرآفرين محسوب مي‌شود) سناريوي استفاده ازreplication در تهيه نسخه‌هاي <پشتيبان زنده> در كاربردهاي حساس چنان است كه به محض از كارافتادگي بانك اطلاعاتي اصلي، نسخه‌هاي پشتيبان، قابليت در مدار قرار دادن اطلاعات و جايگزين بانك اطلاعاتي اصلي شدن را دارا باشند. در يك طراحي مناسب، استفاده از replication مي‌تواند زمان‌هاي توقف يا Downtime را به حداقل برساند.
نتيجه‌گيري‌
مسير تغيير و تحولات و توسعه‌اي كه نرم‌افزار MySQL از نسخه 3 به بعد تا اين لحظه طي كرده است، مسيري دشوار و طولاني محسوب مي‌شود. اما تنها از طريق طي كردن چنين مسيرهايي يك نرم‌افزار، خصوصاً از نوع بانك‌هاي اطلاعاتي مي‌تواند خود را براي كاربرد در سطوح سازماني بزرگ (Enterprise) آماده سازد.