یکی از رایجترین اصطلاحات در دنیای کامپیوتر، پایگاه داده یا Database است. شاید برای شما هم این سوال پیش آمده باشد که پایگاه داده چیست؟ با ورود این مفهوم به حوزه اپلیکیشن ها، انقلابی در توسعه آنها ایجاد شد. تقریبا امروزه، پیدا کردن اپلیکیشنهای کاربردی که از پایگاه داده استفاده نمیکنند، کار بسیار دشواری خواهد بود. اگر میخواهید بیشتر در مورد پایگاه داده و کاربردهای آن بدانید، شما را به ادامه این مطلب دعوت میکنیم.
پایگاه داده چیست؟
پایگاه داده یا Database مجموعه ای از اطلاعات سازمان یافته است که بر اساس ترتیب و قوائدی مشخص در کنار یکدیگر نگهداری میشوند. به عبارتی دیگر زمانی که دادههای خود را با نظم و سازماندهی در کنار هم قرار دهیم به آن دیتابیس ، بانک اطلاعاتی یا پایگاه داده میگوییم. بر اساس این تعریف یک دفترچه تلفن و یا لیستی از کالاهای موجود در انبار یک فروشگاه نیز به نوعی دیتابیس یا پایگاه داده به حساب میآیند.
در علم رایانه منظور از Database محلی است که اطلاعات مربوط به یک نرم افزار، وب سایت و… ذخیره میشوند. دیتابیس بر اساس قوائدی که در ساماندهی اطلاعات به کار میگیرد، امکان دسترسی و مدیریت اطلاعات ذخیره شده را بسیار سادهتر میکند. استفاده از دیتابیس این امکان را در اختیار ما قرار میدهد تا اطلاعات خود را به صورت دقیق با نظمی مشخص ذخیره کنیم. با این کار میتوانیم در کوتاهترین زمان به بخش و یا کل این اطلاعات دسترسی پیدا کنیم. همچنین استفاده از Database مزایای دیگری از جمله استقلال اطلاعات، حذف فرآیندهای تکراری، افزایش امنیت، امکان پشتیبان گیری از دادهها و… در اختیار ما قرار میدهد.
مثالی ساده از پایگاه داده
حال که دانسیم پایگاه داده چیست ، قصد داریم مثالی ساده از آن را مورد بررسی قرار دهیم. تصور کنید قصد دارید خانه ای را در یکی از مناطق تهران اجاره کنید. برای انجام این کار به صورت سنتی باید به یکی از مشاورین املاک در آن منطقه مراجعه کنید. مشاور املاک لیستی از خانه هایی که در آن منطقه برای اجاره هستند در اختیار شما قرار میدهد. در این لیست اطلاعات مختلفی در مورد خانههای اجاره ای آن منطقه از جمله نام مالک، آدرس خانه، اجاره بها، مبلغ ودیعه و… ذکر شده میباشد. در این مثال لیستی که در اختیار شما قرار گرفته است، یک دیتابیس از اطلاعات خانههای اجاره ای در آن منطقه است.
پایگاه داده در دنیای کامپیوتر
این اطلاعات میتوانند شامل اطلاعات قابل نمایش و غیر قابل نمایش برای کاربران باشند. بنابراین مجموع این جداول که هر کدام نگهدارنده ویژگیهای مختلفی از موجودیتها هستند، دیتابیس سایت را تشکیل میدهند. هر کدام از این جداول با نظم و ساختار مناسبی برای نگهداری اطلاعات طراحی شده است. حال تصور کنید اگر پایگاههای داده وجود نداشتند، مدیریت این حجم از اطلاعات چگونه امکان پذیر میشد؟!
این اطلاعات میتوانند شامل اطلاعات قابل نمایش و غیر قابل نمایش برای کاربران باشند. بنابراین مجموع این جداول که هر کدام نگهدارنده ویژگیهای مختلفی از موجودیتها هستند، دیتابیس سایت را تشکیل میدهند. هر کدام از این جداول با نظم و ساختار مناسبی برای نگهداری اطلاعات طراحی شده است. حال تصور کنید اگر پایگاههای داده وجود نداشتند، مدیریت این حجم از اطلاعات چگونه امکان پذیر میشد؟!
کاربرد، اصطلاحات و مفاهیم مرتبط با پایگاه داده
دیتابیس شامل اجزا و بخشهای مختلفی است که در کنار یکدیگر وظیفه سازماندهی اطلاعات را بر عهده دارند. هر کدام از این اجزا و بخشها وظایف و نامهای متفاوتی دارند. شناخت هر کدام از این بخشها برای کسانی که قصد دارند به طراحی دیتابیس بپردازند، ضروری است. از جمله مهمترین اصطلاحات در زمینه طراحی پایگاه داده میتوان به عبارتهای زیر اشاره کرد :
- جدول (Table) : دیتابیس میتواند یک یا چند جدول یا Table داشته باشد. هر جدول در دیتابیس وظیفه نگهداری گروهی از اطلاعات را بر عهده دارد. هر جدول میتواند چندین ستون و ردیف داشته باشد.
- ستون یا ویژگی (Column یا Attribute) : هر جدول از پایگاه داده میتواند چندین ستون داشته باشد. هر ستون وظیفه نگهداری ویژگی یا مقداری خاص از یک متغیر را بر عهده دارد. مثلا ستون نام، نام خانوادگی و…
- ردیف یا سطر (Row) : به هر سطر یا ردیف از جدول داده ها، رکورد (Record) میگویند. هر رکورد مجموعه ای از ویژگی هایی است که در ستونهای آن جدول در نظر گرفته شده اند. مثلا اطلاعات مربوط به یک کاربر، یک رکورد از جدول کاربران است.
- نوع (Type یا Domain) : هر ستون از ویژگیها دارای فرمت خاصی از داده است که به آن Type یا نوع میگویند. دادهها میتوانند انواع مختلفی داشته باشند از جمله رشته (String)، عدد صحیح (Integer) و… باشد.
- موجودیت (Entity) : موجودیت یک مفهوم کلی است از چیزی است که قصد داریم ویژگیها و اطلاعات مربوط به آن را در پایگاه داده ذخیره کنیم. مثلا یک شی، انسان، مشتری و… نمونه هایی از یک موجودیت در دیتابیس هستند که هر کدام از آنها ویژگیهای خاص خود را دارند.
- داده (Data): دادهها نمودی از مفاهیم، معلومات، قایع و پدیدهها هستند که از طریق مشاهده یا تحقیق بهدست میآیند.
- اطلاعات (Information): اطلاعات درواقع همان مفهمومی است که بعد از پردازش بهصورت داده ذخیره میشوند.
- صفت خاصه (attribute): هر ویژگیای که یک موجودیت را از موجودیت دیگر جدا کند، یک صفت خاصه محسوب میشود.
بانک اطلاعات یک دانشگاه را در نظر بگیرید. مفاهیم دیتابیس در این سیستم، به این صورت است:
موجودیت: دانشجو، استاد، درس
صفت خاصه: نام، نام خانوادگی، سال تولد، نام درس، کد درس، تعداد واحد هر درس و …
داده: کلمات و اعدادی که این اطلاعات را نشان میدهند.
اطلاعات: ثبتنام دانشجوها، انتخاب واحد و نمرات هر دانشجو
انواع مدلهای پایگاه داده:
- پایگاه داده رابطهای
- پایگاه داده شیگرا
- پایگاه داده توزیعشده
- پایگاه داده NoSQL
- پایگاه داده نمودار
- پایگاه داده ابر
- پایگاه داده مرکزی
- پایگاه داده عملیاتی
مزایای دیتابیس ها در دنیای مدرن چیست؟
حذف بایگانی کاغذی: دیتابیسها هزینههای نگهداری اسناد و مدارک کاغذی را بهطور کامل حذف کردهاند.
دسترسی آسان به اطلاعات: ساختار مشخص و منظم دیتابیس ها دسترسی به دادهها و اطلاعات را
بسیار ساده کرده است.
اشترکگذاری آسان اطلاعات: دیتابیس ها امکانات مختلفی را برای اشتراکگذاری دادهها در اختیار کاربران قرار میدهد.
ذخیرهسازی اصولی دادهها: در بانکهای اطلاعاتی امکان ذخیرهسازی یکپارچهی کل دادهها بهراحتی فراهم شده است
و خیلی ساده میتوان تمامی دادهها و اطلاعات مربوط به یک موجودیت (entity) را در یک ساختار مشخص ذخیره کرد.
پردازش سریع و آسان دادهها: بهدلیل یکپارچه بودن دادهها در دیتابیس، پردازش اطلاعات و انجام تراکنشها
بسیار سریعتر و آسانتر انجام میشود.
بهبود کارایی: سازماندهی اطلاعات در دیتابیس ها، بازده کار را افزایش میدهد.
کاهش احتمال خطا: یکپارچهسازی و سادهسازی دادهها کمک میکند تا کاربر با دقت بالاتر
و خطای کمتری به هدف موردنظرش دست پیدا کند.
مشکلات متداول در طراحی پایگاه داده
طراحی و ایجاد دیتابیس برای نرم افزارهای مختلف نیازمند تخصص، تجربه و دانش از نحوه عملکرد DBMSهای مختلف است. افراد متفاوتی در طراحی، ساخت و مدیریت یک پایگاه داده نقش ایفا میکنند. هر یک از آنها دارای مسئولیتهای مختلفی از جمله طراح دیتابیس (Database Designer)، مدیر پایگاه داده (Database Administrator) و برنامه نویسان پایگاه داده (Database Programmers) هستند. معمولا بیشترین مشکلات در مرحله طراحی پایگاههای داده به وجود میآیند. متداولترین مشکلات در طراحی پایگاه داده عبارتند از :
- انتخاب نامناسب DBMS با توجه هدف مورد نظر
- طراحی نامناسب دیتابیس
- نام گذاری ضعیف جداول
- نداشتن مستندات
- تست نکردن دیتابیس
- نداشتن Primary key
- ورود تمام اطلاعات در یک جدول
- برقراری ارتباط نامناسب میان جداول مختلف
نتیجه گیری
در هر لحظه از دنیای ما، حجم عظیمی از اطلاعات و دادهها ایجاد و سپس میان سیستمهای مختلف رد و بدل میشوند. این اطلاعات و دادهها در عصر ارتباطات و تکنولوژی جایگاه بسیار مهمی دارند. به همین منظور همه برنامه نویسان باید بدانند که پایگاه داده چیست و چگونه میتوانند با استفاده از آنها نرم افزارهایی کاربردی ایجاد کنند.تصور کنید که تمام این اطلاعات بدون هیچگونه نظم و سامانی در محلی بدون امنیت و قائده خاصی ذخیره شوند.
سپس بخواهیم به تمام این دادهها و یا بخشی از آنها دسترسی پیدا کنیم تا آنها را مورد پردازش و بررسی قرار دهیم. قطعا چنین کاری بدون سازماندهی این اطلاعات غیرممکن خواهد بود. بنابراین استفاده از دیتابیس برای ذخیره و سازماندهی اطلاعات بسیار ضروری است. به همین منظور سیستم های جدید مدیریت دیتابیس، با هدف برطرف ساختن نیاز ما برای ذخیره اطلاعات در حجم زیاد ساخته شده اند.
آشنایی با ساختار پایگاه داده SQL
یگاههای داده رابطه ای به دلیل نوع ساختار خود، برای تحلیل دادههای بزرگ غیر بهینه، ناکارا و همینطور کند بودند. البته در بعضی موارد هم استفاده از ساختار جدولی که در پایگاههای داده رابطه ای استفاده میشود تقریبا ناممکن بود. به همین دلیل ذخیره سازی حجم زیادی از دادههای بی ساختار (Non-structured Data) سرعت و کارایی این پایگاههای داده را به شدت کاهش میداد. تا اینکه پایگاههای داده NoSQL پا به عرصه گذاشتند. پس همانطور که حدس میزنید، هدف اصلی ایجاد پایگاههای داده NoSQL کار با دادههای بی ساختار و حجیم است.
در برنامه نویسی سنتی، پایگاههای داده معمولا از نوع SQL هستند؛ که یک پایگاه داده رابطه ای یا Relational است. پایگاههای داده رابطه ای ساده هستند و کار کردن با آنها معمولا بی دردسر و راحت است. اما این نوع از پایگاههای داده یک مشکل بزرگ دارند. این مشکل زمانی خود را نشان داد که غولهای نرم افزاری دنیا مثل گوگل، آمازون و فیسبوک احتیاج به تحلیلِ دادههای با حجم و تعداد بالا یا همان Big Data پیدا کردند.
اگر تجربه استفاده از SQL را داشته باشید میدانید که در استفاده از آن همیشه باید تابع قوانین باشید. یعنی باید مجموعه ای از اطلاعات یکسان با مشخصات یکسان را در جداول (Table) مربوط به خود جاگذاری نمایید. در واقع باید بگوییم که در SQL باید برای این سوال ها، به ازای هر داده پاسخ مشخصی داشته باشید:
- چه موجودیت (Entity) هایی دارید؟ اطلاعات قرار است در قالب چه دسته هایی ذخیره سازی شود؟ مثل دستههای کاربر، خبر، کامنت و… همگی نمونه هایی از موجودیت هستند. معمولا هر موجودیت در قالب یک جدول در نظر گرفته میشود.
- هر جدول شما چه خاصیت هایی دارد؟ چه اطلاعات مشخصی را قصد دارید در آن ذخیره کنید؟ به یاد داشته باشید که این خواص باید ثابت باشند! چرا که هر کدام از این خواص به معنی یک ستون (Column) از جدول شما هستند. مثلا جدول کاربر میتواند شامل ستونهای نام، نام خانوادگی، سن، پست الکترونیک و… باشد و قرار نیست این تعداد ستونها برای هر کاربر متفاوت باشد.
- هر داده شما چه اطلاعاتی دارد؟ هر داده جدید در قالب یک سطر (Row) جدید در جدول مورد نظرتان ذخیره میشود. به طور مثال به ازای هر کاربر جدید یک سطر با ستونهای نام، نام خانوادگی، سن و… در جدول کاربران تشکیل میشود.
- هر جدول شما چه ارتباطی (Relation) با جدول یا جداول دیگر دارد؟ مثلا هر کاربر میتواند عضوی از یک یا چند کلاس درس و هر کلاس درس میتواند شامل مجموعه ای از کاربران باشد.
Schema
تمام این مشخصات پایگاه داده شما در SQL با ساختاری به نام Schema (بخوانید اسکیما) ذخیره میشود. Schema یک ساختار ثابت است و مانند اسکلت یک ساختمان عمل میکند. همه چیز روی آن سوار و بر پایه آن تکمیل میشود. شاید تا الان فهمیده باشید که مشکل اصلی این نوع از پایگاه داده در ذخیره سازی دادههای بی ساختار کجاست! در ذخیره سازی این گونه داده ها، خصوصیات هر داده همواره ثابت نیست و این باعث ناکارایی و بعضا غیر قابل استفاده شدن SQL برای آنها میشود.
پایگاههای داده NoSQL
پایگاههای داده (Not Only SQL) NoSQL برعکس نوع SQL از ساختارهای Schema غیر ثابت یا Dynamic Schema استفاده میکنند. این باعث میشود که برنامه نویسان احتیاجی به تشکیل ساختارهای سخت گیرانه مشخص، پیش از ایجاد پایگاههای داده را نداشته باشند. این پایگاههای داده میتوانند انواع مختلفی داشته باشند و برعکس SQL برای ذخیره سازی دادهها از XML یا JSON استفاده میکنند.
در ادامه انواع مختلفی از پایگاههای داده NoSQL را به شما معرفی میکنیم:
- پایگاههای داده کلید-مقدار یا Key-Value Database: در این نوع از پایگاه داده اطلاعات در قالب جفتهای کلید-مقدار یا Key-Value ذخیره میشود. کلیدها نقش شناسه هر داده را بازی میکند. یعنی میتوانیم با استفاده از آنها مقادیر مختلف داده را ذخیره یا پیدا کنیم. پایگاههای داده کلید-مقدار به دلیل ساده بودن در کارکرد، پرکاربردترین نوع پایگاههای داده NoSQL هستند.
- پایگاههای داده ستونی یا Wide-Column Database: شاید تصور کنید پایگاههای داده ستونی همان پایگاههای داده رابطه ای هستند. اما این فقط ظاهر این گونه پایگاههای داده است که شبیه به نوع رابطه ای است. گفتیم که در پایگاههای داده رابطه ای لازم است که تعداد و نوع ویژگیهای هر موجودیت و مقادیر داخل آن مشخص و ثابت باشد. این در حالی است که در پایگاههای داده ستونی، هر ستون در رکوردهای مختلف میتواند شامل داده هایی با ساختار و نوع متفاوت باشد.
- پایگاههای داده سندی یا Document Database: در این گونه پایگاههای داده برای ذخیره سازی دادهها از اسناد JSON یا XML استفاده میکنیم. پایگاههای داده سندی معمولا برای ذخیره سازی و استفاده از دادههای پراکنده و بی ساختار استفاده میشوند.
- پایگاههای داده گرافی یا Graph Database: در این نوع از پایگاههای داده برای ذخیره سازی موجودیتها و روابط بین آنها از گراف استفاده میکنیم. پایگاههای داده گرافی برای مواردی که در آنها به ایجاد ارتباطهای متعدد بین جداول احتیاج داریم بسیار مناسب هستند.
- پایگاههای داده چند مدله یا Multimodel Database: پایگاههای داده چند مدله ترکیبی از انواع دیگر پایگاه داده هستند. در این نوع پایگاههای داده میتوانیم دادهها را به روشهای مختلفی ذخیره، و از آنها استفاده کنیم.
مزیتهای استفاده از NoSQL
پایگاههای داده NoSQL مزیتهای بسیار زیادی دارند که آنها را برای سیستمهای بزرگ و توزیع شده تبدیل به بهترین گزینه میکند. به طور کلی میتوان این مزیتها را به این شکل خلاصه کرد:
- مقیاس پذیری بالا (Scalability): پایگاههای داده NoSQL میتوانند به راحتی با روش مقیاس پذیری افقی یا Horizontal Scaling گسترش پیدا کنند. این ویژگی باعث کم شدن پیچیدگی و هزینه مقیاس دادن به نرم افزار یا Scale کردن آن میشود.
- کارایی بالا (Performance): در سیستمهای توزیع شده NoSQL با تکثیر خودکار دادههای NoSQL در سرورهای متعدد در سراسر دنیا، تاخیر در ارسال پاسخ از طرف سرور به پایینترین حد ممکن میرسد.
- دسترسی بالا (Availability): در سیستمهای توزیع شده NoSQL به دلیل کپی شدن خودکار دادهها در سرورهای مختلف، با از دسترس خارج شدن یک یا چند سرور، پایگاه داده همچنان قابل دسترس و پاسخگو است.
نتیجه گیری
دیدیم که پایگاههای داده رابطه ای و مبتنی بر SQL گرچه از مزیت ساختار یافتگی و قانونمندی برخوردارند، اما برای سیستمهای بی ساختار یا تحلیل دادههای بزرگ مناسب نیستند. این به آن معنی است که مزیت آنها در بسیاری از سیستمهای بزرگ مثل موتورهای جستجو، تبدیل به بزرگترین نقطه ضعف میشود. برای حل این مشکل، پایگاههای داده NoSQL مثل MongoDB، پابه عرصه گذاشتند. پایگاههای داده NoSQL به راحتی در سیستمهای توزیع شده مورد استفاده قرار میگیرند، و باعث بهبود عملکرد آنها میشوند.