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

در این بخش بحث خود را بر روی 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 در یك بانك اطلاعاتی نمونه آشنا خواهیم شد.





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


چهارشنبه 15 شهریور 1396 04:32 ب.ظ
I always spent my half an hour to read this blog's
articles or reviews all the time along with
a mug of coffee.
چهارشنبه 1 شهریور 1396 01:36 ب.ظ
Keep on working, great job!
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

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

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








جستجو

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