تبلیغات
آموزشASP.NET - افزایش كارآئی برنامه های وب در ASP. NET 2.0 (بخش پایانی)
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 

در این بخش بحث خود را بر روی data  caching  ادامه داده و با سیستم آگاه سازی caching در SQL Server 2005  آشنا خواهیم شد.

سیستم آگاه سازی caching  در SQL Server 2000 و  SQL Server 2005
سیستم آگاه سازی caching در  SQL Server 2005  وضعیت بمراتب بهتری را نسبت به SQL Server 2000 پیدا كرده است . چراكه زیرساخت سیستم فوق از طریق یك سیستم ارسال و دریافت پیام موسوم به Service Broker  در بانك اطلاعاتی تعبیه شده است .
Service Broker  یكی از ویژگی های جدید ارائه شده در SQL Server 2005  است . سیستم فوق ، در واقع یك فریمورك ارسال و دریافت پیام توزیع شده را ارائه  می نماید . با استفاده از ویژگی فوق می توان قابلیت های متعددی را به بانك اطلاعاتی اضافه نمود . Service Broker از سیستم ذخیره سازی صف ( FIFO ) استفاده می نماید و یك لینك ارتباطی بین ارسال كننده پیام و دریافت كننده پیام ایجاد می نماید . سیستم فوق مدیریت صف ها را برعهده داشته و شامل اشیاء بانك اطلاعاتی نظیر جداول ، view و  stored procedure می باشد .
پیاده كنندگان  با استفاده از دستور  CREATE EVENT NOTIFICATION می توانند به SQL Server 2005  آموزش دهند كه در صورت بروز رویدادهائی خاص اطلاعات لازم را برای سیستم آگاه سازی caching ارسال نماید .

ASP. NET از یك زاویه دیگر به این موضوع نگاه می كند . پس از مشخص شدن یك query ، فناوری ASP. NET بطور اتوماتیك به SQL Server 2005  اعلام می نماید كه اطلاعات آگاه سازی را برای هر نوع عملیاتی كه می تواند بر روی نتیجه query تاثیرگذار باشد ارسال نماید . هر مرتبه كه یك عملیات خاص انجام شود ، SQL Server مشخص می نماید كه آیا این عملیات می تواند یك دستور ریجستر شده را تحت تاثیر قرار دهد و یا خیر ؟ در صورتی كه عملیات انجام شده بتواند بر روی یك دستور ریجستر شده تاثیرگذار باشد ، SQL Server یك پیام آگاه سازی را ارسال و فرآیند آگاه سازی را متوقف می نماید .
سیستم آگاه سازی Caching در SQL Server 2005  نسبت به SQL Server 2000  دارای مزایای متعددی است :

  • آگاه سازی بر اساس جزئیات بیشتری از اطلاعات  . در مقابل غیرمعتبر سازی شی cache شده در زمان بروز تغییرات در یك جدول ، SQL Server 2005 صرفا" یك شی را زمانی غیرمعتبر می كند كه عملیاتی نظیر درج ، بهنگام سازی و حذف بر روی سطر مورد نظر انجام شده باشد .

  • عدم ضرورت انجام عملیاتی خاص برای پیكربندی و آماده سازی سیستم آگاه سازی . برای بهره برداری از سیستم آگاه سازی caching  در SQL Server 2005 ضرورتی به اجرای برنامه خط دستوری aspnet_regsql و یا ذخیره تنظیمات pooling در فایل web.config  وجود ندارد . 

 سیستم آگاه سازی فعالیت خود را بر اساس یك  SELECT query و یا stored procedure آغاز  می كند . در چنین مواردی ، استفاده از SELECT query محدودیت های مختص به خود را داشته و از قوانین زیر تبعیت می نماید :

  •  برای اجرای query بر روی یك جدول می بایست نام آن به صورت   Owner].table ] مشخص گردد . به عنوان نمونه  dbo.Employees   ( صرفا" نمی بایست نام جدول   Employees آورده شود . )

  • در query مورد نظر نمی بایست از توابعی نظیر  Conut  ، MAX ، MIN و یا AVERAGE استفاده گردد .

  • نمی توان با استفاده از wildcard تمامی ستون ها را انتخاب نمود ( نظیر  SELECT * FROM Employees  ) . در مقابل ، می بایست نام هر ستون دقیقا" مشخص گردد تا SQL Server بتواند تغییرات آنها را پیگیری و آندسته از ستون هائی را كه در نتیجه query تاثیرگذار هستند تشخیص دهد .

شكل صحیح استفاده از دستور Select  به صورت زیر است .

SELECT EmployeeID, FirstName, LastName, City FROM dbo.Employees

موارد فوق مهمترین قوانین موجود در این رابطه می باشند و  مجموعه كامل تری را می توان بر روی msdn مشاهده نمود . در صورت عدم رعایت یكی از قوانین اشاره شده با یك پیام خطاء مواجه نخواهیم شد و در عمل سیستم آگاه سازی caching وظایف خود را به درستی انجام نخواهد داد . توجه داشته باشید كه پیام آگاه سازی بلافاصله پس از ریجستركردن دستور ، ارسال و آیتم cache شده غیرمعتبر می گردد .

 مقداردهی اولیه سرویس caching
قبل از این كه بتوان از سیستم آگاه سازی caching در SQL Server 2005  استفاده كرد، می بایست عملیات زیر را انجام داد :

  • فعال كردن SQL Server Service Broker  . در صورتی كه Service Broker برای بانك اطلاعاتی مورد نظر فعال نشده باشد در زمان اجرای یك برنامه وب كه قصد استفاده از  سیستم آگاه سازی caching در SQL Server 2005  را دارد ‌، با پیام خطاء زیر مواجه خواهیم شد :

    Server Error in '/WebSite4' Application.
    The SQL Server Service Broker for the current database is not enabled, and as a result query notifications are not supported.  Please enable the Service Broker for this database if you wish to use notifications.

    برای حل مشكل فوق كافی است كه  Service Broker را برای بانك اطلاعاتی مورد نظر فعال نمود . بدین منظور می توان از دستور زیر در SQL Server  استفاده نمود  :

    ALTER DATABASE [Northwnd] SET  ENABLE_BROKER ;
    GO

    پس از اجرای دستور فوق این احتمال وجود خواهد داشت كه مجددا" با یك پیام خطاء دیگر مواجه شویم :

    Msg 9776, Level 16, State 1, Line 2

    Cannot enable the Service Broker in database "Northwnd" because the Service Broker
    GUID in the database (B4201B09-6358-4C65-8457-D6F50004A4D9) does not match the one
     in sys.databases (2527A339-BFB3-45C6-978D-412C4FA557CB).

    Msg 5069, Level 16, State 1, Line 2

    ALTER DATABASE statement failed.

    علت بروز این خطاء بدین دلیل است كه عملیاتی بر روی بانك اطلاعاتی ( به عنوان نمونه Northwind  ) بدون دنبال نمودن صحیح فرآیندهای آن انجام شده است . به عنوان مثال جایگزینی فایل های mdf .  و  ldf . از بانك های دیگر . توجه داشته باشید كه می بایست  همواره از رویه ای صحیح برای move و copy بانك اطلاعاتی استفاده كرد ( استفاده از  attach/detach و یا backup/restore ) .
    با توجه به موارد فوق نمی توان broker موجود را بر روی بانك اطلاعاتی Northwind فعال نمود و می بایست یك نمونه جدید را با استفاده از دستور زیر ایجاد نمود :

    ALTER DATABASE [Northwnd] SET NEW_BROKER ;
    GO

    برای اطمینان از فعال شدن service broker می توان از query زیر استفاده كرد. در صورتی كه مقدار یك برگرداند شود ، این سرویس بر روی بانك اطلاعاتی Northwind فعال شده است .

    select is_broker_enabled from sys.databases where name = 'Northwnd'

    فراخوانی متد  SqlDependency.Start  . متد فوق مسئولیت مقداردهی اولیه سرویس listening بر روی‌ سرویس دهنده وب را برعهده دارد .

    Dim connectionString As String = _
    WebConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").ConnectionString
    SqlDependency.Start(connectionString)

    فراخوانی متد فوق صرفا" یك مرتبه در مدت زمان حیات برنامه وب انجام می شود و بهتر است كه در متد  Application_Start فایل global.asax قرار داده شود تا زمینه فعال شدن اتوماتیك آن فراهم گردد . همچنین می توان از متد stop برای توقف listener استفاده نمود .

ایجاد cache dependency
برای استفاده از cache dependency در SQL Server 2005 به یك گرامر متفاوت نیاز است  كه صرفا" شامل مشخص كردن نام جدول و بانك اطلاعاتی نمی باشد . در مقابل ، SQL Server می بایست از دستور واقعی آگاهی یافته و نسبت به آن شناخت داشته باشد .
در صورت فعال كردن caching از طریق كد ، می بایست با استفاده از constructor كه یك شی SqlCommand را به عنوان پارامتر دریافت می نماید اقدام به ایجاد SqlCacheDependency كرد .
كد زیر نحوه انجام این كار را نشان می دهد .

Dim con As New SqlConnection(connectionString)
Dim query As String ="SELECT EmployeeID, FirstName, LastName, City FROM dbo.Employees"
Dim cmd As New SqlCommand(query, con)
Dim adapter As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
adapter.Fill(ds, "Employees")
Dim empDependency As New SqlCacheDependency(cmd)
Cache.Insert("Employees", ds, empDependency)

در صورت استفاده از دایركتیو  OutputCache و یا یك كنترل منبع داده ، ASP. NET مسئولیت ریجستر كردن را بر عهده می گیرد و پیاده كنندگان می بایست صرفا" مقدار CommandNotification را مشخص نمایند .

 <%@ OutputCache Duration="600" SqlDependency="CommandNotification" VaryByParam="none" %>

بررسی‌ یك مثال كاربردی  
 كد زیر نحوه ایجاد cache dependency در SQL Server 2005 و بر روی بانك اطلاعاتی Northwind را نشان می دهد . پس از فعال شدن برنامه فوق و از طریق روتین page_load ، یك وابستگی برای جدول customers ایجاد ( ماحصل اجرای دستور Select ) و ماحصل آن در cache ذخیره می گردد . در صورت بروز هرگونه تغییر در فیلد ContactName جدول customers ( این كار توسط روتین  cmdModify_Click انجام می شود )  اعتبار داده cache شده بطور اتوماتیك و از طریق سیستم آگاه سازی caching در SQL Server 2005  به اتمام می رسد .

 ایجاد cache dependency در SQL Server 2005  

<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" Debug="true"%>
<%
@ import Namespace="system.Data" %>
<%
@ import Namespace="system.Data.SqlClient" %>
<%
@ Import Namespace="System.Web.Configuration" %>
'===================================================================
 <script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If Not Me.IsPostBack Then
   
SqlDependency.Start(connectionString)
    lblInfo.Text &=
"ایجاد آیتم وابسته<br />"
    Cache.Remove("Customers")
    Dim dt As DataTable = GetTable()
    lblInfo.Text &=
"اضافه كردن آیتم مورد نظر به cache<br />"
 
  Cache.Insert("Customers", dt, dependency)
 End If
End Sub
'===================================================================
Private dependency As
SqlCacheDependency
Private connectionString As String = _
WebConfigurationManager.ConnectionStrings(
"NORTHWNDConnectionString").ConnectionString
Private Function GetTable() As DataTable
  Dim con As New SqlConnection(connectionString)
  Dim sql As String = "SELECT ContactName FROM dbo.Customers"
  Dim da As New SqlDataAdapter(sql, con)
  ' ایجاد یك وابستگی برای جدول  
  dependency = New SqlCacheDependency(da.SelectCommand)
  Dim ds As New DataSet()
  da.Fill(ds,
"Customers")
  Return ds.Tables(0)
End Function
'===================================================================
Protected Sub cmdGetItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
cmdGetItem.Click
 If Cache("Customers") Is Nothing Then
   lblInfo.Text &= "آیتم مورد نظر در cache موجود نمی باشد<br />"
 
Else
  lblInfo.Text &= "آیتم مورد نظر همچنان در cache موجود است<br />"
 
End If
End Sub
'===================================================================
Protected Sub cmdModify_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
cmdModify.Click
Dim con As New SqlConnection(connectionString)
Dim sql As String = "UPDATE dbo.Customers SET ContactName='Test Contact_Name' WHERE CustomerID='WOLZA'"
Dim cmd As New SqlCommand(sql, con)
Try
 
con.Open()
  cmd.ExecuteNonQuery()
Finally
con.Close()
End Try
lblInfo.Text &= " بهنگام سازی به اتمام رسید <br />"
End Sub
'===================================================================
</script>

<html xmlns="http://www.w3.org/1999/xhtml" dir="rtl" >
  <
head id="Head1" runat="server">
 
   <title>Untitled Page</title>
  </
head>
  <
body style="font-family: Tahoma">
    
<form id="form1" runat="server">
      
<div>
          
<asp:Button ID="cmdModify" runat="server" Height="24px"  Text="تغییر جدول"
                             
Width="103px" Font-Names="Tahoma" />
          
<asp:Button ID="cmdGetItem" runat="server" Height="24px"
                              Text="بررسی آیتم cache شده"
                             
Width="180px" Font-Names="Tahoma" /><br /><br />
          
<asp:Label ID="lblInfo" runat="server" BackColor="LightYellow" BorderStyle="Groove"
                           
BorderWidth="2px" Font-Names="Tahoma" Font-Size="X-Small" Height="192px"
                           
Width="536px"></asp:Label
>
       </div>
   
</form>
   </
body>
</
html>

خروجی مثال فوق در شكل 1 نشان داده شده است .

 ایجاد cache dependency در   SQL Server 2005
شكل 1 : ایجاد cache dependency در   SQL Server 2005

مشكلات احتمالی در خصوص سیستم آگاه سازی caching 
در صورتی كه هرگز اعتبار آیتم cache شده به پایان نرسد ، سرویس polling در ASP. NET یك پیام غیرمعتبرسازی را دریافت نمی  نماید . این مشكل می تواند دلایل متعددی داشته باشد . فعال نشدن CLR  برای SQL Server یكی از متداولترین مشكلات موجود در این رابطه است .
رویه ای كه پیام های آگاه سازی را ارسال می نماید یك رویه دات نت است و به حمایت آن نیاز دارد . برای فعال كردن CLR ، می توان از پنجره خط دستور ویژوال استودیو دات نت 2005 استفاده كرد و دستور SqlCmd.exe را تایپ كرد .
كد زیر نحوه فعال كردن دستور فوق را برای SQL Server 2005 Express Edition  نشان می دهد :

  SqlCmd -S localhost\SQLEXPRESS

در صورت استفاده از نسخه كامل SQL Server 2005  ، لازم نیست از  instance name استفاده شود ( استفاده از localhost در مقابل  localhost\SQLEXPRESS ) .
همچنین ممكن است با توجه به محل نصب بانك اطلاعاتی لازم باشد كه نام سرویس دهنده تغییر یابد . در دستور قبلی ، فرض بر این است كه بانك اطلاعاتی بر روی كامپیوتر جاری نصب شده است . 
برنامه كاربردی SqlCmd.exe یك پرامپت دستوری را ارائه می نماید كه می توان از آن به منظور درج دستورات SQL استفاده كرد . برای فعال كردن CLR از دستورات زیر استفاده می گردد .

EXEC sp_configure 'show advanced options', '1'
GO
RECONFIGURE
GO
EXEC sp_configure 'clr enabled', 1
GO
RECONFIGURE

در ادامه و با تایپ دستور quit می توان از برنامه SqlCmd.exe خارج شد.
در صورتی كه اعتبار آیتم cache شده بلافاصله به اتمام برسد ، این احتمال وجود دارد كه از قوانین اشاره شده در ارتباط با نوشتن query تبعیت نشده باشد .

سخن آخر
طراحان و پیاده كنندگان برنامه های وب با بكارگیری مجموعه ای از ترفندها ، فناوری ها و رعایت برخی نكات كلیدی می توانند برنامه هائی را با كارآئی مطلوب طراحی و پیاده سازی نمایند . با توجه به جایگاه مهم لایه داده در برنامه های وب ، می بایست  بر روی لایه فوق با دقت بیشتری متمركز و اقدامات لازم را در  زمان طراحی و پیاده سازی انجام داد .
پیاده كنندگان برنامه های وب با نوشتن چندین خط كد اضافه می توانند قابلیت رشد و كارآئی برنامه های خود  را بطرز چشمگیری افزایش دهند . 
استفاده از ابزارهای تست و پروفایلینگ حداقل شرایط لازم به منظور بررسی قابلیت های یك برنامه وب كارآ را فراهم می نماید تا بتوان قبل از عملیاتی شدن مشكلات و  گره های حساس تاثیرگذار بر روی‌ كارآئی برنامه را شناسائی و در جهت رفع آنها تلاش كرد .





نوع مطلب :
برچسب ها :
لینک های مرتبط :


سه شنبه 14 شهریور 1396 10:02 ق.ظ
Hello! Someone in my Facebook group shared this site with us so I came to look it over.
I'm definitely loving the information. I'm book-marking and will be tweeting this to my followers!
Great blog and outstanding design and style.
چهارشنبه 1 شهریور 1396 01:28 ب.ظ
We are a bunch of volunteers and opening a brand new scheme in our community.

Your website offered us with valuable info to work on. You've performed an impressive job
and our entire group will probably be thankful to you.
پنجشنبه 24 فروردین 1396 10:01 ب.ظ
Someone necessarily lend a hand to make critically articles I would state.
This is the very first time I frequented your website page and so far?
I amazed with the research you made to create this particular publish amazing.
Great task!
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

سلام من آرش کاکاوند دانشجوی رشته کامپیوتر هستم و ورود شما رابه دنیای aspخوش امدمیگم.حتما نظر بدین تا من کارم رو بهتر ادامه بدم

مدیر وبلاگ : ارش کاکاوند
مطالب اخیر
نویسندگان
صفحات جانبی
نظرسنجی
شما کدام یک از برنامه های زیر را برای طراحی وب انتخاب می کنید؟








جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :