در اين درس با ارائه چند برنامه و مثال ساده به طرز كار زبان C# ميپردازيم. اهداف اين درس عبارتند از :
ليست 1-1، يك برنامة ساده با عنوان Welcome در زبان C#
// Namespace اعلان
using System;
// كلاس آغازين برنامه
class WelcomeCSS
{
// آغاز كار اجراي برنامه
public static void Main()
{
// نوشتن متن در خروجي
Console.WriteLine("Welcome to the C# Persian Tutorial!");
}
}
برنامة ليست 1-1 داراي 4 پارامتر اصلي است، اعلان Namespace، كلاس، متد Main() و يك دستور زبان C#.
در همين جا بايد به يك نكته اشاره كنم، براي زبان C# همانند بيشتر زبانهاي برنامهسازي دو نوع كامپايلر وجود دارد. يك نوع كامپايلر كه به كامپايلر Command Line معروف است و نوع ديگر كامپايلر Visual است. كامپايلرهاي Command Line محيطي شبيه به محيط DOS دارند و با دادن يك سري دستورات به اجرا در ميآيند. كامپايلرهاي Visual محيطي همانند ويندوز دارند كه با دارا بودن محيط گرافيكي و ابزارهاي خاص، برنامهنويس را در امر برنامهسازي كمك ميكنند. از نمونههاي هر يك از كامپايلرها، ميتوان به Microsoft C# Command Line Compiler كه يك كامپايلر Command Line و Microsoft Visual C# كه يك كامپايلر Visual است، اشاره كرد. البته در حال حاضر بيشتر از كامپايلرهاي ويژوال استفاده ميشود.
من سعي ميكنم در آينده به توضيح محيط Visual C# و Visual Studio.Net بپردازم. اما فعلاً براي اجراي برنامهها ميتوانيد از Visual Studio.Net استفاده كنيد. پس از نصب آن، وارد محيط C# شده و در قسمت انتخاب برنامة جديد گزينة Console را جهت اجراي برنامهها انتخاب نماييد.
براي اين درس، فعلاً به توضيحات بيشتر دربارة محيط ويژوال نميپردازم اما در آينده به توضيح كامل محيط Visual Studio.Net خواهم پرداخت.
براي اجراي كد بالا در صورتيكه از محيط ويژوال استفاده ميكنيد بايد بر روي دكمة Run كليك كنيد و در صورتيكه كامپايلر Command Line داريد با دستور زير ميتوانيد برنامه را اجرا كنيد : csc Welcome.cs
پس از اجراي برنامه، كامپايلر براي شما يك فايل قابل اجرا(Executable) تحت نام Welcome.exe توليد ميكند.
نكته : در صورتيكه از Visual Studio.Net(VS.Net) استفاده كنيد، پس از اجراي برنامه، يك صفحه براي نمايش خروجي به سرعت باز شده و بسته ميشود و شما قادر به ديدن خروخي نخواهيد بود. براي اينكه بتوانيد خروجي برنامه را ببينيد، در انتهاي برنامه دستور زير را وارد نماييد :
Console.ReadLine();
استفاده از اين دستور باعث ميشود تا برنامه منتظر دريافت يك ورودي از كاربر بماند، كه در اين حالت شما ميتوانيد خروجي برنامه خود را ديده و سپس با زدن كليد Enter برنامه را خاتمه دهيد.
نكتة ديگري كه در مورد زبان برنامهنويسي C# بايد مورد توجه قرار دهيد اينست كه اين زبان Case Sensitive است، بدين معنا كه به حروف كوچك و بزرگ حساس است يعني براي مثال ReadLine با readLine متفاوت است به طوريكه اولي جزو دستورات زبان C# و دومي به عنوان يك نام براي متغير يا يك تابع كه از طرف كاربر تعريف شده است در نظر گرفته ميشود.
اعلان Namespace به سيستم اعلان مينمايد كه شما از توابع كتابخانهاي System جهت اجراي برنامهها خود استفاده مينماييد. دستوراتي مانند WriteLine و ReadLine جزو توابع كتابخانهاي System ميباشند. اغلب دستورات و توابع مهم و كليدي استفاده از كنسول ورودي/خروجي در اين كتابخانه ميباشد. در صورتيكه در ابتداي برنامه از using System استفاده نكنيد، يابد در ابتداي هر يك از دستورات برنامه كه مربوط اين كتابخانه است، از كلمة System استفاده نماييد. بعنوان مثال در صورت عدم استفاده از using System بايد از دستور System.Console.WriteLine() به جاي Console.WriteLine() استفاده نماييد.
تعريف كلاس،Class Welcome CSS، شامل تعريف دادهها(متغيرها) و متدها جهت اجراي برنامه است. يك كلاس، جزو معدود عناصر زبان C# است كه بوسيلة آن ميتوان به ايجاد يك شي (Object) از قبيل واسط ها (Interfaces) و ساختارها(Structures)، پرداخت. توضيحات بيشتر در اين زمينه در درسهاي آينده ذكر ميشوند. در اين برنامه كلاس هيچ داده و متغيري ندارد و تنها شامل يك متد است. اين متد، رفتار(Behavior) اين كلاس را مشخص ميكند.
متد درون اين كلاس بيان ميكند كه اين كلاس چه كاري را پس از اجرا شدن انجام خواهد داد. كلمة كليدي Main() كه نام متد اين كلاس نيز ميباشد جزو كلمات رزرو شده زبان C# است كه مشخص ميكند برنامه از كجا بايد آغاز به كار نمايد. وجود متد Main() در تمامي برنامههاي اجرايي ضروري است. در صورتيكه يك برنامه حاوي متد Main() نباشد بعنوان توابع سيستمي همانند dll هاي ويندوز در نظر گرفته ميشود.
قبل از كلمة Main() كلمه ديگري با عنوان static آورده شده است. اين كلمه در اصطلاح Modifier ميگويند. استفاده از static براي متد Main() بيان ميدارد كه اين متد تنها در در همين كلاس قابل اجراست و هيچ نمونهاي (Instance) ديگري از روي آن قابل اجرا نميباشد. استفاده از static براي متد Main() الزامي است زيرا در ابتداي آغاز برنامه هيچ نمونهاي از هيچ كلاس و شياي موجود نميباشد و تنها متد Main() است كه اجرا ميشود. (در صورتيكه با برخي اصطلاحات اين متن از قبيل كلاس، شي، متد و نمونه آشنايي نداريد، اين به دليل آنست كه اين مفاهيم جزو مفاهيم اولية برنامهنويسي شيگرا (OOP) هستند. سعي ميكنم در درسهاي آينده به توضيح اين مفاهيم نيز بپردازم، ولي فعلاً در همين حد كافي ميباشد.)
هر متد بايد داراي يك مقدار بازگشتي باشد، يعني بايد مقداري را به سيستم بازگرداند، در اين مثال نوع بازگشتي void تعزيف شده است كه نشان دهنده آنست كه اين متد هيچ مقداري را باز نميگرداند يا به عبارت بهتر خروجي ندارد. همچنين هر متد ميتواند داراي پارامترهايي نيز باشد كه ليست پارامترهاي آن در داخل پرانتزهاي جلوي آن قرار ميگيرد. براي سادگي كار در اين برنامه متد ما داراي هيچ پارامتري نيست ولي در ادامة همين درس به معرفي پارامترها نيز ميپردازم.
متد Main() رفتار و عمل خود را بوسيله Console.WriteLine(…) مشخص مينمايد. Console كلاسي در System است و WriteLine() متدي در كلاس Console. در زبان C# از اپراتور "." (نقطه dot) جهت جداسازي زيرروتينها و زيرقسمتها استفاده ميكنيم. همانطور كه ملاحظه ميكنيد چون WriteLine() يك متد درون كلاس Console است به همين جهت از "." جهت جداسازي آن استفاده كردهايم.
در زبان C#، براي قرار دادن توضيحات در كد برنامه از // استفاده ميكنيم. بدين معنا كه كامپايلر در هنگام اجراي برنامه توجهي به اين توضيحات نميكند و اين توضيحات تنها به منظور بالا بردن خوانايي متن و جهت و كمك به فهم بهتر برنامه قرار ميگيرند. استفاده از // تنها در مواردي كاربرد دارد كه توضيحات شما بيش از يك خط نباشد. در صورت تمايل براي استفاده از توضيحات چند خطي بايد در ابتداي شروع توضيحات از /* و در انتها آن از */ استفاده نماييد. در اين حالت تمامي مطالبي كه بين /* */ قرار ميگيرند به عنوان توضيحات (Comments) در نظر گرفته ميشوند.
تمامي دستورات (Statements) با ";"، سمي كولون، پايان مييابند. كلاسها و متدها با } آغاز شده و با { خاتمه مييابند. تمامي دستورات بين { } يك بلوك را ميسازند.
بسياري از برنامهها از كاربر ورودي دريافت ميكنند. انواع گوناگوني از اين وروديها ميتوانند به عنوان پارامتري براي متد Main() در نظر گرفته شوند. ليست 2-1 برنامهاي را نشان ميدهد نام كاربر را از ورودي دريافت كرده و آن را بر روي صفحه نمايش ميدهد. اين ورودي به صورت پارامتري براي متد Main() در نظر گرفته شده است.
ليست 2-1 : برنامهاي كه ورودي را از كاربر، بعنوان پارامتر Main()، دريافت ميكند.
// Namespace اعلان
using System;
// كلاس آغازين برنامه
class NamedWelcome
{
// آغاز اجرا برنامه
public static void Main(string[] args)
{
// نمايش بر روي صفحه
Console.WriteLine("Hello, {0}!", args[0]);
Console.WriteLine("Welcome to the C# Persian Tutorial!");
}
}
توجه داشته باشيد كه اين برنامه، ورودي را به صورت Command-Line دريافت ميكند و در هنگام اجراي برنامه بايد ورودي را در Command-Line وارد نماييد. در صورتيكه ورودي را وارد ننماييد برنامه دچار مشكل شده و متوقف خواهد شد.
همان طور كه در ليست 2-1 مشاهده مينماييد، پارامتر متد Main() با عنوان args مشخص شده است. با استفاده از اين نام در داخل متد ميتوان آن استفاده نمود. نوع اين پارامتر از نوع آرايهاي از نوع رشته (string[]) در نظر گرفته شده است. انواع(types) و آرايهها را در درسهاي بعدي بررسي ميكنيم. فعلاً بدانيد كه آرايه رشتهاي جهت نگهداري چندين كاراكتر مورد استفاده قرار ميگيرد. [] مشخص كننده آرايه هستند كه مانند يك ليست عمل ميكند.
همانطور كه ملاحظه ميكنيد در اين برنامه دو دستور Console.WriteLine(…) وجود دارد كه اولين دستور مقداري با دستور دوم متفاوت است. همانطور كه مشاهده ميكنيد داخل دستور Console.WriteLine(…) عبارتي به شكل {0} وجود دارد. اين آرگومان، نشان ميدهد كه به جاي آن چه مقداري بايد نمايش داده شود كه در اين جا args[0] نشان داده ميشود. عبارتي كه داخل " " قرار دارد عيناً در خروجي نمايش داده ميشود، به جاي آرگومان {0}، مقداري كه پس از " قرار دارد، قرار ميگيرد. حال به آرگومان بعدي يعني args[0] توجه كنيد. مقدار صفر داخل [] نشان ميدهد كه كدام عنصر از آرايه مورد استفاده است. در C# انديس آرايه از صفر شروع ميشود به همين جهت براي دسترسي به اولين عنصر آرايه بايد از انديس صفر استفاده كنيم.(همانطور كه قبلاً نيز كفتم آرايهها را در درسهاي آينده توضيح خواهم داد، هدف از اين درس تنها آشنايي با C# است.!)
مجدداً به آرگومان {0} بازگرديم. اين آرگومان نشان مي دهد كه يك مقدار بايد در رشته خروجي قرار گيرد، اين مقدار همان args[0] است. اگر شما اين برنامه را از طريق Command-Line اجرا نماييد خروجي شبيه به زير خواهيد گرفت :
>Hello!, Meysam!
>Welcome to C# Persian Tutorial!
همان گونه كه ميبينيد، پس از اجراي برنامه نام شما كه از طريق Command-Line آنرا وارد نمودهايد در خروجي ظاهر ميشود. استفاده از آرگومان {n}، كه در آن n يك مقدار عددي است، جهت فرمت دادن به متن خروجي است كه بر روي صفحه به نمايش در ميآيد. مقدار n از صفر آغاز شده و به ترتيب افزايش ميبايد. به مثال زير توجه كنيد :
Console.WriteLine("Hello! ,{0} ,{1}, {2}",args[0],args[1],args[2]);
اين خط از برنامه سه مقدار args[0],args[1],args[2] را در خروجي به ترتيب نمايش ميدهد. ملاحظه مينماييد كه چون 3 مقدار را ميخواهيم نمايش دهيم، سه بار از آرگومان {n} استفاده كردهايم و هر بار يك واحد به مقدار قبلي افزودهايم. در آينده بيشتر با اين مفاهيم آشنا ميشويم.
مطلبي كه بايد در مورد ليست 2-1 به آن توجه شود آنست كه اين برنامه تنها از طريق Command-Lineقابل اجراست و در صورتيكه كاربر از اين مطلب كه برنامه بايد داراي ورودي به صورت Command-Line باشد، بي اطلاع باشد و ورودي را در Command-Line وارد نكند، برنامه متوقف شده و اجرا نميشود. پس براي رفع چنين مشكلي بايد از روش بهتري جهت دريافت ورودي از كاربر استفاده كرد.
ليست 3-1 : يك برنامه كه قابليت محاوره با كاربر را دارد.
// Namespace اعلان
using System;
// كلاس آغازين برنامه
class InteractiveWelcome
{
//آغاز اجراي برنامه
public static void Main()
{
// متني بر روي صفحه نمايش داده ميشود
Console.Write("What is your name?: ");
//متني نمايش داده شده و برنامه منتظر دريافت ورودي ميماند
Console.Write("Hello, {0}! ", Console.ReadLine());
Console.WriteLine("Welcome to the C# Persian Tutorial!");
}
}
همانطوريكه در اين برنامه ديده مي شود، متد Main() داراي پارامتر نيست. در عوض يك خط به متن برنامه ليست 2-1 اضافه شده است. در اولين خط از اين برنامه، متني با عنوان اينكه نام شما چيست؟ بر روي صفحه ظاهر ميشود. سپس در خط بعدي پس از نوشتن كلمه Hello, ، برنامه منتظر دريافت ورودي از كاربر ميشود. بدين معني كه اين بار تا زمانيكه كاربر متني را به عنوان نام خود وارد نكند اجراي برنامه به پيش نخواهد رفت و خط بعدي اجرا نميشود. اين برنامه روش ايجاد ارتباط از طريق برنامه با كاربر را نمايش ميدهد. در اين مثال كاربر دقيقاً متوجه ميشود كه چه زماني بايد اطلاعات را وارد نمايد و اين اطلاعات چه بايد باشد در حاليكه در مثال قبل چنين نبود. همانگونه كه ميبينيد در اين برنامه آرگومان {0} مستقيماً از طريق دستور Console.ReadLine() دريافت ميشود و بلافاصله در خروجي نمايش داده ميشود. دستور ReadLine() نيز يكي از متدهاي كلاس Console است كه بوسيله آن رشته ورودي خوانده ميشود.
خروجي برنامه فوق به شكل زير است :
What is your name?:
(سپس برنامه منتظر دريافت متني از ورودي توسط كاربر ميماند)
(پس از اينكه كاربر رشتهاي را وارد كرد و كليدEnter را فشار داد، متن زير نمايش داده ميشود.)
Hello, Meysam!
(سپس اجراي برنامه به دستور بعدي منتقل ميشود)
Welcome to the C# Persian Tutorial!
خروجي كامل برنامه :
What is your name?:
Hello, Meysam! Welcome to the C# Persian Tutorial!
توجه كنيد كه ReadLine() به عنوان يك متد، مقداري را به سيستم بازميگرداند. اين مقدار در اين برنامه به آرگومان {0} برگردانده ميشود. اين خط از برنامه را ميتوان طور ديگري هم نوشت :
string myName=Console.ReadLine();
Console.WriteLine("Hello, {0}!",myName);
در اين حالت ما يك متغير از نوع رشته با نام myName تعريف كردهايم كه مقدار ورودي در آن ذخيره ميشود و سپس از اين مقدار به عنوان مقداري كه {0} ميپذيرد استفاده كردهايم.
در اين درس آموختيد كه ساختار كلي يك برنامه C# چگونه است. هر برنامه C# از يك كلاس اصلي تشكيل ميشود كه اين كلاس شامل دادهها و متغيرها و متدهايي ميباشد. متد آغازين برنامه كه برنامه با آن شروع به اجرا ميكند، متد Main() است. با استفاده از توابع كتابخانهاي مينوان به كلاسها و متدهاي C# دسترسي پيدا كرد. از جمله اين توابع System بود كه يكي از كلاسهاي آن Console و چند متد اين كلاس، متدهاي WriteLine() و ReadLine() بودند.
نویسنده : میثم قزوینی
منبع : سایت Http://www.SQLIran.com
|
با تجربیاتی که در مدت هفت سال کار با SQL Server کسب کرده ام، ده موردی که در این مقاله ذکر می کنم ، کارهایی هستند که احساس می کنم یک راهبر پایگاه داده (DBA ) نباید هرگز انجام دهد. 1. Rebuild کردن Index در ساعات کاریاین عمل موجب افزایش چشم گیر I/O دیسک می شود. بهتر است این عمل بعدازظهر یا در طول شب ( زمانی که فعالیت کاربران به حداقل می رسد ) انجام شود.لازم به ذکر است که می توانید از سرویس Agent job جهت برنامه ریزی انجام خودکار این عملیات استفاده کنید. 2. Stop کردن Database بدون اطلاع رسانی قبلیچرا؟!... تعداد زیادی کاربر که نمی توانند با برنامه خود کار کنند ... تلفن شما هم تا زمان راه اندازی مجدد Database از زنگ زدن دست بر نمی دارد. 3. نصب Service Pack در ساعات کارینصب سرویس پک، موجب Stop و Start های متعدد پایگاه داده می شود. توصیه می کنم این کار را نیز در ساعات کاری شرکت یا سازمان خود انجام ندهید. چون با این کار کاربران بسیاری را دلخور می کنید. 4. اجرای Query های تستی بر روی سرور اصلیاگر این کار را انجام می دهید پس حتما نمی دانید که این Query ها به چه میزان منابع Server را به خود اختصاص می دهند. 5. Defragment کردن درایوهایی که فایل های دیتابیس روی آن قرار دارندآیا تا به حال این کار را روی کامپیوتر شخصی خود انجام داده اید؟! پس حتما متوجه اید که چرا نباید این کار را روی سرور شرکت یا سازمان خود در ساعات کاری انجام دهید!! 6. بداخلاقی با برنامه نویسانسعی کنید منطق دستورات خود را به آن ها توضیح دهید. بهتر است همیشه صبور باشید و تلاش کنید در حین ارجاع کار به آن ها دانش خود را نیز به آن ها منتقل کنید. نتیجه کار مستقیما به کار گروهی شما بستگی دارد. 7. پشتیبان گیری در ساعات کاریاین موضوع هم به I/O دیسک سرور مربوط می شود. اگر مجبور هستید این کار را در طول روز و در ساعات کاری انجام دهید، پس به گزینه هایی مانند differential Backups یا Transactional log Backups توجه کنید، این نوع پشتیبان گیری ها بسیار سریعتر صورت می پذیرد. 8. نصب Update های نرم افزاری قبل از تست و پشتیبان گیریممکن است نرم افزار های جانبی بر روی سرور پایگاه داده شما نصب شده باشد. نصب نرم افزار و یا نصب Update های نرم افزاری حتما باید با توجه ویژه و تست قبلی صورت پذیرد. تولید کنندگان نرم افزار ممکن است نتوانند صحت عمکرد نرم افزار خود را بر روی سخت افزار و شرایط مختلف بررسی کنند. قبل از اعمال هر تغییری در نرم افزارهای سرور از دیتابیس خود Backup بگیرید. 9. ایمن نکردن SQL Serverغالبا DBA ها فکر می کنند که سرورهایشان از امنیت بالایی برخوردار است!! آیا شما هم این طور فکر می کنید؟! 10. اجرای دستور Drop قبل از اطمینان کاملقبل از اینکه دکمه Enter را فشار دهید خوب فکر کنید، اجرای این دستور با سهل انگاری ممکن است موجب اخراج بلادرنگ شما شود! |
|
با تجربیاتی که در مدت هفت سال کار با SQL Server کسب کرده ام، ده موردی که در این مقاله ذکر می کنم ، کارهایی هستند که احساس می کنم یک راهبر پایگاه داده (DBA ) نباید هرگز انجام دهد. 1. Rebuild کردن Index در ساعات کاریاین عمل موجب افزایش چشم گیر I/O دیسک می شود. بهتر است این عمل بعدازظهر یا در طول شب ( زمانی که فعالیت کاربران به حداقل می رسد ) انجام شود.لازم به ذکر است که می توانید از سرویس Agent job جهت برنامه ریزی انجام خودکار این عملیات استفاده کنید. 2. Stop کردن Database بدون اطلاع رسانی قبلیچرا؟!... تعداد زیادی کاربر که نمی توانند با برنامه خود کار کنند ... تلفن شما هم تا زمان راه اندازی مجدد Database از زنگ زدن دست بر نمی دارد. 3. نصب Service Pack در ساعات کارینصب سرویس پک، موجب Stop و Start های متعدد پایگاه داده می شود. توصیه می کنم این کار را نیز در ساعات کاری شرکت یا سازمان خود انجام ندهید. چون با این کار کاربران بسیاری را دلخور می کنید. 4. اجرای Query های تستی بر روی سرور اصلیاگر این کار را انجام می دهید پس حتما نمی دانید که این Query ها به چه میزان منابع Server را به خود اختصاص می دهند. 5. Defragment کردن درایوهایی که فایل های دیتابیس روی آن قرار دارندآیا تا به حال این کار را روی کامپیوتر شخصی خود انجام داده اید؟! پس حتما متوجه اید که چرا نباید این کار را روی سرور شرکت یا سازمان خود در ساعات کاری انجام دهید!! 6. بداخلاقی با برنامه نویسانسعی کنید منطق دستورات خود را به آن ها توضیح دهید. بهتر است همیشه صبور باشید و تلاش کنید در حین ارجاع کار به آن ها دانش خود را نیز به آن ها منتقل کنید. نتیجه کار مستقیما به کار گروهی شما بستگی دارد. 7. پشتیبان گیری در ساعات کاریاین موضوع هم به I/O دیسک سرور مربوط می شود. اگر مجبور هستید این کار را در طول روز و در ساعات کاری انجام دهید، پس به گزینه هایی مانند differential Backups یا Transactional log Backups توجه کنید، این نوع پشتیبان گیری ها بسیار سریعتر صورت می پذیرد. 8. نصب Update های نرم افزاری قبل از تست و پشتیبان گیریممکن است نرم افزار های جانبی بر روی سرور پایگاه داده شما نصب شده باشد. نصب نرم افزار و یا نصب Update های نرم افزاری حتما باید با توجه ویژه و تست قبلی صورت پذیرد. تولید کنندگان نرم افزار ممکن است نتوانند صحت عمکرد نرم افزار خود را بر روی سخت افزار و شرایط مختلف بررسی کنند. قبل از اعمال هر تغییری در نرم افزارهای سرور از دیتابیس خود Backup بگیرید. 9. ایمن نکردن SQL Serverغالبا DBA ها فکر می کنند که سرورهایشان از امنیت بالایی برخوردار است!! آیا شما هم این طور فکر می کنید؟! 10. اجرای دستور Drop قبل از اطمینان کاملقبل از اینکه دکمه Enter را فشار دهید خوب فکر کنید، اجرای این دستور با سهل انگاری ممکن است موجب اخراج بلادرنگ شما شود! |
|
ممکن است پس از طی چند سال و درج هزاران رکورد در جداول یک بانک اطلاعاتی، سرعت جستجو در میان اطلاعات درج شده،سرعت درج اطلاعات جدید یا تغییر و حذف آن ها کند شود و مدیران یا برنامه نویسان این بانک ها را به ایجاد دگرگونی در برخی قسمت های بانک ناچار نماید.دو روش معمول برای مواجهه با چنین پدیده ای وجود دارد: روش اول یعنی توسعه عرضی ( Scale up ) که ترجیحا باید مقدم بر روش دوم مورد استفاده قرار گیرد، با استفاده از ساز وکار هایی مثل ایجاد انواع ایندکس ها بر روی جداول یا دید ( view )های بانک، کوتاه نمودن و کم حجم تر کردن تریگرها، به حداقل رساندن تعداد دستورات SQL که در هر فرایند وجود دارد، پرهیز از استفاده بی موقع و مکرر از توابع تعریف شده توسط کاربر و غیره می توان تا حدودی مشکل را برطرف نمود. اما در برخی موارد با تمام این تمهیدات باز هم اشکالات و وقفه هایی در سرعت و عملکرد سیستم، مدیران بانک های اطلاعاتی را ناگزیر می کند برای حل مشکل به روش دوم یعنی توسعه طولی ( Scale out ) رو بیاورند. در این روش، استفاده از راهکارهایی چون افزایش تعداد سرورها یا ارتقای سرورهای موجود در پردازنده قدرتمندتر، حافظه بیشتر، هارددیسک های سریع تر و حتی ارتقای ارتباطات شبکه ای یا امثال آن از جمله ترفند هایی هستند که برای رفع معضل سرعت، مورداستفاده قرار می گیرند. در این مقاله به یکی از روش های توسعه طولی، نگاهی می افکنیم. صورت مسئلهفرض کنید شما دارای یک بانک اطلاعاتی در حال کار، روی یک سرور هستید و در طول روز حدود پانصد کاربر به طور متناوب مشغول کار با این بانک هستند. کاملا آشکار است که هر چه سعی کنید با استفاده از سازوکارهای توسعه عرضی ( مثل ایندکس گذاری و امثال آن )، سرعت و کارایی سیستم را افزایش دهید، باز هم برای ارائه گزارش های مطلوب و استاندارد و حتی برای ایجاد یک محیط کارا و کاربرپسند برای استفاده از آن، مجبور می شوید برای اتفاقاتی که ممکن است در اثر ترافیک سنگین عملیات کاربران اتفاق بیفتد، فکر دیگری بکنید. یعنی حتی اگر سرور شما یک کامپیوتر قدرتمند با دو پردازنده Xeon، چهار گیگابایت حافظه و یک هارددیسک سریع باشد، باز هم قطعا در پاره ای از اوقات تصادم انبوه درخواست های موردنیاز کاربران در یک زمان، باعث بروز مسائلی چون قفل شدن برخی رکوردهای بانک (locking ) یا مسدود شدن برخی درخواست ها به دلیل عدم وجود زمان کافی برای پردازش آن ( Timeout Blocking ) می شود. انتخاب راه حلراه حل مسئله با استفاده از روش توسعه طولی، افزودن به تعداد سرورهایی است که به شکلی نقش پردازشگر اطلاعات را بازی می کنند. در این روش، سه راه حل مختلف وجود دارد که با اتکا به آن ها می توان تعداد سرورها، سرورهای لایه واسط (Application Server ) و سرورهای بانک اطلاعاتی (Database Server ) را افزایش داد. با این کار ترافیک و سنگینی پردازش فقط روی سرور لایه واسط یا سرور بانک اطلاعاتی کاهش می یابد و به نحوی پدیده توازن بار (Load Balancing ) چند سرور صورت می گیرد. در ادامه به بررسی هر سه راه حل مذکور می پردازیم. راه حل یکم: کپی برداری (Cloning )در این راه حل به سادگی می توان به جای استفاده از یک سرور لایه واسط که نقش پردازش اطلاعات را بازی می کند، از چندین سرور برای انجام دادن عمل مذکور استفاده نمود. سرورهای لایه واسط عمدتا محل فعالیت کامپوننت ها ( COM) یا وب سرورها هستند. بنابراین اگر بتوان تعداد آن ها را افزایش داد و هر دسته از کاربران را به سمت یکی از این سرورها هدایت نمود، عملکرد پردازشی سرورهای لایه واسط افزایش می یابد و در نتیجه تا حدود زیادی از بروز سرعت در سیستم جلوگیری می شود. ضمن این که اگر هر کدام از این سرورها نیز با مشکل روبه رو شوند، می توان به صورت موقت کاربران آن را به سمت یک سرور دیگر هدایت کرد و از ایجاد وقفه در کار آن ها جلوگیری نمود. ( شکل 1 ) | |||
|
| |||
|
شکل 1 | |||
راه حل دوم: تقسیم بندی(Partitioning )این راه حل به دو روش تقسیم می شود: روش یکم: افزایش سرورهای لایه واسطدر این روش نیز تعداد سرورهای لایه واسط افزایش می یابد. اما بر خلاف راه حل قبل که چند سرور کاملا مشابه، نقش یکسانی را در پردازش درخواست های کاربران ایفا می کردند، این بار هر کدام از سرورهای لایه میانی صرفا عمل خاصی را انجام می دهند که سایر سرورها از انجام دادن آن معافند. مثلا اگر قبلا تنها یک سرور، هم محل فعالیت COM ها بود و هم نقش یک وب سرور را بازی می کرد، اکنون دو وظیفه مذکور را بین دو سرور مختلف ( و شاید با ویژگی ها و توانایی های مختلف ) تقسیم می کنیم. یا به عنوان مثالی دیگر اگر تا کنون تنها یک سرور لایه میانی هم شامل COM هایی بود که با استفاده از اشیای ADO ، دسترسی به سرور پایگاه را فراهم می آوردند و هم شامل COM های دیگری که اعمال محاسباتی پیچیده را انجام می داد، اکنون می توان این دو وظیفه را بین دو سرور مختلف به ترتیب با نام هایی چون Data Access و Business Logic تقسیم کرد. | |||
![]() | |||
|
شکل 2 | |||
روش دوم :تقسیم سرور پایگاه دادهدر این روش، به جای سرورهای لایه میانی، سرور پایگاه داده به دو یا چند سرور تقسیم می شود تا حجم فرایند ( Transaction) های داخلی و پرس و جو های همزمان روی آن سرور کاهش پیدا کند. برای استفاده از این روش، در نظر گرفتن یک نکته اساسی، بسیار مهم است. این نکته، تشخیص اشتراک یا عدم اشتراکی بودن داده ها میان کاربران مختلف است. بدین معنی که یک مدیر پایگاه داده باید بداند که آیا می توان داده ها را به چند دسته تقسیم کرد و هر دسته را روی یک سرور جداگانه برای کاربرد مختلف قرار داد یا نه. به عنوان مثال، اگر شرکتی دارای یک سیستم جامع، شامل سه زیرسیستم انبار، فروش و حسابداری باشد، می تواند جداول دیدها و ارتباطات مربوط به هر یک از این سه زیر سیستم را در یک پایگاه داده روی یک سرور جداگانه قرار دهد ت هر یکی از آن ها در دسترس مسئولان انبار، فروش و حسابداری شرکت قرار گیرد. | |||
![]() | |||
|
شکل 3 | |||
راه حل سوم: Replicationاین راه حل نیز مشابه روش دوم Partitioning است. اما بر خلاف آن روش که سرور بانک اطلاعاتی را به چند سرور حاوی اطلاعات مختلف مورد نیازشان تقسیم می کردیم، در اینجا چند سرور بانک اطلاعاتی با استفاده از سازوکار Replication دقیقا شامل اطلاعات یکسان و همانند می باشند. | |||
| |||
|
شکل 4 |
|
با تجربیاتی که در مدت هفت سال کار با SQL Server کسب کرده ام، ده موردی که در این مقاله ذکر می کنم ، کارهایی هستند که احساس می کنم یک راهبر پایگاه داده (DBA ) نباید هرگز انجام دهد. 1. Rebuild کردن Index در ساعات کاریاین عمل موجب افزایش چشم گیر I/O دیسک می شود. بهتر است این عمل بعدازظهر یا در طول شب ( زمانی که فعالیت کاربران به حداقل می رسد ) انجام شود.لازم به ذکر است که می توانید از سرویس Agent job جهت برنامه ریزی انجام خودکار این عملیات استفاده کنید. 2. Stop کردن Database بدون اطلاع رسانی قبلیچرا؟!... تعداد زیادی کاربر که نمی توانند با برنامه خود کار کنند ... تلفن شما هم تا زمان راه اندازی مجدد Database از زنگ زدن دست بر نمی دارد. 3. نصب Service Pack در ساعات کارینصب سرویس پک، موجب Stop و Start های متعدد پایگاه داده می شود. توصیه می کنم این کار را نیز در ساعات کاری شرکت یا سازمان خود انجام ندهید. چون با این کار کاربران بسیاری را دلخور می کنید. 4. اجرای Query های تستی بر روی سرور اصلیاگر این کار را انجام می دهید پس حتما نمی دانید که این Query ها به چه میزان منابع Server را به خود اختصاص می دهند. 5. Defragment کردن درایوهایی که فایل های دیتابیس روی آن قرار دارندآیا تا به حال این کار را روی کامپیوتر شخصی خود انجام داده اید؟! پس حتما متوجه اید که چرا نباید این کار را روی سرور شرکت یا سازمان خود در ساعات کاری انجام دهید!! 6. بداخلاقی با برنامه نویسانسعی کنید منطق دستورات خود را به آن ها توضیح دهید. بهتر است همیشه صبور باشید و تلاش کنید در حین ارجاع کار به آن ها دانش خود را نیز به آن ها منتقل کنید. نتیجه کار مستقیما به کار گروهی شما بستگی دارد. 7. پشتیبان گیری در ساعات کاریاین موضوع هم به I/O دیسک سرور مربوط می شود. اگر مجبور هستید این کار را در طول روز و در ساعات کاری انجام دهید، پس به گزینه هایی مانند differential Backups یا Transactional log Backups توجه کنید، این نوع پشتیبان گیری ها بسیار سریعتر صورت می پذیرد. 8. نصب Update های نرم افزاری قبل از تست و پشتیبان گیریممکن است نرم افزار های جانبی بر روی سرور پایگاه داده شما نصب شده باشد. نصب نرم افزار و یا نصب Update های نرم افزاری حتما باید با توجه ویژه و تست قبلی صورت پذیرد. تولید کنندگان نرم افزار ممکن است نتوانند صحت عمکرد نرم افزار خود را بر روی سخت افزار و شرایط مختلف بررسی کنند. قبل از اعمال هر تغییری در نرم افزارهای سرور از دیتابیس خود Backup بگیرید. 9. ایمن نکردن SQL Serverغالبا DBA ها فکر می کنند که سرورهایشان از امنیت بالایی برخوردار است!! آیا شما هم این طور فکر می کنید؟! 10. اجرای دستور Drop قبل از اطمینان کاملقبل از اینکه دکمه Enter را فشار دهید خوب فکر کنید، اجرای این دستور با سهل انگاری ممکن است موجب اخراج بلادرنگ شما شود! |
|
دوره های مربوط به طرح آموزشی برنامه نويس ايده آل |
|
|
|
ثبت نام در دوره های برنامه نويس ايده آل آدرس سایت :
|