افزايش كارآئی برنامه های وب در ASP.NET 2.0 New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 سه شنبه  28  دی  1395  2017  Jan.  17   Tuesday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش يازدهم)

 مديريت وب

8174

0

0

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

افزايش كارآيی برنامه های وب در ASP.NET 2.0

افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش يازدهم)
آنچه تاكنون گفته شده است :

  • بخش های اول  و دوم  : اشاره به مجموعه ای از نكات كه رعايت آنها در زمان طراحی می تواند زمينه پياده سازی يك برنامه وب كارآ را فراهم نمايد .
  • بخش سوم  : معرفی برخی ابزارها برای تست برنامه های وب
  • بخش چهارم : مفاهيم اوليه caching ، روش های caching در ASP.NET ، نحوه استفاده از output caching
  • بخش پنجم :  Caching و Query string
  • بخش ششم : Custom Caching Control
  • بخش هفتم : caching داده و نحوه استفاده از شی cache
  • بخش هشتم : بررسی يك مثال جهت ايجاد caching با قابليت مشاهده چندين view از داده
  • بخش نهم : كنترل های منبع داده و caching
  • بخش دهم :  بررسی caching با وابستگی (Dependency)

در اين بخش بحث خود را بر روی data  caching  ادامه داده و به بررسی SQL Server cache dependency  خواهيم پرداخت .
SQL Server cache dependency  ، يكی از نوع های پيچيده caching وابسته است كه در  ASP. NET 2.0 ارائه شده است . با استفاده از ويژگی فوق بطور اتوماتيك يك  شی داده cache شده ( نظير يك DataSet )  پس از تغيير داده مرتبط در بانك اطلاعاتی ، غير معتبر می گردد . از پتانسيل فوق در در SQL Server 2005  ( شامل  Express Edition ) و   SQL Server 2000   حمايت می گردد .

سيستم آگاه سازی caching در SQL Server 2000 و SQL Server 7
ASP. NET از مدل pooling برای  SQL Server 2000  و  SQL Server 7  استفاده می نمايد . نسخه های قديمی تر SQL Server  و ساير بانك های اطلاعاتی از ويژگی فوق حمايت نمی نمايند .
در اين روش ، ASP.NET يك ارتباط باز با بانك اطلاعاتی را نگاه داشته و به صورت دوره ای بروز هر گونه تغيير در يك جدول را بررسی می نمايد . نگهداری‌ يك اتصال باز  به منزله بروز يك فاجعه در سطح بانك اطلاعاتی نمی باشد  و صرفا" كار اضافه تری در سطح بانك اطلاعاتی ايجاد می گردد كه انجام آن فرآيند مختص به خود را دارد.
به منظور بهره گيری بيشتر و موثر از مدل pooling ، می بايست فرآيند pooling سريع تر و سبك تر از query اوليه ای باشد كه مسئوليت استخراج داده از بانك اطلاعاتی را برعهده دارد .
هدف سيستم آگاه سازی caching ، تشخيص به موقع انجام تغييرات در جداول يك بانك اطلاعاتی و غيرمعتبر كردن داده cache شده مرتبط با هر يك از جداول است .
برای فعال كردن سيستم آگاه سازی در SQL Server 2000 می بايست مراحل زير را دنبال نمود :‌

  • مرحله اول : مشخص كردن جداولی از بانك اطلاعاتی كه نيازمند حمايت از سيستم آگاه سازی caching می باشند .

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

  • مرحله سوم : ريجستر كردن جداولی كه نيازمند حمايت از سيستم آگاه سازی caching می باشد . بدين منظور مجددا"  از برنامه خط دستوری aspnet_regsql.exe و اين مرتبه در سطح جدول استفاده می گردد .

  • مرحله چهارم : فعال كردن polling از طريق فايل web.config

پس از انجام مراحل چهارگانه فوق می توان اشياء  SqlCacheDependency  را ايجاد نمود . 
در ادامه هر يك از مراحل فوق را با جزئيات بيشتری بررسی می نمائيم .

مرحله اول : مشخص كردن جداولی از بانك اطلاعاتی كه نيازمند حمايت از سيستم آگاه سازی caching می باشند .
بدين منظور لازم است كه در اولين اقدام بانك اطلاعاتی و جداولی كه لازم است بر روی آنها سيستم آگاه سازی caching فعال شود ، شناسائی و انتخاب گردند . انتخاب بانك طلاعاتی و جداول مربوطه به رفتار يك برنامه و انتظارات از آن بستگی دارد كه می بايست توسط طراحان و پياده كنندگان برنامه های وب به دقت انجام شود  .

مرحله دوم : فعال كردن سيستم آگاه سازی caching بر روی بانك اطلاعاتی مورد نظر به كمك برنامه خط دستوری aspnet_regsql.exe
قبل از اين كه بتوان از سيستم غيرمعتبر سازی Cache در SQL Server استفاده نمود ، می بايست سيستم آگاه سازی caching را برای بانك اطلاعاتی مورد نظر فعال كرد . به منظور انجام اين كار از برنامه خط دستوری  aspnet_regsql.exe  كه در مسير  [ c:\[WinDir]\Microsoft.NET\Framework\[Version   موجود است ، استفاده می گردد .  برنامه فوق يك ابزار مديريتی برای فعال كردن و غيرفعال كردن ويژگی های ASP.NET بر روی يك سرويس دهنده SQL است .  اين برنامه دارای سوئيچ های متعددی‌ است . ed ، يكی از سوئيچ های اين دستور است كه از آن برای فعال كردن  SQL cache dependency بر روی يك بانك اطلاعاتی استفاده می گردد . همچنين ،  از سوئيچ E به منظور مشخص كردن روش تائيد بر اساس يك اتصال ايمن و  از سوئيچ d برای مشخص كردن بانك اطلاعاتی كه قرار است سيستم آگاه سازی caching بر روی آن فعال گردد ، استفاده می شود . 
دستور زير نحوه استفاده از برنامه  aspnet_regsql.exe به منظور فعال كردن سيستم آگاه سازی caching بر روی بانك اطلاعاتی AspNet استاندارد موجود بر روی سرويس دهنده جاری را نشان می دهد .

  aspnet_regsql -ed -E -d AspNet

پس از انجام عمليات فوق ، يك جدول جديد با نام SqlCacheTablesForChangeNotification به بانك اطلاعاتی با نام AspNet اضافه می گردد. جدول فوق دارای سه ستون   notificationCreated ، tableName و changeId است و  از آن برای پيگيری انجام تغييرات استفاده می گردد .
سرويس polling در ASP.NET  با جدول فوق تعامل برقرار و از آن به منظور ارائه خدمات خود استفاده می نمايد . سيستم فوق و نحوه پياده سازی آن مزايای متعددی را به دنبال دارد :  

  • با توجه به اين كه جدول آگاه سازی تغييرات بمراتب كوچكتر از جدول حاوی داده cache شده است ، سرعت اجرای query بر روی آن سريعتر خواهد بود .

  •  با توجه به عدم استفاده از جدول آگاه سازی برای فعاليت های ديگر ، در زمان خواندن ركوردهای آن با مسائلی همچون قفل كردن ركوردها و همزمانی مواجه نخواهيم شد  .

  • باتوجه به اين كه چندين جدول در يك بانك اطلاعاتی مشابه از يك جدول آگاه سازی مشابه استفاده می نمايند ، می توان چندين جدول را بدون افزايش هزينه های بالاسری pooling در يك لحظه مانيتور  كرد.

مرحله سوم : ريجستر كردن جداولی كه نيازمند حمايت از سيستم آگاه سازی caching می باشد.
پس از ايجاد جدول SqlCacheTablesForChangeNotification  ، می بايست برای هر جدول موجود در بانك اطلاعاتی سيستم آگاه سازی caching فعال گردد . بدين منظور می توان از  SqlCacheRegisterTableStoredProcedure و يا برنامه كاربردی  aspnet_regsql   به همراه پارامتر های  et - ( فعال كردن سيستم آگاه سازی بر روی يك جدول ) و  t - ( نام جدول ) استفاده نمود .
دستور زير نحوه فعال كردن سيستم آگاه سازی را  برای جدول Employees  بانك اطلاعاتی Northwind نشان می دهد .

  aspnet_regsql -et -E -d Northwind -t Employees

پس از اجرای دستور فوق ، trigger آگاه سازی caching برای جدول Employees ايجاد می گردد .

مرحله چهارم : فعال كردن polling از طريق فايل web.config
در اين مرحله به  ASP.NET  اعلام می گردد كه از  polling بانك اطلاعاتی استفاده نمايد .
برای فعال كردن سرويس polling از عنصر  <sqlCacheDepency>  در فايل web.config استفاده می گردد . بدين منظور  لازم است كه خصلت enabled مقدار true را داشته باشد تا ويژگی فوق فعال گردد . همچنين توسط خصلت pollTime مدت زمان مورد نظر ( بر حسب ميلی ثانيه ) بين هر poll مشخص می گردد . هر اندازه مقدار خصلت فوق بيشتر باشد ، تغييرات با تاخير بيشتری تشخيص داده می شوند. در بخش <sqlCacheDepency> فايل web.config و به كمك  <databases> بانك و يا بانك های اطلاعاتی مشمول سيستم آگاه سازی caching معرفی می گردند .
كد زير نحوه فعال كردن  polling از طريق فايل web.config  برای بانك اطلاعاتی Northwind را نشان می دهد . 

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

<configuration>
  <connectionStrings>
     <add name="Northwind" connectionString=
            "Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI"/>
     </connectionStrings>
 <system.web>
<caching>
  <sqlCacheDependency enabled="true" pollTime="15000" >
    <databases>
         <add name="Northwind" connectionStringName="Northwind" />
   </databases>
</sqlCacheDependency>

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

نحوه كار سيستم آگاه سازی caching
پس  از انجام مراحل اشاره شده بستر لازم برای  استفاده از سيستم آگاه سازی caching آماده می شود. برای آشنائی با نحوه عملكرد سيستم فوق يك نمونه مثال را با يكديگر دنبال می نمائيم .
فرض كنيد قصد داريم نتيجه  query  زير را cache نمائيم .

  SELECT * FROM Employees

query فوق ركوردهای موجود در جدول Employees را بازيابی می نمايد . برای آگاهی از اين كه چه زمانی يك ركورد جديد در جدول Employees درج ، حذف و يا ويرايش شده است تا بر اساس آن شی cache شده غير معتبر گردد ، از يك trigger استفاده می شود . trigger مورد نظر بر  روی جدول Employees  و توسط برنامه كمكی aspnet_regsql  ايجاد می شود .

ايجاد يك trigger بر روی جدول Employees

 CREATE TRIGGER dbo.[Employees_AspNet_SqlCacheNotification_Trigger]
 ON [Employees]
   FOR INSERT, UPDATE, DELETE AS BEGIN
     SET NOCOUNT ON
     EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'Employees'
 END

بدين ترتيب ، پس از بروز هر گونه تغيير بر روی جدولی كه مانيتور می گردد ، يك stored procedure   با نام AspNet_SqlCacheUpdateChangeIdStoredProcedure فعال و changeId سطر مربوطه را در جدول آگاه سازی تغييرات اضافه می نمايد .

     AspNet_SqlCacheUpdateChangeIdStoredProcedure

 CREATE PROCEDURE dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure
   @tableName NVARCHAR(450)
  AS
    BEGIN
       UPDATE dbo.AspNet_SqlCacheTablesForChangeNotification WITH (ROWLOCK)
       SET changeId = changeId + 1
       WHERE tableName = @tableName
   END
GO

 در جدول AspNet_SqlCacheTablesForChangeNotification برای هر جدولی كه قصد مانيتورينگ آن را داريم يك ركورد ايجاد می گردد. پس از بروز تغيير در جدول ( نظير درج يك ركورد جديد ) ، يك واحد به ستون changeId اضافه می گردد . ASP. NET به صورت دوره ای اين جدول و مقادير مربوط به changeId را بررسی و در صورتی كه مقدار فيلد فوق تغيير نمايد ، از بروز تغييرات در جدول مورد نظر آگاه می گردد .
روش فوق يكی از محدوديت های غيرمعتبرسازی caching در  SQL Server 2000 و SQL Sever 7 را نشان می دهد : هر نوع تغيير بر روی جدول باعث غيرمعتبر شدن هرگونه query بر روی جدول می گردد . به عنوان نمونه فرض كنيد كه از query زير استفاده كرده باشيم :

  SELECT * FROM Employees WHERE City='City1'

پس از اجرای query فوق ، ركورد كاركنانی كه فيلد شهر آنان معادل city1 باشد ، cache می گردد . در چنين وضعيتی اگر ركورد يكی از كاركنان كه فيلد city آن معادل city1 نباشد تغيير يابد ( ركورد اين نوع كاركنان قبلا" cache نشده است ) ،  سيستم آگاه سازی caching اطلاعات مربوط به غيرمعتبرسازی داده cache شده را ارسال می نمايد( غيرمعتبر شدن داده موجود در cache كه در عمل هيچكدام از ركوردهای آن در جدول  Employees  تغيير نكرده اند ) .
تشخيص و پيگيری اين كه كدام تغيير می تواند زمينه غيرمعتبر سازی يك داده cache شده را فراهم نمايد مستلزم انجام عمليات سنگينی توسط SQL Server 2000 است ( اين كار در SQL Server 2005  امكان پذير است ) .
شكل 1 ، نحوه كار سيستم غيرمعتبر سازی cache در SQL Server 2000 را نشان می دهد .

 مانيتورينگ يك جدول به منظور بررسی انجام تغييرات در SQL Server 2000

شكل 1 :  مانيتورينگ يك جدول به منظور بررسی انجام تغييرات در SQL Server 2000

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



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382