عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش يازدهم) |
مديريت وب |
9494 |
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 نمائيم .
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 را نشان می دهد .

شكل 1 :
مانيتورينگ يك جدول به منظور
بررسی انجام تغييرات در SQL Server 2000
در بخش دوازدهم بحث خود را بر روی data
caching ادامه داده و با نحوه ايجاد cache dependency
در يك بانك اطلاعاتی نمونه آشنا خواهيم شد.