جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
استراتژي دستيابي به داده ها در وب
-(5 Body) 
استراتژي دستيابي به داده ها در وب
Visitor 579
Category: دنياي فن آوري
در زمان طراحي و پياده سازي يک برنامه تحت وب و بمنظور دستيابي به داده ها ، چالش هاي متعددي وجود دارد: نحوه ارتباط با يک منبع داده ، نحوه ذخيره سازي داده ها در زمان رفت و آمد صفحات بين سرويس گيرنده و سرويس دهنده ، محل ذخيره سازي داده ها در صورت تاکيد بر ذخيره سازي داده ها و ... . نحوه برخورد با چالش هاي فوق و انتخاب راهکارهاي متاسب ، در طراحي و پياده سازي يک برنامه تحت وب تاثيرات خود را بدنبال داشته و مي تواند در نحوه اجراء و کارائي برنامه ، پيامدهاي مستقيمي را داشته باشد.
براي دستيابي به داده ها يک استراتژي ثابت و منفرد که در تمامي حالات پاسخگو باشد ،وجود نداشته و با انتخاب هر رويکرد مي بايست پذيراي نکات مثبت و منفي آن نيز بود. در ادامه به بررسي اصول اوليه در طراحي صفحات فرم هاي وب بمنظور دستيابي به داده ها خواهيم پرداخت .
? ? DataSet or Direct Access and Data Reader. يکي از اولين موارديکه مي بايست به آن پاسخ داد اين مطلب است که : " آيا مي خواهيم رکوردها را بکمک يک Dataset استفاده نمود و يا قصد دستيابي به بانک اطلاعاتي را مستقيما" داشته و بکمک يک Data Reader از رکوردها استفاده نمائيم؟" براي انجام برخي عمليات نظير ايجاد و ويرايش ساختار بانک اطلاعاتي نمي توان از يک Dataset استفاده نمود. مثلا" اگر بخواهيم ، ايجاد يک جدول جديد را از طريق برنامه انجام دهيم ،نمي توان از Dataset استفاده نمود. در حالت کلي براي دستيابي به داده ها مي بايست بين استفاده از يک Dataset و يا کار مستقيم با بانک اطلاعاتي از طريق بخدمت گرفتن دستورات مربوطه يکي و يا هر دو را با توجه به شرايط حاکم بر يک برنامه انتخاب نمود. هر يک از رويکردهاي فوق، داراي مزايا و معايبي مي باشند. مثلا" Dataset جهت کار با جداول رابطه اي و کار با داده هاي مستقر شده در چندين جدول مناسبت تر بنظر مي آيند. در مقابل استفاده از يک Data Reader داراي کارائي بيشتر مخصوصا" ازبعد استفاده از حافظه بوده که باعث حذف مراحل اضافي براي تکميل و استقرار داده ها در يک DataSet خواهد شد. در اين حالت امکان اعمال کنترل بيشتري بر روي داده ها از طريق عبارات و يا Stored Procedures ها نيز وجود خواهد داشت .
? DataSet and Data commands in web form pages . زمانيکه با صفحات فرم هاي وب کار مي شود ، فاکتورهاي ديگري نيز جهت انتخاب DataSet و يا Data Reader وجود خواهد داشت . يکي از اين فاکتورها " چرخه حيات يک صفحه وب " است . صفحات فرم هاي وب ، مقداردهي اوليه ، پردازش و در نهايت حذف خواهند شد( به ازاي هر رفت و آمد بين سرويس دهنده و سرويس گيرنده ) . در صورتيکه بخواهيم داده ها را بسادگي بر روي صفحه نمايش دهيم ، مي توان يک Dataset را ايجاد و آن را از داده هاي مورد نظر تکميل و در نهايت آن را به يک کنترل Bind نمود. عمليات فوق مستلزم overhead غير ضروري است ، چون بلافاصله Dataset از بين خواهد رفت .در برخي موارد مناسبت تر است که از Data Reader بمنظور بازيابي داده ها استفاده و با Bind نمودن کنترل به آن در زمان اجراء، زمينه استفاده از داده ها را فراهم نمود. در حالت کلي مي توان از دستورات مربوط جهت اجراي عبارات SQL و يا Stored Procedurdes استفاده کرد. مثلا" جهت نمايش داده ها در يک دستور DataList مي توان يک عبارت SQL را اجراء و در ادامه کنترل مربوطه را به يک Data reader نسبت داد. در اين زمينه برخي حالات خاص نيز وجود دارد که به آنها اشاره مي گردد:
? کار با جداول رابطه اي . Dataset امکان پشتيباني چندين جدول رابطه اي و حمايت از ارتباطات مربوطه را فراهم مي نمايد.کار با رکوردهاي رابطه اي در يک Dataset بمراتب راحت تر از خواندن رکوردها بصورت مستقل و بکمک اجراي دستوراتي در رابطه با يک بانک اطلاعاتي است.
? مبادله داده بين ساير پردازش ها . در صورتيکه صفحات فرم هاي وب داده هاي خود را از ساير عناصر اخذ نمايند ،( نظير سرويس هاي وب Xml) مي بايست از يک Dataset جهت نگهداري يک نسخه از داده ها استفاده نمود.Dataset بصورت خودکار Xml هاي استفاده شده بين عناصر متفاوت در دات نت را خوانده و يا در آنها اطلاعاتي را خواهد نوشت.
? کار با يک مجموعه ثابت از رکوردها . در صورتيکه به مجموعه اي از رکوردها مکررا" نياز باشد ،( مثلا" عمليات paging در يک grid) شايسته است که رکوردهاي مورد نظر را در يک Dataset قرار داد.
يکي از مزاياي عمده Dataset ، برنامه نويسي ساده تر آن نسبت به استفاده مستقيم از دستورات است .
?? Save Dataset or Recreate each time . در صورت استفاده از يک DataSet ، تصميم بعدي در رابطه با اين موضوع خواهد بود که " آيا پس از هر رفت و آمد بين سرويس دهنده و سرويس گيرنده ، مي بايست مجددا" Dataset را ايجاد نمود؟ در رابطه با مسئله فوق دو رويکرد وجود دارد :
? هر زمان که صفحه پردازش مي گردد ،يک نمونه از Dataset ايجاد و مقدار دهي شود، .پس از اتمام پردازش صفحه و ارسال آن براي مرورگر ،Dataset حذف خواهد شد.
? ايجاد و تکميل Dataset يک بار انجام شده ( اولين باري که صفحه اجراء مي گردد) و درادامه Dataset را با يک روش ذخيره و در نهايت امکان بازيابي و استفاده از رکوردهاي موجود در آن فراهم خواهد شد.
ايجاد Dataset در هر مرتبه ، بدين معني است که هر زمان کاربري بر روي يک Button کليک مي نمايد ،يک Query و يا Stored Procedure اجراء خواهد شد. مثلا" مي توان يک فرم صفحه وب را داشت که کاربر اطلاعات را صفحه به صفحه مشاهده نمايد. در صورتيکه هر بار Dataset ايجاد گردد ،فرم هاي وب يک query را در از منابع داده ئي جهت دستيابي و اخذ رکوردهاي بعدي جهت نمايش ، انجام خواهند داد.
در صورتيکه Dataset را ذخيره و مجددا" بازيابي نمائيم ،نياز به مراجعه مجدد به منبع داده ئي براي اخذ رکوردهاي جديد نخواهد بود. ذخيره نمودن يک Dataset داراي چالش هاي جدي است. يکي از مهمترين چالش ها ،اشغال بخشي از حافظه توسط Dataset خواهد بود( در زمان رفت و آمد صفحه بين سرويس گيرنده و سرويس دهنده ) در صورتيکه Dataset داراي حجم بالائي باشد ،قطعا" حجم بالاتري از حافظه اشغال شده و اگر در چنين وضعيتي چندين کاربر ديگر نيز Dataset هائي را ايجاد کرده باشند ،ميزان استفاده از حافظه بمراتب بيشتر از وضعيت قبلي خواهد بود.( يکي از راهکارهاي موجود ذخيره داده در صفحه است ). يکي ديگر از چالش هاي موجود در اين زمينه ، مسئله يکسان سازي ( نمودن ) داده هاي موجود در Dataset با منبع داده ئي است . با توجه به اينکه Dataset تکميل و حاوي داده هاي درخواستي بوده و در زمان درخواست کاربر براي داده ها ،Dataset مجددا" Refresh نمي گردد ،اين احتمال وجود خواهد داشت که داده هاي موجود در Dataset يک تصوير زنده از داده هاي موجود در منابع داده ئي را نشان ندهند .شايد بهتر باشد که براي هر رفت و آمد ،مجددا" Dataset را ايجاد نمود.
?? Cache on Server or on the Client . در صورتيکه تصميم به ذخيره سازي يک Dataset را داشته باشيم ( در زمان رفت و آمد صفحات بين سرويس دهنده و سرويس گيرنده ) مي بايست در رابطه با محل ذخيره سازي آن تصميم مناسب را اتخاذ نمود. مورد فوق به استانداردها و روش هاي گفته شده در بحث State management برخواهد گشت . در رابطه با ذخيره سازي Dataset دو رويکرد عمده وجود دارد :
? بر روي سرويس دهنده ،Dataset را در يک Session State , Application State و يا Cache ذخيره نمود.
? بر روي سرويس گيرنده ،Dataset را با استفاد ه از View State و يا فيلد هاي مخفي ذخيره نمود.
ذخيره نمودن Dataset بر روي سرويس دهنده باعث افزايش استفاده از منابع سرويس دهنده خواهد شد.در چنين حالتي درصورتيکه حجم Dataset بالا بوده و يا کاربران زيادي با Dataset ها ي با حجم کم وجود داشته باشد ، بر کارائي سرويس دهنده اثرات منفي را خواهد گذاشت . استفاده از cache هم مسائل مربوط به خود را دارد چون در صورتيکه سرويس دهنده نيازمند حافظه بيشتري بوده و يا تاريخ اعتبار Cache به پايان رسيده باشد ،مديريت Cache فضاي اشغال شده را آزاد خواهد کرد. بهرحال در چنين مواردي هيچگونه تضميني وجود نخواهد داشت که Dataset در Cache موجود باشد و مي بايست با افزودن منطق مربوطه در صفحات ،در ابتدا بررسي گردد که آيا Dataset در Cache موجود هست يا خير؟ در صورتيکه Dataset در Cache موجود نباشد ،مجددا" آن را ايجاد و يک نسخه از آن را هم در Cache ذخيره نمود.
ذخيره سازي داده ها در صفحات ، بدين معني است که ازمنابع موجود بر روي سرويس دهنده براي ذخيره سازي داد ه ها استفاده نشده است . در اين روش ، داده ها بعنوان بخشي از Html Stream در صفحات وب قرار خواهند گرفت و اگر Dataset حجيم باشد در زمان لود صفحه در مرورگر و يا ارسال براي سرويس دهنده ، مدت زمان زيادي صرف خواهدشد. در اين راستا مي بايست اين سياست: "همواره سعي گردد که حجم Dataset به حداقل مقدار خود رسيده و صرفا" رکوردهاي مورد نظر را ذخيره کرد " ، مورد توجه جدي قرار گيرد. در موارديکه مي خواهيم يک Dataset را ذخيره نمائيم ،مي بايست با افزودن کدهاي مربوطه در صفحه ، امکان ذخيره و بازيابي آن را در زمان معقول تحقق بخشيد.
در برنامه زير براي ذخيره و بازيابي يک Dataset از يک Session state استفاده شده است . Dataset با نام dsCoustomer1 بوده که از يک نمونه کلاس dscoustomer dataset استفاده شده است . توجه داشته باشيد که Dataset بعنوان يک شي ذخيره شده است و در زمان بازيابي Dataset مي بايست آن را مجددا" به کلاس Dataset تبديل نمود.

 ذخيره و بازيابي يک Datasetبکمک يک Session state

Private Sub Page_Load (ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles MyBase.Load
If  Page.IsPostBack Then
  dsCustomers1 = CType(Session("myDsCustomers"), dsCustomers)
Else
    If  Session("myDsCustomers") Is Nothing Then
        OleDbDataAdapter1.Fill(dsCustomers1)
        Session("myDsCustomers") = dsCustomers1
  End If
End If
End Sub

Add Comments
Name:
Email:
User Comments:
SecurityCode: Captcha ImageChange Image