برخلاف پایگاههای اطلاعاتی نظیر SQL از یک ساختار پویا برای شمای خود استفاده میکند و گزینهای قدرتمند از لحاظ سرعت و انعطاف پذیری در مقابل محدودیتهای سایر بانکهای اطلاعاتی میباشد. در این مقاله قصد داریم پایگاههای مطرح Redis و NoSQL را بررسی کرده و نکات قوت و ضعف هرکدام را بیان کنیم.
پایگاه داده REDIS
برای آن دسته از شرکتهایی که اطلاعاتشان با سرعت زیادی رو به افزایش است (مانند ذخیره اطلاعات در یک صفحه شخصی) و نگران هزینههای نگهداری از آن هستند، یک گزینه مناسب استفاده از فرآیند ذخیره کردن برخی از دادهها در حافظه نهان است. حافظه نهان یک بخش ذخیره موقت است که در آن دادهها شده و میتوانند سریعتر بارگزاری شوند.
فلسفه به وجود آمدن Redis در سال ۲۰۱۰ نیز همین بود. Redis در حافظه (چه اصلی و چه جانبی) قرار میگیرد؛ در نتیجه سرعت و کارایی تاحد بسیار زیادی بالا میرود. باید توجه داشت که اندازه پایگاه داده باید قابلپیشبینی باشد تا بتوان از Redis استفاده کرد، وگرنه Redis هزینههای بیشتری در پی خواهد داشت. Redis از نوع پایگاه دادههای کلید-مقدار یا Key-Value Database است؛ لذا داده اطلاعات در قالب جفتهای کلید-مقدار یا Key-Value ذخیره میشود. کلیدها نقش شناسه هر داده را بازی میکند.
این پایگاه داده با زبان برنامهنویسی C نوشته شده است و بیشتر در سیستم عاملهای یونیکس و لینوکس استفاده میشود اما توسط مایکروسافت برای ویندوز نیز ارائه شده است. بسیاری از زبانهای برنامهنویسی از جمله C#/.NET, C++, Ruby, Java, Python و … را پشتیبانی میکند و به صورت متن باز دردسترس عموم قرار دارد. شرکتهایی از جمله Flicker، Github، Snapchat و Pinterest از Redis استفاده میکنند.
ویژگیهای Redis
- عملکرد سریع و بهینه: سرعت پاسخگویی به دلیل قرارگرفتن در حافظه بسیار زیاد است و در هزینههای نگهداری صرفهجویی میکند. همچنین اطلاعات در اجرای دوباره (resetting) ازبین نمیرود.
- استفاده از انواع داده: با اینکه Redis از نوع مدل پایگاه دادههای کلید-مقدار است اما برخلاف تصور عموم این مقدار حتما نباید به صورت رشته باشند. در Redis از لیستها، هشها و مجموعهها نیز استفاده میشود.
- پشتیبانی از زبانهای مختلف: همانطور که اشاره شد Redis زبانهای برنامهنویسی زیادی را پشتیبانی میکند. توسعهدهندگان زیادی از آن استفاده میکنند.
پایگاه داده MongoDB
یکی از معروفترین پایگاه دادههای NOSQL است که ساختار منعطفی دارد و بیشتر در پروژههای با حجم بالای داده استفاده میشود. این پایگاه داده در سال ۲۰۰۹ ایجاد شده و از نوع پایگاههای داده سندی یا Document Database است؛ یعنی برای ذخیره سازی دادهها از اسناد JSON یا XML استفاده میشود.
ذخیره انواع مختلف مقادیر در قالب سند باعث شده تا بتوان ساختارهای پیچیدهای مانند آرایهها و دادههای سلسله مراتبی را ذخیره کرد. مقادیر دادهای باکلیدهای اولیه و خارجی مورد استفاده قرارمیگیرند. این پایگاه داده با زبان برنامهنویسی جاوا نوشته شده، به صورت متن باز دردسترس عموم قرار دارد و زبانهای برنامهنویسی زیادی را به نسبت به سایر پایگاه دادههای NOSQL پشتیبانی میکند؛ از جمله C#/.NET, C++, Ruby, Java, Python و …. .
برای اجرا کردن کد در mongoDB باید از طریق mongo Shell اقدام کرد. mongo Shell یک رابط تعاملی محسوب میشود و به آنها اجازه ارسال دستورات پرس و جو و به روزرسانی دادهها را میدهد. البته استفاده از کلید خارجی دارای ضعفهایی است و ممکن است پایداری دادهها و یکپارچگی سیستم را به هم بریزد. همچنین در خوشه بندی دادههای موجود در این پایگاه داده، تنها میتوان یک گره را به عنوان گره اصلی انتخاب کرد که اگر از بین برود، ممکن است مرتب سازی زیرگرههای آن از بین برود. این مشکل در پایگاه داده Cassandra برطرف شده است که در بخش بعدی به آن میپردازیم.
ویژگیهای MongoDB
- مدل دادهای منعطف: به علت سندی بودن مدل ذخیره دادهها در مقایسه با پایگاه دادههای رابطهای بسیار منعطفتر و مقیاس پذیرتر است و بسیاری از نیازمندیهای کسب و کارها را برطرف میکند.
- استفاده از Sharding: این پایگاه داده برای تقسیم دادهها و مدیریت بهتر از Sharding یا تکه تکه کردن استفاده میکند؛ به گونه ای که پایگاه داده به چند زیربخش تقسیم میشود تا روند پاسخ دهی به درخواست هایی که از سمت سرور میآید، راحتتر شود.
- همانند سازی: در این تکنیک از یک داده به عنوان داده اصلی کپی هایی تهیه شده و بخشهای دیگری از سیستم پایگاه داده ذخیره میشود و در صورت از بین رفتن و یا مخدوش شدن این داده، دادههای کپی شده به عنوان داده اصلی و جایگزین مورد استفاده قرار میگیرند.
- یادگیری آسان: همچنین کوئریهای ساده ای دارد و کار با آن، برای کسانی که تجربه حرفه ای در انجام پروژههای مختلف برنامه نویسی دارند کار چندان سختی نیست. لذا معمولا در سطوح بالاتر توسعه نرم افزار و برنامه نویسی استفاده میشود.
پایگاه داده Cassandra
نت فلیکس، یکی از بزرگترین سرویسهای پخش آنلاین فیلمها و محتوای سرگرمی منحصرا از این فناوری برای ذخیرهسازی دادهها استفاده میکند. Cassandra در سال ۲۰۰۸ با شعار توسعه پذیری و عملکرد بالا و بدون کم شدن کارایی سیستم در مقیاسهای بزرگ به وجود آمد. از نوع پایگاه دادههای داده ستونی یا Wide-Column Database است؛ این نوع پایگاه دادهها مشابه بانکهای اطلاعات رابطهای هستند با این تفاوت که هر ستون در رکوردهای مختلف میتواند شامل دادههایی با ساختار و نوع متفاوت باشد و هر ردیف میتواند شامل تعداد متنوعی از ستونها باشد. به دلیل حافظه نهان این دادهها، Cassandra میتواند برای ذخیره دادههای با ارزش کلیدی که نیاز به دسترسی بالا دارند، استفاده شود.
توسعهدهندگانی که میخواهند دادههایشان همواره در دسترس باشد (حتی بعد از قطعی سرور) از آن استفاده میکنند. این پایگاه داده با زبان برنامهنویسی جاوا نوشته شده، به صورت متن باز دردسترس عموم قرار دارد و زبانهای برنامهنویسی C#/.NET, C++, Ruby, Java, Go Python و … را پشتیبانی میکند.
ویژگیهای Cassandra
- معماری پیشرفته: برخلاف سایر پایگاه دادههای موجود، به طور مداوم در دسترس هستند. این به سبب ساختار طراحی این پایگاه داده است.
- ساختار توزیع شده ذاتی: یک استاندارد طلایی در مراکز داده چندگانه است و قابل خواندن و نوشتن با استفاده از فناوری ابری میباشد، در نتیجه میتوان از دادهها به راحتی در هرجای دنیا استفاده کرد.
- عملکرد سریع خطی: حتی با بالابردن حجم اطلاعات سرعت پاسخگویی بسیار زیاد است.
- مدل داده انعطاف پذیر: مدل داده Cassandra اجازه میدهد تا با گذشت زمان موجودیتها و یا ویژگیهای جدیدی اضافه شوند و توسعهدهنده به یک مدل داده محدود نمیشود. به این معنی که با گذشت زمان اگر نیاز به اضافه کردن ستون یا تغییر در ساختار پایگاه داده بود، Cassandra اجازه تغییرات را میدهد.
- پشتیبانی از زبانهای مختلف: همانطور که اشاره شد Cassandra زبانهای برنامهنویسی زیادی را پشتیبانی میکند. این پشتیبانی به گونهای است که برنامه به صورت بهینه اجرا میشود. افراد زیادی در جهان هستند که از Cassandra استفاده میکنند و این پایگاه داده یکی از فعالترین پروژههای متن باز است.
- سادگی عملیاتی و توسعهای: با وجود اینکه همه گرههای یک خوشه یکسان هستند ، هیچ ردیف نرم افزاری پیچیده ای برای مدیریت وجود ندارد بنابراین وظایف دولت بسیار ساده شده است. بهعلاوه ، زبان Query Cassandra (CQL) درست مانند SQL به نظر میرسد و عمل میکند ، و مهاجرت از هر پایگاه دادهای به Cassandra را بسیار آسان میکند.
پایگاه داده NEO4J
این پایگاه داده در سال ۲۰۰۷ به وجود آمد. Neo4j از نوع پایگاه دادههای داده گرافی یا Graph Database است؛ یعنی برای ذخیره سازی موجودیتها و روابط بین آنها از گراف استفاده میشود. امروزه بسیاری از شرکتهای صنایع مختلف از جمله خدمات مالی، انرژی، دولت، فناوری، فروشگاهها و … از این پایگاه داده استفاده میکنند. Neo4j با زبانهای برنامهنویسی جاوا و Scala نوشته شده، به صورت متن باز دردسترس عموم قرار دارد و زبانهای برنامهنویسی و زبانهای برنامهنویسی NET, C++, Ruby, Java, Python. و … را پشتیبانی میکند.
ویژگیهای Neo4j
- مدل داده انعطافپذیر: یک مدل داده ساده و در عین حال قوی ارایه میدهد که میتواند به راحتی با توجه به کاربرد تغییر کند.
- قابل اطمینان: با افزایش حجم، انسجام دادهها حفظ شده و سرعت کم نمیشود. البته باید توجه داشت که Neo4j از یک ماشین برای پاسخ به درخواست نوشتن استفاده میکند و برای خواندن نیز از روش تکثیر بهره میگیرد، لذا بهتر است در مواقعی استفاده شود که درخواست نوشتن کم و درخواست خواندن زیاد است.
- بازیابی آسان: با استفاده از Neo4j، نه تنها میتوان رکورد مورد نظر را نمایش داد بلکه به راحتی دادههای متصل شده به آن برای مقایسه بازیابی میشود. لذا با استفاده از آن، میتوان به راحتی دادههای متصل و نیمه ساختار یافته را نمایش داد.
- زبان پرس و جو: Neo4j دارای یک زبان پرس و جوی امری به نام Cypher است تا نمودار را به صورت بصری، با استفاده از کدهای اسکی نشان دهد. دستورها این زبان دارای خوانایی بالایی است و یاد گرفتن آن نیز بسیار آسان است.
- عدم نیاز به join : به دلیل ساختار گرافی آن نیازی به joinهای پیچیده برای بازیابی اطلاعات مرتبط نیست؛ چرا که بازیابی گره مجاور آن و یا جزییات رابطه بسیار آسان است.