۱۳۸۹/۱۱/۰۳

سطح دوم cache در NHibernate


عموما دو الگوي اصلي caching در برنامه‌ها وجود دارند: cache aside و cache through .
در الگوي cache through ، سيستم caching داخل DAL (كه در اينجا همان NHibernate است)، تعبيه مي‌شود؛ مانند سطح اول caching كه پيشتر در مورد آن صحبت شد. در اين حالت cache از ديد ساير قسمت‌هاي برنامه مخفي است و DAL به صورت خودكار آن‌را مديريت مي‌كند.
در الگوي cache aside ، كار مديريت سيستم caching دستي است و خارج از NHibernate قرار مي‌گيرد و DAL هيچگونه اطلاعي از وجود آن ندارد. در اين حالت لايه caching موظف است تا هنگام به روز شدن بانك اطلاعاتي، اطلاعات خود را نيز به روز نمايد. اين لايه عموما توسط ساير شركت‌ها يا گروه‌ها برنامه نويسي تهيه مي‌شود.
NHibernate جهت سهولت كار با اين نوع cache providers خارجي، نقاط تزريق ويژه‌اي را تدارك ديده است كه به second level cache معروف است. هدف از second level cache فراهم آوردن ديدي كش شده از بانك اطلاعاتي است تا فراخواني‌هاي كوئري‌ها به سرعت و بدون تماس با بانك اطلاعاتي صورت گيرد.
در حال حاضر (زمان نگارش اين مطلب)، entity framework اين لايه‌ي دوم caching يا به عبارتي ديگر، امكان تزريق ساده‌تر cache providers خارجي را به صورت توكار ارائه نمي‌دهد.
در NHibernate طول عمر second level cache در سطح session factory (يا به عبارتي طول عمر تمام برنامه) تعريف مي‌شود و برخلاف سطح اوليه caching محدود به يك سشن نيست. در اين حالت هر زمانيكه يك موجوديت به همراه ID منحصربفرد آن تحت نظر NHibernate قرارگيرد و همچنين سطح دوم caching نيز فعال باشد، اين موجوديت در تمام سشن‌هاي برنامه بدون نياز به مراجعه به بانك اطلاعاتي در دسترس خواهد بود (بنابراين بايد دقت داشت كه هدف از اين سيستم، كار سريعتر با اطلاعاتي است كه سطح دسترسي عمومي دارند).

در ادامه ليستي از cache providers خارجي مهيا جهت استفاده در سطح دوم caching را ملاحظه مي‌نمائيد:

  • AppFabric Caching Services : بر اساس Microsoft's AppFabric Caching Services كه يك پلتفرم caching محسوب مي‌شود (+). (اين پروژه پيشتر به نام Velocity معروف شده بود و قرار بود تنها براي ASP.NET ارائه شود كه سياست آن به گونه‌اي جامع‌تر تغيير كرده است)
  • MemCache : بر اساس سيستم معروف MemCached تهيه شده است (+).
  • NCache : (+)
  • ScaleOut : (+)
  • Prevalence : (+)
  • SysCache : بر اساس همان روش آشناي متداول در برنامه‌هاي ASP.NET به كمك System.Web.Caching.Cache كار مي‌كند؛ يا به قولي همان IIS caching
  • SysCache2 : همانند SysCache است با اين تفاوت كه SQL dependencies ويژه SQL Server را نيز پشتيباني مي‌كند.
  • SharedCache : يك سيستم distributed caching نوشته شده براي دات نت است (+).
اين موارد و پروايدرها جزو پروژه‌ي nhcontrib در سايت سورس فورج هستند (+).


مطالب تكميلي: