همانطور که از این نام یا بهتر است بگوییم اصطلاح مشخص است، مبحث کلان داده به حجم عظیمی از دیتا (اطلاعات) اطلاق میشود که در زمانی کوتاه و با سرعت و دقت بالایی تجزیه و تحلیل میشود. این اطلاعات میتواند ساختاریافته (اطلاعات منظم و دستهبندی شده) یا غیرساختار یافته (اطلاعات حجمی نامنظم و تصادفی) باشد.
کلان داده چیست؟
همانطور که از این نام یا بهتر است بگوییم اصطلاح مشخص است، مبحث کلان داده به حجم عظیمی از دیتا (اطلاعات) اطلاق میشود که در زمانی کوتاه و با سرعت و دقت بالایی تجزیه و تحلیل میشود. این اطلاعات میتواند ساختاریافته (اطلاعات منظم و دستهبندی شده) یا غیرساختار یافته (اطلاعات حجمی نامنظم و تصادفی) باشد.
اما برخلاف چیزی که به نظر میرسد، این حجم اطلاعات نیست که اهمیت و اولویت دارد؛ بلکه نوع استفاده و بهرهبرداری از یک بخش یا تمام این اطلاعات توسط سازمانها و تجارتها است که مهم میباشد. کلان داده در حقیقت عنوان و سیستمی جامع برای کسبوکارها به ویژه کسبوکارهای بزرگ است تا بتوانند از طریق اطلاعات حجیم به دست آمده از این سیستم، برای آینده کاری خود تصمیمات بهتری بگیرند.
سناریوی مرسوم در پایگاه داده های رابطه ای معمولا از یک ساختار مشخص پیروی می کند.
Data Sources : در این بخش از جداول برای نگهداری اطلاعات استفاده می شود. و این جداول دارای رابطه های مشخصی هستند. هر جدول شامل چند فیلد است که اطلاعات در آنها ذخیره میشود و رکورد ها در مجموع محتوا را در خود نگهداری می کنند.
در این روش از کلید های اولیه و ثانویه استفاده میشود برای ارتباط بین جداول و اطمینان از یک تایی اطلاعات موجود در بانک اطلاعاتی.
Storage : اطلاعات موجود در بانک اطلاعاتی روی R DBMS ها ذخیره می شوند. که این بخش مدیریت اطلاعات را انجام میدهد و به ما این اطمینان را میدهد که اطلاعات به صورت صحیح نگهداری میشوند و عملیات ها روی آنها به درستی پیاده سازی میشود.
Schema : در این سناریو ما از شما های مشخص استفاده می کردیم که ساختار تعریف شده و مشخصی دارند.
در این سناریو که به بانک های رابطه ای شناخته میشود به دلیل تعاریف کاملا مشخص و پیاده سازی کردن جداول و رابطه ها بر اساس یک استراکچر کاملا مشخص مفاهیم و رابطه ها بسیار به یکدیگر وابسته هستند. یعنی اگر بعد از پیاده سازی و زیر بار رفتن بانک اطلاعاتی تصمیم به تغییر در بعضی از ساختارها یا جداول داشته باشیم بسیار کار سختی پیش رو خواهیم داشت.
RDBMS : یک سیستم مدیریت بانک اطلاعاتی ( DBMS ) مبتنی بر مدل رابطه ای است. در این سیستم اطلاعات به صورت سطر و ستون ذخیره می شوند.
در RDBMS دیتا به صورت تاپل ها ( سطرها ) نمایش داده میشود.
در یک بانک اطلاعاتی رابطه ای مواردی مانند ( مدیریت حافظه ، مدیریت ورودی و خروجی ، مدیریت قفل ها ، کنترل ترنزکشن ، کنترل توزیع و پخش ، ریکاور کردن لاگ های سیستم ، کنترل پروسس ها ، پردازش کوئری ها ، مدیریت امنیت و دسترسی ها ) توسط RDBMS ها مدیریت می شود.
بانک های رابطه ای یک سری محدودیت دارند که باعث شده به سمت استفاده از اطلاعات بدون ساختار حرکت کنیم. این محدودیت ها عبارتند از ( عدم مدیریت اطلاعات بدون ساختار ، بهینه نبودن مقیاس پذیری ، استفاده از نرمال سازی و مواجه با افزونگی داده در سیستم های توزیع شده ، هزینه بسیار بالا ، کارایی ضعیف در حجم بالای اطلاعات ، پارتیشن ها و عدم کارایی مفید در استفاده از کوئری ها )
ساختار داده ها در حال حاضر به چهار دسته تقسیم می شوند.
Structured : داده های ساخت یافته . داده هایی هستند که شامل نوع داده و فرمت های مشخصی هستند و ساختار کاملا مشخصی دارند مانند دیتابیس های رابطه ای.
Semi Structured : داده های نیمه ساختار یافته هستند و معمولا دیتا فایل های متنی هستند با یک الگوی مشخص که ما توانایی تحلیل یا تجزیه آن را داریم مثل فایل های XML یا فایل های اکسل.
Quasi Structured : داده های شبه ساختار یافته . داده های متنی ای هستند که با ساختار داده های ناپایدار ایجاد می شوند. با استفاده از ابزارهای مختلف میتوان آن ها را به ساختار یافته تبدیل کرد. مانند لاگ فایل ها.
Unstructured : داده هایی بدون ساختار مشخص . با انواع مختلفی از نوع فایل های متفاوت ذخیره می شوند.
شرکت های بزرگ برای اینکه بتوانند انواع داده ها را بدون محدودیت هایی که در RDBMS ها وجود داشت مدیریت کنند و از کلان داده پشتیبانی کنند راه حلی که ارائه کردند استفاده از No SQL است.
ویژگی های NOSQL
Schema Agnostic : یعنی بدون ساختارهایی مانند رابطه بین جداول می توانیم اطلاعات را نگهداری کنیم. یعنی اطلاعات بدون نیاز به هیچ schema ای نگهداری می شوند.
Auto Sharding & Elasticity : یعنی می توانند اطلاعات را روی سرور های گوناگون قرار دهند و آن را به صورت اتوماتیک مدیریت کنند.
Highly Distributable : یعنی می توانند از کلاستر ها استفاده کنند برای ذخیره سازی بانک های اطلاعاتی بسیار بزرگ
Easily Scalable : این امکان را میدهد که حجم داده ها و پیچیدگی آن را به راحتی بین بانک های اطلاعاتی توزیع شده مدیریت کنند.
Integrated Caching : یعنی اطلاعات کش شده در حافظه به صورت Transparent هست و برای تیم توسعه دهنده کار کردن روی آن بسیار ساده و یکپارچه است.
انواع دیتابیس های NoSQL
برای انتخاب صحیح نوع بانک اطلاعاتی باید ابتدا دقیق بررسی کنیم و با توجه به نوع محتوایی که قرار است نگهداری شود نوع بانک اطلاعاتی را انتخاب کنیم.
تمام داده های داخل پایگاه داده از یک کلید نمایه ( Indexed Key ) شده و یک مقدار ( Value ) تشکیل شده است . Indexed Key ها اطلاعات را به صورت منحصر به فرد در میان ند ها مشخص میکنند. برخی از این Store ها در نوشتن بهینه هستند، برخی در خواندن و برخی در هر دو.
یک کلید ممکن است با یک یا چند مقدار مطابقت داشته باشد ( Hash Table )
عملکرد عالی را ارائه می دهد و می تواند به راحتی بر اساس نیازهای تجاری مقیاس بندی شود
Key Value Store : در این روش ذخیره سازی اطلاعات بر اساس Indexed Key و Value انجام میشود. هر کلید به یک یا چند مقدار اشاره میکند ( Hash Table ). کارایی بسیار بالایی را ارائه میدهد . مهم ترین نوع این پایگاه داده ها DynamoDB و Redis هستند.
جدول باال مربوط به کتابخانهای است که Key آن عنوان کتاب و Value آن نویسنده است.
با استفاده از کلید، مقدار آن بازیابی میشود.
با بهکارگیری پردازش موازی توزیع شده، کارایی به شدت افزایش مییابد.
Document Store : داده ها در این مدل با فرمت XML یا JSON ذخیره می شوند. زوجهای Key-value را نمایش میدهد. هر رکورد میتواند مجموعه متفاوتی از فیلد داشته باشد. مانند : MongoDB و Apache CouchDB.
این پایگاه داده ها مشابه زوجهای Key-value هستند اما تفاوت در این است که کلید با یک Document در ارتباط است. این سند یک فایل ورد یا صفحه گسترده نیست بلکه معمولا JSON ( JavaScript Object Notation ) است. دیتابیسهای سندی بجای جداکردن آن بهصورت زوجهای Key-value تشکیل دهنده آن، با تمام سند بهصورت یکجا عمل میکنند
Column Store : داده ها به جای سطر های داده به صورت فیلد هایی از داده که بهصورت ستونی گروه بندی شدهاند ذخیره میشود. ستونها به صورت منطقی به شکل column families ذخیره میشوند. یک سطر میتواند حاوی یک یا چند رکورد داده باشد که به وسیله یک partition key ایندکس شدهاند. مهم ترین بانک های اطلاعاتی که از این روش استفاده می کنند Cassandra و HBase هستند.
ذخیره سازی ستونی به صورت جدول دو بعدی ازسطرها و ستون هاست.
دادهها به وسیله یک row key و یک column key ذخیره میشوند.
سطر A وستون C3 خالی نیست چرا که مقدار null دارد.
Graph Database : نمایش گرافیکی انعطاف پذیر به کار گرفته میشود. هدف کلیدی ذخیره سازی ارتباط میان Node هاست. با افزایش Node ها و گسترش و تغییرات مداومی که در Node ها ایجاد میشود این اطلاعات در گراف ها نگهداری میشوند تا بتوانیم Transaction Management بهتری انجام دهیم. بانک های اطلاعاتی معروف که از این روش استفاده می کنند OrientDB ،Neo4J هستند.
نظریه CAP
این نظریه اعلام میکند که : در سیستم داده توزیع شده مقیاس بزرگ، از بین سه موضوع Consistency ، Availability ، Partition tolerance تنها 2 موضوع را میتوانیم تضمین کنیم.
Consistency : داده هایی که از سیستم درخواست می کنید، همواره آخرین داده های موجود در سیستم است. یعنی اگر بعضی از اطلاعات بروز شده باشد و کاربر درخواست جدید برای دریافت اطلاعات بدهد حتما اطلاعات بروز شده و جدید در اختیار او قرار خواهد گرفت.
Availability : همیشه در دسترس بودن ، توانایی یک سیستم برای کار مداوم بدون از کار افتادن برای یک دوره زمانی تعیین شده است. پایداری سرویس یک استاندارد است که مشخص میکند یک سیستم بدون کوچکترین مشکل برای همیشه در دسترس است. دستیابی به این استاندارد بسیار دشوار است. به این معنی که سیستم یا محصول در 99.999٪ مواقع در دسترس است.
Partition Tolerance : سیستم بدون توجه به خرابی جزئی به کار خود ادامه می دهد و متوقف نمیشود.
هر میزان از خرابی شبکه نمی تواند منجر به شکست کل شبکه شود.