مطالب
سطح دوم cache در NHibernate

عموما دو الگوی اصلی caching در برنامه‌ها وجود دارند: cache aside و cache trough .
در الگوی cache trough ، سیستم 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 در سایت سورس فورج هستند (+).


مطالب تکمیلی:



مطالب
تفاوت‌های Stored Procedure و Function ها در SQL Server
در این مقاله سعی شده است به تفاوت‌های Stored Procedure و Function‌ها در SQL Server به صورت مختصر و مفید بپردازیم:
  1. Function‌ها حتما باید مقدار بازگشتی داشته باشند ولی مقدار بازگشتی در *SP‌ها به صورت اختیاری است. یک SP می‌تواند از صفر تا n خروجی داشته باشد.
  2. Function‌ها تنها می‌توانند پارامترهای ورودی داشته باشند ولی SP‌ها علاوه بر پارامترهای ورودی، می‌توانند پارامتر خروجی نیز داشته باشند.
  3. Function‌ها می‌توانند از داخل SP‌ها صدا زده شوند ولی SP‌ها قابل فراخوانی از داخل Function‌ها نیستند.
  4. Function‌ها تنها می‌توانند دستورات Select را اجرا کنند ولی SP‌ها می‌توانند تمامی دستورات را از قبیل Select, Delete, Insert و... اجرا نمایند.
  5. Function‌ها قابل فراخوانی از طریق دستورات Select هستند ولی SP‌ها این قابلیت را ندارند.
  6. Function‌ها قابلیت استفاده به صورت مستقیم را در دستوراتی مانند Having، دارند ولی SP‌ها این گونه نیستند.
  7. Function‌ها در هربار استفاده کامپایل می‌شوند لیکن SP‌ها می‌توانند یکبار کامپایل شده، execution plan آنها برای استفاده آتی نگهداری شوند. این مهمترین تفاوت این دو می‌باشد.
  8. استثناء و خطاها در SP‌ها قابل دریافت توسط Try...Catch می‌باشند ولی در Function‌ها این قابلیت وجود ندارد.
  9. در SP‌ها می‌توان از Transaction‌ها استفاده کرده و آنها را مدیریت نمایید؛ لیکن Function‌ها این چنین امکاناتی را ندارند.
در کل به خاطر داشته باشیم اگر تفاوت امکانات متفاوت یک محصول را بهتر درک کنیم، می‌توانیم از آنها بهتر استفاده نماییم.
*SP: Stored Procedure