چهارشنبه, ۱۴ آذر, ۱۴۰۳ / 4 December, 2024
مجله ویستا

مروری بر ویژگی های نسخه ۵.۰.۱ بانک اطلاعاتی MySQL


مروری بر ویژگی های نسخه ۵.۰.۱ بانک اطلاعاتی MySQL
بانك اطلاعاتی معروف MySQL كه اپن‌سورس است، طرفداران زیادی در بین برنامه‌نویسان دارد. MySQL علاوه بر آن‌كه یكی از نمونه‌های بسیار موفق نرم‌افزارهای منبع باز محسوب می‌شود، مثالی از نرم‌افزاری است كه در اروپا (سوئد) پا به عرصه گذاشته است. نخستین نسخه این بانك اطلاعاتی توسط دو نفر از برنامه‌نویسان سوئدی نوشته شد و از آن پس بر اساس مدل نرم‌افزارهای منبع باز توسعه یافت.
البته در میانه راه (یعنی در زمان عرضه نسخه سوم این نرم‌افزار) بر اساس توافقی میان شركت MySQL AB از یك سو و شركت معظم SAP (كه دارای خط تحقیق و توسعه بانك اطلاعاتی اختصاصی خود بود) از طرف دیگر، نسخه ویژه‌ای موسوم به MaxDB از تلفیق تكنولوژی‌های این دو شركت در فهرست محصولات MySQL قرار گرفت. اما شركت MySQL همچنان كار توسعه نسخه قبلی و منبع باز نرم‌افزار MySQL را تا این لحظه به موازات MaxDB ادامه داده است.
طرف‌داران فلسفه نرم‌افزار‌های منبع باز همواره از MySQL به عنوان نمونه‌ای یاد می‌كنند كه توانسته است به‌خوبی با نمونه‌های بانك‌های اطلاعاتی اختصاصی همانندSQL server كه سرمایه‌گذاری‌های سنگینی برای توسعه آن انجام می‌شود، رقابت كند (هر چند كه مایكروسافت بر اساس یك سیاست كلی تنها رقیب خود را در زمینه بانك‌های اطلاعاتی، محصولا‌ت اوراكل می‌داند و اصولاً توجهی به نرم‌افزارهای منبع باز نمی‌كند). اما واقعیت آن است كه در دنیای برنامه‌نویسی این دو نرم‌افزار در رقابت تنگاتنگ قرار دارند.
آخرین نسخه MySQL همراه مجموعه‌ای از قابلیت‌ها و امكانات عرضه شده است كه آنرا بیش از پیش به‌سمت كاربردهای <بزرگ مقیاس> سوق می‌دهد. برخی از ناظران معتقدند هدف اولیه تغییرات و پیشرفت‌های ارائه شده در نسخه ۵ این نرم‌افزار، بیش از هر چیز دیگری معطوف برنامه‌نویسی پیشرفته در كاربردهای گسترده و بزرگ است. یكی از منابع مورداستفاده در تهیه این مقاله در این زمینه چنین بیان می‌كند: <آیا زمان آن فرا رسیده است كه اوراكل باز گردد و به پشت‌سر خود نگاه كند؟> جالب است كه نویسنده در نوشته خود اصلاً اسمی از مایكروسافت و SQL server نیاورده است!
● بانك‌اطلاعاتی سرور از نوع Embedded
اگرچه قابلیت استفاده از این بانك اطلاعاتی به صورت سرور Embedded موضوع جدیدی محسوب ن-م-ی‌ش-ود و از نسخه ۴ MySQL به بعد همواره وجودداشته است، اما این ویژگی از سوی كاربران همچنان نسبتاً ناشناخته باقی‌مانده است. استفاده از موتور نرم‌افزاری این بانك اطلاعاتی به صورت Embedded با توجه به آن‌كه این نرم‌افزار از نظر توابع API به‌طور كامل با مدل Client/Server سازگاری دارد، بسیار ساده است. در واقع برای به‌كارگیری این نرم‌افزار به صورت Embedded تنها كافی است تا یك تغییر كوچك در سورس كد (نسبت به روش معمول) اعمال شود. نمونه‌ای از یك قطعه كد به زبان C (كه در گوشه و كنار اینترنت به فراوانی یافت می‌شود) این مطلب را به‌خوبی نمایش می‌دهد. (به قطعه كد شماره یك مراجعه نمایید)
● 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 در یك فراخوانی
از زمان عرضه نسخه ۴.۱ نرم‌افزار MySQL، برنامه‌نویسان می‌توانسته‌اند توسط یك فراخوانی، چندینquery را بر روی سرور به اجرا بگذارند. این مطلب به معنی آن است كه نرم‌افزار Client قادر به دریافت چندین resultSet خواهد بود. این قابلیت در مواقعی كه برنامه‌نویس از پیش می‌داند كه چندین جستجو مستقل و ناوابسته به یكدیگر باید در كاربرد مشخصی به اجرا گذاشته شوند، عامل صرفه‌جویی بسیار مفیدی محسوب می‌شود. علاوه بر مواردی كه در بالا مورد بررسی قرار دادیم، این قابلیت زمانی كه آن‌را در كنار ویژگی جدید نسخه ۵ این نرم‌افزار یعنی پشتیبانی ازStored Procedure‌ها مورد بررسی قرار دهیم، اهمیت دوچندان خواهد یافت. زیرا می‌دانیم كه هر Stored Procedure ممكن است منجر به تولید و بازگشت دادن چندین resultSet شود.
● Viewها
Viewها برای نخستین بار در نسخه جدید MySQL مورد پشتیبانی قرار گرفته‌اند. Viewها این امكان را برای كاربر فراهم می‌آورند كه بتواند داده‌های مجموعه‌ای از جداول را همانند اطلاعات یك جدول ببیند. واقعیت آن است كه Viewها از دید برنامه‌نویسان از اهمیت چندانی برخوردار نیستند. اما برای مدیران بانك‌های اطلاعاتی، view یك ابزار كارآمد محسوب می‌شود. در آخرین نسخه بانك‌اطلاعاتی MySQL ،view‌ها دارای قابلیت Update شدن هستند.
● Stored procedureها و توابع
طرفداران MySQL تا همین اواخر از این‌كه نرم‌افزار بانك‌اطلاعاتی محبوبشان ازStored procedure‌ها پشتیبانی نمی‌كند، دلخور می‌شدند. اما از زمان عرضه نسخه ۴، شركت MySQL AB وعده داده بود كه از این قابلیت در نسخه ۵ پشتیبانی خواهد كرد. بدین ترتیب برای نخستین بارStored procedureها در نسخه‌های ۵ و ۵.۰.۱۰ به كار گرفته شدند.
یك stored procedure ‌همان‌طور كه از نام آن مشخص می‌شود، دستور فرایند یا تابعی است كه در محل خودِ بانك اطلاعاتی ذخیره‌سازی می‌شود. stored procedure از چندین منظر دارای اهمیت فراوان است. اصولاً یك stored procedure تابعی است كه برنامه‌نویس از آن برای انجام عملیات منطقی پیچیده بر روی داده‌های بانك اطلاعاتی استفاده می‌كند. البته باید توجه داشته باشید كه چنین تابعی در خود بانك اطلاعاتی ذخیره می‌شود. بدین ترتیب خواص متعددی كه به آن اشاره كردیم،‌ در این شرایط تحقق می‌یابند. نخست آن‌كه در یك مدل برنامه‌های كاربردی از نوع Client/server، انجام چنین عملیات پیچیده‌ای به هیچ وجه به سكویی كه بخش Client بر روی آن در حال اجرا خواهد بود، وابسته نیست.
نكته دیگر آن‌كه در سیستم‌های شبكه، انجام عملیات پیچیده و سنگین تحت هیچ شرایطی منجر به ایجاد ترافیك در سطح شبكه و در نتیجه ایجاد تأخیر نخواهد شد. زبان مورد استفاده برای نوشتن توابع ذخیره شده در بانك Stored procedure، زبان استانداردی است كه ۲۰۰۳ SQL نام دارد. این زبان همان زبانی است كه بسیاری از بانك‌های اطلاعاتی از آن برای چنین منظور‌هایی استفاده می‌كنند. به عنوان مثال بانك اطلاعاتی معتبر و معروف IBM به نام DB۲ هم از همین زبان برای بیان روتین‌های توابع خود بهره می‌گیرد.
مطلب دیگری كه نباید آن‌را فراموش كرد آن است كه در نسخه آخر MySQL قابلیت مهمی گنجانده شده است كه امكان بازگرداندن نتایج یك عبارت جستجویSELECT را به‌سمت كلاینت، فراهم می‌كند.
در صورتی‌كه نرم‌افزارMySQL از چنین قابلیتی پشتیبانی نمی‌كرد و برنامه‌نویسان ناگزیر می‌شدند تا یك cursor بر روی query باز كنند و نهایتاً یك resultSet بسازند. هرچند كه انجام چنین عملیاتی برای برنامه‌نویسان بانك‌های اطلاعاتی كار دشواری محسوب نمی‌شود، اما با این حال كاری است كه نیاز به توجه كامل برنامه‌نویس برای برگرداندن نتیجه یك query به كاربر دارد. از آنجایی‌كه در كاربردهای مشخصی، امكان بازگشت چندین resultSet به كاربر متصور است، اهمیت ویژگی مورد بحث در چنین شرایط خاصی بیشتر نمایان خواهد شد. بر همین اساس توصیه می‌شود در چنین شرایطی، حد‌المقدور از نسخه‌های بالاتر از نسخه ۴.۱ MySQL استفاده شود.
در پروژه‌های بزرگ و پیچیده‌تر،stored procedureها نقش دیگری نیز می‌یابند. معمولاً مرسوم است كه در پروژه‌های بزرگ، یك یا دو نفر از برنامه‌نویسان خبره بانك‌های اطلاعاتی وظیفه می‌یابند تا به حل مسائل پیچیده‌تر بپردازند و حاصل كار خود را به‌صورت یك عبارت SQL و در قالب یك Stored procedure تحویل دهند. بدین ترتیب مابقی برنامه‌نویسان می‌توانند به پیاده‌سازی بخش‌های دیگر پروژه بپردازند.
● Replication
اگرچه این ویژگی از دیرباز در نرم‌افزار MySQL مورد توجه بوده است، در نسخه جدید MySQL پیشرفت‌های قابل توجهی در ارتباط با این موضوع از جهات سرعت اجرا و قابلیت اطمینان صورت گرفته است. ویژگی replication از چندین جهت مهم تلقی می‌شود.
نخست آن‌كه استفاده از replication تقریباً در اكثر نرم‌افزارهای كاربردی بزرگ مقیاس (كه كاربران متعددی در حال قرائت اطلاعات از جداول هستند)، روش متداولی به‌شمار می‌رود. در چنین شرایطی به‌طور معمول كاهش سرعت اجرای نرم‌افزار كاربردی، هیچ چاره‌ای به‌جز بهره جستن از منابع سخت‌افزاری سریع‌تر نخواهد داشت. اما یك راه‌حل هوشمندانه دیگر نیز برای جبران مسأله سرعت اجرا وجود دارد.
در این روش می‌توان یك بانك اطلاعاتی را فقط برای خواندن از اطلاعات به‌كار گرفت و از چندین بانك‌های اطلاعاتی دیگر برای نوشتن و ذخیره اطلاعات استفاده كرد.
كاربرد متداول دیگر replication، ایجاد یك پشتیبان زنده یا Hot Backup از بانك‌های اطلاعاتی به اصطلاح mission critical است. (اصطلاح mission critical به وضعیت‌هایی گفته می‌شود كه در آن‌ها حتی توقف‌های لحظه‌ای نرم‌افزار، منجر به بروز خسارت خواهد شد. به عنوان مثال، نرم‌افزارهای كنترلی دمای راكتور یك نیروگاه هسته‌ای، تشكیل چنین حالتی دارند.
زیرا توقف لحظه‌ای فرایند كنترل دما در چنین كاربردهایی مسلماً بسیار خطرآفرین محسوب می‌شود) سناریوی استفاده ازreplication در تهیه نسخه‌های <پشتیبان زنده> در كاربردهای حساس چنان است كه به محض از كارافتادگی بانك اطلاعاتی اصلی، نسخه‌های پشتیبان، قابلیت در مدار قرار دادن اطلاعات و جایگزین بانك اطلاعاتی اصلی شدن را دارا باشند. در یك طراحی مناسب، استفاده از replication می‌تواند زمان‌های توقف یا Downtime را به حداقل برساند.
● نتیجه‌گیری‌
مسیر تغییر و تحولات و توسعه‌ای كه نرم‌افزار MySQL از نسخه ۳ به بعد تا این لحظه طی كرده است، مسیری دشوار و طولانی محسوب می‌شود. اما تنها از طریق طی كردن چنین مسیرهایی یك نرم‌افزار، خصوصاً از نوع بانك‌های اطلاعاتی می‌تواند خود را برای كاربرد در سطوح سازمانی بزرگ (Enterprise) آماده سازد.
مسعود سعیدی
منبع : ماهنامه شبکه