جدول Memory-Optimized چیست؟

جداول بهینه سازی شده با حافظه یا همان Memory-Optimized Tables به طور پیش فرض مشابه جداول عادی در فضای OLTP هستند کلیه عملیات انجام شده روی این جداول همانند جداول فیزیکی سنتی دارای کلیه قابلیت های ACID هستند. مهم ترین ویژگی این جداول این است که در حافظه اصلی سرورها ذخیره می شوند و نه بر روی Disk ها! نسخه دوم داده های این نوع جداول بر روی دیسک نگهداری می شود، اما فقط برای اهداف نگهداری داده ها و حفظ یکپارچگی اطلاعات.

داده ها در جداول بهینه سازی شده فقط زمانی از روی دیسک خوانده می شود که بانک اطلاعاتی در حال Recovery باشد (به عنوان مثال بعد از یک راه اندازی مجدد سرور) البته لازم به ذکر است که همه دستورات Transact-SQL روی این جداول پشتیبانی نمی شود.

 

شیوه ذخیره یا بازیابی اطلاعات در Memory-optimized Tableها

جداول بهینه از حافظه به صورت پیش‌فرض Durable هستند، به این معنی که در صورت فروپاشی یک سرور داده‌ها از داده‌های Transaction Logs بازیابی می‌شوند. با این حال می‌توانیم یک جدول Memory-Optimized را به صورت Non-Durable تعریف کنیم. این موضوع بدان معنی است که تراکنش ‌های روی این جداول به هیچ دیسک و یا اصطلاحاً فرآیندهای I/O نیازی ندارند، با این حال در مورد Crash کردن سرور, داده‌ها در این جداول بازیابی نخواهند شد چون بافر حافظه فلش خواهد شد.
تصمیم‌گیری برای استفاده از جداول بهینه‌سازی‌شده حافظه Durable یا Non-Durable به نیازمندی‌ها و محدودیت های کسب‌وکار بستگی دارد. برای مثال، اگر می‌خواهید از یک جدول Memory-Optimized به عنوان بخشی از فرآیند یکپارچه سازی داده ها در انبارداده ها (Data Warehouse) استفاده کنید که در آن هر روز میلیون ‌ها رکورد وارد می شود تا محاسبات را انجام دهد و نتایج را به جداول دیگر منتقل کند، ایده بدی نخواهد بود که از یک جدول Memory-Optimized به فرم Non-Durable استفاده کنید. با این حال، اگر شما یک جدول با داده‌های دائمی دارید که روزانه به روز می‌شوند و شما تصمیم می‌گیرید که آن را به یک جدول Memory-Optimized منتقل کنید، باید از یک جدول Durable Memory-Optimized استفاده کنید .

برای به دست آوردن انعطاف پذیری بیشتر، In-Memory OLTP از تراکنش های با فاصله زمانی روی جداول فیزیکی استفاده می کند.تراکنشها بلافاصله بعد از تعیین تکلیف شدن تراکنش از حیث Commit یا Rollback شدن و ارسال اطلاعات به مشتری به دیسک منتقل می شوند. بدیهی است اطلاعاتی که هنوز تعیین تکلیف نشده اند با مواردی مانند Server Crash یا از کار افتادن سرورها، از بین می روند اما واقعاً این موضوع با توجه به پیشرفت های سخت افزاری امروزه، بسیار بعید به نظر می رسد.

کلیه رکوردها در جداول بهینه سازی شده یا همان Memory-Optimized Tables ورژن می خورند. این موضوع به این معنی است که هر ردیف در جدول بالقوه دارای چندین نسخه است. تمام نسخه های رکوردها در ساختار داده ای ( Data Structure ) مشابه جدول نگهداری می شوند.ورژن زدن به رکوردها برای پشتیبانی از این قابلیت است که امکان دسترسی همزمان برای خواندن و نوشتن از رکوردهای جدول فراهم شود.

شکل زیر چند ورژن از رکوردها را نشان می دهد. شکل نشان دهنده یک جدول با سه رکورد است و هر رکورد دارای نسخه های مختلف است.

شکل کلی ساختار رکوردها در Memory optimized tables

داده های ذخیره شده در جداول Memory-Optimized، از 2 طریق قابل دسترسی هستند:

1. از طریق Natively compiled Stored Procedures

2. از طریق کدهای Transact-SQL تفسیر شده خارج از Natively compiled stored procedures

 

در ادامه این سری مقالات به تشریح Natively Compiled Stored Procedures خواهیم پرداخت.

برای مشاهده بخش دوم این سری آموزش، اینجا را کلیک نمایید.

 

  • facebook
  • googleplus
  • twitter
  • linkedin
  • linkedin

1 نظر در حال حاضر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *