الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن تخفيف طلب البيانات من السريفر

مغلقمُجاب
بدأه ورق خسرانه في 10 فبراير 2013 · 9 رد · 1,292 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

 السلام عليكم ورحمة الله وبركاته

 اخواني الاعزاء لدي استفسار .. لو فرضنا عندي موقع .. وفي الصفحة الرئيسية .. يوجد فيها بيانات  ويتم تعبئة البيانات من قاعدة البيانات ..

 ولو فرضنا انه دخل على موقعي الف زائر .. بنفس الوقت  هنا سيتم طلب البيانات من السريفر وعمل لود للبيانات من السريفر الف مرة ؟ وهذه سيكون عبئ على السريفر وربما ينهار الموقع ؟ فما هو الحل لعمل لود مرة وحدة للبيانات وعند دخول اي زائر اخر يتم  جلب البيانات له من دون عمل لود للبيانات من السريفر 

------------------------

 ولكم جزيل الشكر ارجو افادتي بطريقة  للعمل لود مرة وحدة   للبيانات ؟ 

#2

السلام عليكم ...

  1. إن كنت تقصد جلب البيانات من قاعدة البيانات , فيمكن أن تستخدم متحول Static  مثلا Datatable  حيث يتم ملؤه بالبيانات لمرة واحدة من قاعدة البيانات و كلما طلب أحد الصفحة يتم وضع البيانات من هذا الــ satatic Datatable  .
  2. ستواجه مشكلة أنه لو تم تحديث البيانات في قاعدة البيانات , فيجب تحديث البيانات الموجودة في الــ Datatable  .
  3. الــstatic Variables  تيقى موجودة دائما في الذاكرة , و يفضل عدم الاكثار منها كي لا تستهلك ذاكرة السرفر .
  4. ربما يوجد طرق أخرى من الــ Caching  ..
2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

 نعم اقصد جلب البيانات من قاعدة البيانات ..  مشكور مشرفنا العزيز على التوضيح .. ولكن قراءة عن مبداء Caching  ويقولون انه جيد في هذه الامور ..  ولكن ليس لدي الخبرة الكافية  في استخدامة ياليت لو توضيح لي بمثال بسيط .. ولك جزيل الشكر والتقدير 

#4

السلام عليكم ..

  1. مالفرق بين ال session وال cache
  2. ما هو الفرق بين Application,cookies,session,cache,viewstate (رابط الموضوع) .
  3. يوجد في الــ ASP.NET  ثلاث أشكال من الــ caching  و هي :
    • الكاش على مستوى خرج الصفحة (page level output caching)  : يعني كاش لكامل الصفحة .
    • الكاش على مستوى خرج المكونات (user control level output caching (or fragment caching))  يعني كاش جزئي .
    • الــ  Cache API  ..
  4. سأبدأ من أخر نوع (أسهل) , حيث أنه في الــ ASP.NET  لدينا الكائن Cache  الذي يمكننا أن نخزن فيه الكائنات الــ serializeable و استعادتها  (يمكن النظر إليه كــ مصفوفة أو ArrayList  أو hashtable  أو ...)  لوضع عنصر  نستخدم الكود مثلا : 
    DataTable dt = new DataTable();
                dt.Columns.Add("col1");
                Cache["dtKey"] = dt;

    و لإستعادته نستخدم مثلا :

    if (Cache["dtKey"] != null)
                {
                    DataTable d = Cache["dtKey"] as DataTable;
                    Response.Write(d.Columns[0].ColumnName);
                }

     

  5.  

    الكاش على مستوى خرج الصفحة (page level output caching) : يتم وضع الصفحة بالكاش إذا كانت موسومة بالوسم :

     

    <%@ OutputCache Duration="10" VaryByParam="None"%>

     حيث تم تحديد مدة الكاش بعشر ثواني , و طريقة الكاش (هنا دائما سيتم عمل كاش للصفحة حالما تنتهي مدتها و يمكن تحديد الطريقة عن طريق VaryByParam ) .

  6. هنا يتم تنفيذ الصفحة , و توضع في الكاش و عندما يطلبها زبون جديد يتم إرسال النسخة الموجودة في الكاش و لا يتم تنفيذ الصفحة و أكوادها .. هكذا حتي تنتهي مدة صلاحية الصفحة المحددة بعشر ثواني .. و عندما يطلبها زبون جديد بعد إنتهاء الصلاحية , يتم تنفيذ الصفحة من جديد و وضعها في الكاش بالفترة المحددة و هكذا ..

  7. مثال :

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CachTest.aspx.cs" Inherits="ArabTeamASPNews.CachTest" %>
    <%@ OutputCache Duration="10" VaryByParam="None"%>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
    
        </div>
        </form>
    </body>
    </html>

    و كود الصفحة :

    protected void Page_Load(object sender, EventArgs e)
            {
               Response.Write(DateTime.Now.ToLongTimeString());
            }

    لاحظ التنفيذ أنه لن يتم طباعة الوقت الحالي ... حاول إزالة وسم الكاش و جرب التنفيذ .

  8. الكاش الجزئي .

  9. Caching ASP.NET Pages (عبارة عن chapter  اتبع الروابط الموجودة فيه الشجرة علي اليمين او على اليسار) .

  10. http://www.codeproject.com/Articles/43606/ASP-NET-Cache

  11. يمكن تحديد سياسة الكاش هل ستخزن في ملف أو في sql  ..

  12. Caching in IIS

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

مششكور اخي العزيز على الرد ..

وعفو عن التاخير بسبب الضروف  .. بس لدي سؤال اخير واريد اجابته من شخص محترف مثلك .. انت  اخي العزيز

 houssam11350_11350

عندما تقوم بعمل صفحة فيها بيانات تعرض من الدتا بيز .. وهذه الصفحة هي صفحة Indx .. هل عندما تقوم ببرمجت هذه الصفحة تعمل حاسبك على انه عند دخول الف زائر بنفس الحظة سيكون هناك ضغط على الموقع وربماء  ينهار الموقع .؟ والذي اريد ان افهمه منك كيف ستقوم بحل هذه المشكلة  هل تستخدم <%@ OutputCache Duration="10" VaryByParam="None"%> ام انه يوجد طريقة اخرى ... ولك جزيل الشكر والتقدير اخي ومشرفنا العزيز حسام

#6

السلام عليكم ...

أهلا بك أخي ..

  1. لا علاقة بين عدد الزوار و مفهوم الــ Cache  .. مفهوم الكاش يعني أنه يمكن تخرين شئ ما في الذاكرة , بحيث يكون الوصول له سريعا عند الحاجة له.
  2. التطبيقات و المواقع ذات الحجم الصغير و المتوسط , غالبا يتم برمجتها بأسلوب منفصل عن عدد الزوار .. يعني أنا أبرمج الموقع و لا علاقة لي بعدد الزوار و لكن أراعي مفهوم الأداء (Performance) أثناء البرمجة ,  مثلا إذا كان المستخدم يريد البحث عن اسم شخص في قاعدة البيانات فهل معقول أكتب في الاستعلام :
    Select * FROM Person

      بينما يكفي الاستعلام :

    SELECT ID , PersonName FROM Person

     و يقوم بالمطلوب .

  3. بالنسبة للتطبيقات التي فيها عدد مستخدمين كبير (facebook , youtube)  فكل شركة منها لديهم طريقة مختلفة و أدوات للعمل لكنها تعتمد على أفكار الــ Load Balancing  و الــ Distributed Computing   مثلا (hadoop) . بحيث يمكن تخديم عدد كبير من المستخدمين بنفس الوقت و بسرعة كبيرة , حاول البحث عن هذين المفهومين و ستجد الكثير من الأدوات و المعلومات .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#7

 مشكور اخي حسام على التوضيح لي .. لكن لدي سؤال .. هل   اذا انا قمت بتخزين  البيانات في الكاش  عند اول طلب لها  من السريفر ودخل عضو اخر وطلب نفس البيانات هل سيتم الذهاب لسريفر ام سيتم اخذ البيانات من Cache ..

ولدي استفسار اخر .. هل Cache تاخذ مساحة في الذاكرة مثل السيشن ؟

#8

السلام عليكم ..

أهلا بك أخي ..

بالنسبة للسؤال الأول .. طالما أنت قلت له أن يأخذ البيانات من الكاش فسيتم ذلك .

الكاش بشكل أفتراضي تكون في الذاكرة و يمكن تغيير ذلك ...

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9

 مشكور اخي الغالي حسام .. لدي استفسار اخير هل استطيع تغير مكان الكاش ؟  وماهو الافضل ! هل ان اجعله في الذاكرة ام اقوم بتغير مكانه ؟

#10 أفضل إجابة

السلام عليكم ..

  1. فكرة الكاش هي وضع عناصر في الذاكرة للوصول إليها حين طلبها بدلا من طلبها في القرص . (لأن قراءة البيانات من الذاكرة أسرع منها بكثير من قراتها من القرص ).
  2. طبعا الأفضل وضع الكاش في الذاكرة و لكن ماذا لو كانت البيانات المطلوب وضعها في الكاش كبيرة مقارنة مع حجم الذاكرة .. عندها يمكن استخدام القرص .
  3. مع ذلك يمكن عمل CacheProvider  لتخوين محتويات الكاش في القرص ضمن ملف او قاعدة بيانات ..
  4. File-Based Cache for Web and non-Web Apps plus Extend ASP.NET 4.0 OutputCacheProvider (رابط) .
  5. ASP.NET disk-based caching رابط .
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…