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

در این بخش بحث خود را بر روی data  caching  ادامه داده و  با نحوه ایجاد cache dependency در بانك اطلاعاتی  Northwind  آشنا خواهیم شد.  

ایجاد cache dependency
در بخش یازدهم  با نحوه پیكربندی یك بانك اطلاعاتی برای حمایت از سیستم آگاه سازی SQL Server آشنا شدیم .پس از فراهم شدن زیرساخت لازم  می توان از آن در برنامه های وب با استفاده از یكی از روش های زیر  استفاده نمود . 

  • data caching از طریق برنامه :  برای data caching از طریق كد لازم است كه یك شی جدید   SqlCacheDependency ایجاد و آن را با استفاده از متد  Cache.Insert  به cache اضافه نمود ( مشابه file dependency ) .
    در  constructor  شی  SqlCacheDependency  می بایست دو رشته را مشخص كرد . اولین رشته نام بانك اطلاعاتی ( توسط عنصر <add> در بخش  <sqlCacheDependency> فایل web.config مشخص شده است )  و دومین رشته ، نام جدولی است كه قصد مانیتورینگ تغییرات آن را داریم.

در اولین مرحله یك وابستگی برای جدول Employees  بانك اطلاعاتی Northwind ایجاد و در مرحله بعد آیتم مورد نظر را به cache اضافه می نمائیم . حضور آیتم فوق مشروط به عدم بروز تغییرات در جدول Employees   است . در صورت بروز تغییرات در جدول فوق ، اعتبار داده cache شده به اتمام رسیده  و از cache خارج می گردد .
كد زیر نحوه انجام این كار را نشان می دهد .

Dim empDependency As New SqlCacheDependency("Northwind", "Employees")
Cache.Insert("Employees", dsEmployees, empDependency)

  •  output caching : بدین منظور لازم است كه خصلت SqlCacheDependency به دایركتیو OutputCache معرفی شود . مقدار خصلت فوق شامل نام بانك اطلاعاتی وابسته و جدول مورد نظر است كه توسط یك colon از یكدیگر جدا شده اند .
    كد زیر نحوه انجام عملیات فوق را نشان می دهد .

     <%@ OutputCache Duration="600" SqlDependency="Northwind:Employees" VaryByParam="none" %>

  • یك كنترل منبع داده: از روش فوق می توان به همراه كنترل های SqlDataSource و ObjectDataSource  استفاده كرد . كد زیر نحوه انجام این كار را نشان می دهد .
     

     <asp:SqlDataSource EnableCaching="True" SqlCacheDependency="Northwind:Employees" ... />

بررسی‌ یك مثال كاربردی  
در این مثال پس از فعال كردن سیستم آگاه سازی caching بر روی جدول Employees  بانك اطلاعاتی  Northwind  ، یك داده فرضی در cache ذخیره می گردد . در صورت بروز هر گونه تغییر در جدول Employees ، اعتبار داده cache شده با توجه به مدت زمان تعریف شده توسط خصلت pollTime عنصر  <sqlCacheDepency> موجود در  فایل web.config به اتمام خواهد رسید . 
بدین منظور عملیات مورد نیاز جهت پیاده سازی را در دو فاز مختلف دنبال می نمائیم .

فاز اول : ایجاد زیرساخت لازم برای استفاده از سیستم آگاه سازی caching
در این مثال برای فعال كردن سیستم آگاه سازی caching بر روی بانك اطلاعاتی Northwind و ریجستر كردن جدول Employees به منظور حمایت از سیستم آگاه سازی caching توسط برنامه خط دستوری aspnet_regsql.exe از سوئیچ C - استفاده شده است تا در مقابل مشخص كردن نام كاربر ، رمز عبور و نام سرویس دهنده از یك Connection string استفاده گردد .

مرحله اول
: فعال كردن سیستم آگاه سازی caching بر روی بانك اطلاعاتی  Northwind به كمك برنامه خط دستوری aspnet_regsql.exe

  C:\WINDOWS\Microsoft. NET\Framework\V2.0.50727>aspnet_regsql -ed
    -C "Data Source=SRCOSERVER\SQLEXPRESS;Initial Catalog=NORTHWND;Integrated Security=True"


  Enabling the database for SQL cache dependency.
 ....
 Finished.

پس از اجرای دستور فوق ، یك جدول جدید با نام SqlCacheTablesForChangeNotification به بانك اطلاعاتی Northwind اضافه می گردد. جدول فوق دارای سه ستون   notificationCreated ، tableName و changeId است و  از آن برای پیگیری انجام تغییرات استفاده می گردد .
شكل 1 ماحصل تغییرات بر روی بانك اطلاعاتی  Northwind را پس از اجرای دستور فوق نشان می دهد .

ماحصل تغییرات بر روی بانك اطلاعاتی  NORTHWND پس از اجرای دستور aspnet_reqsql
شكل 1 : ماحصل تغییرات بر روی بانك اطلاعاتی  Northwind  پس از اجرای دستور aspnet_reqsql

مرحله دوم : ریجستر كردن جدول Employees كه نیازمند حمایت از سیستم آگاه سازی caching است .

  C:\WINDOWS\Microsoft. NET\Framework\V2.0.50727>aspnet_regsql -et
    -C "Data Source=SRCOSERVER\SQLEXPRESS;Initial Catalog=NORTHWND;Integrated Security=True"
    -t Employees


  Enabling the table  for SQL cache dependency.
 .
 Finished.

پس از اجرای دستور فوق ، trigger آگاه سازی caching و stored procedure مورد نیاز  برای جدول Employees ایجاد می گردد . ماحصل تغییرات ایجاد شده بر روی  جدول فوق پس از اجرای دستور aspnet_regsql.exe در شكل های 1 و 2 نشان داده شده است . 

 ایجاد trigger بر روی  جدول Employees  پس از اجرای دستور aspnet_reqsql
شكل 2  : ایجاد trigger بر روی  جدول Employees  پس از اجرای دستور aspnet_reqsql

ایجاد stored procedure  مورد نیاز در ارتباط با جدول Employees  پس از اجرای دستور aspnet_reqsql

شكل 3  : ایجاد stored procedure  مورد نیاز در ارتباط با جدول Employees  پس از اجرای دستور aspnet_reqsql

مرحله سوم :  فعال كردن polling از طریق فایل web.config

فعال كردن polling از طریق فایل web.config

<configuration>
   <connectionStrings>
       <add name="NORTHWNDConnectionString"
            connectionString="Data Source=SRCOSERVER\SQLEXPRESS;
            Initial Catalog=NORTHWND;Integrated Security=True"/>
   </connectionStrings>
 <system.web>
<caching>
  <sqlCacheDependency enabled="true" pollTime="15000" >
    <databases>
         <add name="Northwind" connectionStringName="NORTHWNDConnectionString" />
   </databases>
</sqlCacheDependency>

</caching>
...
</system.web>
</configuration>

فاز دوم : استفاده از زیرساخت ایجاد شده سیستم آگاه سازی caching در برنامه  
در این برنامه از دو button به نام " تغییر جدول " و " بررسی آیتم cache شده " استفاده شده است . با استفاده از دكمه "بررسی آیتم cache شده " ، حضور آیتم مورد نظر در cache بررسی و پیام مناسب در خروجی نمایش داده می شود . در صورت كلیك بر روی دكمه "تغییر جدول " ،  یكی از ركورهای موجود در جدول Employees   بانك اطلاعاتی Northwind تغییر یافته و بهانه خارج شدن داده cache شده از حافظه ایجاد می گردد .
كد برنامه فوق در جدول زیر نشان داده شده است .

 ایجاد cache dependency در بانك اطلاعاتی NORTHWND

<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" %>  
<%
@ import Namespace="system.Data" %>
<%
@ import Namespace="system.Data.SqlClient" %>
<%
@ Import Namespace="System.Web.Configuration" %>
<Script runat="server">
 Sub
Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
If Not Me.IsPostBack Then
    lblInfo.Text &= "ایجاد آیتم وابسته<br />"
     Cache.Remove("CachedItem")
  
'  Employees  ایجاد یك وابستگی برای جدول
    
Dim dependency As New SqlCacheDependency("Northwind", "Employees")
    
Dim dt As DataTable = GetEmployeeTable()
     lblInfo.Text &=
"اضافه كردن آیتم مورد نظر به cache<br />"
     Cache.Insert("CachedItem", dt, dependency)
 
End If
 End
Sub
  ' =================================================================
Private connectionString As String =_
         
WebConfigurationManager.ConnectionStrings(
"NORTHWNDConnectionString").ConnectionString
 Function GetEmployeeTable() As DataTable
  Dim con As New SqlConnection(connectionString)
  Dim sql As String = "SELECT * FROM Employees"
 
Dim da As New SqlDataAdapter(sql, con)
  Dim ds As New DataSet()
  da.Fill(ds,
"Employees")
  Return ds.Tables(0)
End Function
  ' ==================================================================
 Sub cmdGetItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
cmdGetItem.Click
 If Cache("CachedItem") Is Nothing Then
   lblInfo.Text &= "آیتم مورد نظر در cache موجود نمی باشد<br />"
 
Else
  lblInfo.Text &= "آیتم مورد نظر همچنان در cache موجود است<br />"
 
End If
End Sub
  ' =================================================================
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 Employees SET LastName='sakha ravesh' WHERE LastName='srco'"
 
Dim cmd As New SqlCommand(sql, con)
 Try
   con.Open()
   cmd.ExecuteNonQuery()
 Finally
 con.Close()
 End Try
 
lblInfo.Text &= "بهنگام سازی بانك به تمام رسید ، تا اتمام زمان polling منتظر بمانید<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>

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

ایجاد cache dependency در  بانك اطلاعاتی
شكل 4 : ایجاد cache dependency در   SQL Server 2000

توضیحات :

  • در زمان فراخوانی برنامه فوق از طریق روتین Page_laod عملیات زیر انجام می شود :
    -  ایجاد یك شی وابسته برای جدول  Employees   بانك اطلاعاتی Northwind
    - درج dataset حاوی ركوردهای بازیابی شده از جدول  Employees  در cache
    - نمایش پیام  های مناسب در خروجی به كمك كنترل سرویس دهنده label ( با نام   lblInfo  ) 

  • روتین cmdGetItem_Click ، وجود آیتم مورد نظر را در Cache بررسی و در صورتی كه این آیتم در cache موجود نباشد یك پیام خاص از طریق كنترل سرویس دهنده label در خروجی نمایش داده می شود . در صورت وجود آیتم مورد نظر در cache ، مقدار آن از cache بازیابی و یك پیام خاص از طریق كنترل سرویس دهنده label در خروجی نمایش داده می شود .

  • روتین cmdModify_Click ، مسئولیت ایجاد تغییر در  جدول Employees   بانك اطلاعاتی Northwind  را برعهده دارد . 

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





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


شنبه 18 شهریور 1396 10:07 ق.ظ
I'm not sure where you are getting your information, but good topic.
I needs to spend some time learning more or understanding more.
Thanks for magnificent info I was looking for this information for my mission.
پنجشنبه 16 شهریور 1396 02:27 ب.ظ
fantastic issues altogether, you simply gained a
logo new reader. What could you recommend in regards to
your post that you made a few days in the past?

Any certain?
چهارشنبه 1 شهریور 1396 12:10 ب.ظ
Hey there! This is my first visit to your blog! We are a team of
volunteers and starting a new project in a community in the same niche.
Your blog provided us useful information to work on. You have done
a marvellous job!
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

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

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








جستجو

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