مسئله
شرکت مایکروسافت سالهاست به عنوان رهبر بازار در حوزه سرویس های OLAP (Online Analytical Processing) شناخته می شود. سرویس تجزیه و تحلیل اسکیول سرور یا ssas (sql server analysis service) یکی از سرویس های کاربردی مایکروسافت برای تحلیل دیتا و محاسبات تحلیلی است و چندین راهکار یا مدل برای ساخت مدل های هوش تجاری در اختیار شما قرار می دهد. اما قبل از شروع یادگیری این سرویس باید انتخاب کنید که از مدل tabular (جدولی) استفاده کنید یا multidimensional (چندوجهی)! حتی برای افرادی که از این ابزار استفاده می کنند شاید تفاوت مدل tabular و multidimensional در حاله ای از ابهام باشد! و این سوال وجود داشته باشد که مدل های tabular و Multidimensional چه تفاوتی با هم دارند؟ از هر کدام در کجا استفاده کنیم؟ مدل tabular و Multidimensional نسبت به هم چه مزایایی دارند؟ در این مطلب به صورت اجمالی این دو مدل با هم مورد مقایسه قرار می گیرند.
راه حل
اول از هر چیزی، بستگی دارد!
در این مطلب ابتدا به صورت خلاصه مدل های Tabular در مقابل multidimensional توضیح داده خواهد شد و مشخص می شود در چه شرایطی باید از هر کدام استفاده کنیم. بسیاری از افراد فکر می کنند باید از مدل های multidimensional به مدل های tabular به دلیل جدید بودن و بهتر بودن مهاجرت کنند. اما در بسیاری از مواقع این موضوع پیشنهاد نمی شود یا حتی کار را بدتر می کند یا غیرممکن است. در اینجا راجع به چرایی این موضوع توضیح خواهیم داد. دقت داشته باشید برای ساخت مدل های چندوجهی و جدولی از Visual Studio استفاده میشود.
مدل multidimensional در ssas
دیتابیس multidimensional یا چندوجهی ساختار بسیار متفاوتی با دیتابیس های رابطه ای دارند و به ما اجازه می دهند که گزارش ها را بسیار سریع تولید کنیم. مدل چند وجهی در گذشته تنها راهکار برای ایجاد دیتابیس های چند وجهی بود. این مدل تغییر چندانی از sql server 2005 تا 2016 نداشته است. اگر شما امکانات جدید سرویس تجزیه و تحلیل (analysis service) را بررسی کنید، خواهید دید که بیشتر آنها مربوط به ویژگی های جدید در مدل جدولی (tabular) است. راهکار چندوجهی یک ابزار سنتی OLAP cube است.
مدل tabularدر ssas
مدل جدولی در sql server 2012 معرفی شد و در هر نسخه ویژگی های جدیدی به آن اضافه شد. مدل جدولی از موتور متفاوتی (xVelocity) استفاده می کند. این موتور برای کوئری ها با سرعت بالا در ستون ها طراحی شده است زیر در این مدل داده ها به صورت ستونی ذخیره میشوند (در حالی که در مدل چند وجهی داده ها به صورت سطری ذخیره میشوند). در این مدل دیتا در رم (in memory) ذخیره می شود، به همین دلیل ضروری است که رم بالا و پردازنده بسیار سریع داشته باشید. در مدل جدولی فضای هارد بر خلاف مدل چند وجهی اهمیت کمتری دارد. این موضوع را در نظر داشته باشید که مدل جدولی به صورت وسیعی به عنوان راهکارهای سازمانی استاندارد توسط پلتفرم های مختلف پذیرفته شده است در صورتی که مدل چندوجهی اینگونه نیست.
مقایسه دیتابیس جدولی (tabular) و چند وجهی (multidimensional)
در این قسمت به مقایسه این دو مدل دیتابیس خواهیم پرداخت و از وجوه مختلف آنها را مورد بررسی قرار خواهیم داد.
سخت افزار
باید به وضوع بدانید که سخت افزاری که در مدل دیتابیس چندوجهی مورد استفاده قرار می گیرد در بسیاری از مواقع برای مدل جدولی قابل استفاده نیست. مدل جدولی یک راهکار مبتنی بر رم است. هر چه رم شما بیشتر باشد عملکرد مدل جدولی بهتر خواهد بود. اگر رم کافی در اختیار ندارید مدل جدولی به سادگی شکست خواهد خورد.
در مدل جدولی سرعت هسته های پردازنده بسیار با اهمیت است.
اگر دیتابیس شما حجم بسیار زیادی دارد (بیش از 5 ترابایت) مدل جدولی قابل پیاده سازی نیست و تنها راهکار شما مدل چندوجهی است.
در مدل جدولی فضای هارد خیلی اهمیت ندارد، در حالی که حجم رم و سرعت پردازنده بسیار مهم است. در حالی که مدل چندوجهی در هارد ذخیره می شود و فضای هارد اهمیت پیدا می کند.
مهاجرت
اگر شما از مدل چندوجهی استفاده می کنید و نیازهای شما را پاسخگو است و در استفاده از آن خوشحال هستید پیشنهاد می شود تغییری ایجاد نکنید. اگر فکر می کند مدل جدولی مشکل شما را حل می کند، باید در مورد مهاجرت فکر کنید. انتقال از مدل چندوجهی به مدل جدولی کار ساده ای نیست و وضیفه ای سنگین است. همه چیز به صورت دستی باید انجام شود و هیچ راهکار ساده ای برای این انتقال وجود ندارد. شما باید یک مدل انتقال شخصی سازی شده با ساتفاده از ssis (sql server integration service) و Powershellیا هر ابزار دیگری ایجاد کنید.
مهم ترین مزیت مدل جدولی سرعت بالای آن در برخی از کوئری ها و کاهش حجم دیتا در مقایسه با مدل چندوجهی است. مدل چندوجهی حجم داده ها را یک سوم می کند در حالی که مدل جدولی حجم دیتا را تا یک دهم کاهش میدهد.)
برای مثال مدل جدولی در شاخص های شمارش یکتا (distinct count) بسیار سریع عمل می کند.
اگر شما راجع به مدل جدولی شنیده باشید، نام Dax نیز برای شما آشناست. Dax یک زبان ساده برای کوئری های دیتابیس های چندوجهی، دیتابیس های جدولی، پاور پیوت و پاور بی آی است. این زبان فرمولی نویسی ساده تر از زبان قدیمی MDX است. در مدل های چند به چند (many to many)، در مدل جدولی dax بسیار سریع است.
همچنین در مدل های جدولی برخی از ویژگی های مدل های چندوجهی در دسترسی نیست مانند:
- تجمیع (aggregations)
- اقدامات (actions)
- اجتماع های شخصی سازی شده (Custom Assemblies)
- جمع آوری های شخصی سازی شده (Custom Rollups)
- رابطه های چند به چند (در نسخه های جدید tabular اضافه شده است.)
- پاسخگویی (Writeback)
اگر از مدل های چندوجهی استفاده کرده اید، به نکات بالا قبل از ایجاد مدل های جدولی دقت کنید.
در زیر سایر ویژگی ها مورد مقایسه قرار گرفته است.
ویژگی | مدل چند وجهی | مدل جدولی |
---|---|---|
Actions | Yes | No |
Aggregations | Yes | No |
Calculated Column | No | Yes |
Calculated Measures | Yes | Yes |
Calculated Tables | No | Yes3 |
Custom Assemblies | Yes | No |
Custom Rollups | Yes | No |
Default Member | Yes | No |
Display folders | Yes | Yes3 |
Distinct Count | Yes | Yes (via DAX) |
Drillthrough | Yes | Yes (depends on client application) |
Hierarchies | Yes | Yes |
KPIs | Yes | Yes |
Linked objects | Yes | Yes (linked tables) |
M expressions | No | Yes3 |
Many-to-many relationships | Yes | No (but there is bi-directional cross filters at 1200 and higher compatibility levels) |
Named sets | Yes | No |
Ragged Hierarchies | Yes | Yes3 |
Parent-child Hierarchies | Yes | Yes (via DAX) |
Partitions | Yes | Yes |
Perspectives | Yes | Yes |
Query interleaving | No | Yes4 |
Row-level Security | Yes | Yes |
Object-level Security | Yes | Yes3 |
Semi-additive Measures | Yes | Yes |
Translations | Yes | Yes |
User-defined Hierarchies | Yes | Yes |
Writeback | Yes | No |
نتیجه گیری مقایسه مدل جدولی (tabular) با چندوجهی (multidimensional)
در این مطلب متوجه شدید که اگر از مدل چندوجهی استفاده می کنید باید دقت کافی برای انتقال به مدل جدولی را داشته باشید و اگر یک مدل را انتخاب کنید تغییر مدل کار ساده ای نخواهد بود و در برخی مواقع غیرممکن است. در صورتی که از یک مدل چندوجهی استفاده می کنید و همه چیز خوب است شما هیچ نیازی به تغییر مدل ندارید. هر چند یادگیری مدل جدولی آسان است، ولی انتقال به آن زمان بر خواهد بود.