مزایا و معایب استفاده از آپاچی کاساندرا

مزایا و معایب استفاده از آپاچی کاساندرابا افزایش شدید استفاده از پایگاه های داده NoSQL ، سازمان های زیادی در حال گذار از پایگاه های داده سنتی به پایگاه های منبع باز ، توزیع شده و با عملکرد بالا مانند "Cassandra" هستند. از زمان ظهور آن در فیس بوک در سال 2008 توسط پرشانت مالیک و آویناش لاکشمن ، کاساندرا به یکی از محبوب ترین پروژه های آپاچی تبدیل شده است. چرا که نه؟ Cassandra با ظرفیت منحصر به فرد برای ارائه عملکرد های بلادرنگ ، زندگی توسعه دهندگان وب ، مهندسین نرم افزار و تحلیلگران داده را بسیار ساده تر از آنچه در RDBMS سنتی بود ، می کند. شگفتی هایی که کاساندرا در صنعت داده های بزرگ ایجاد می کند چشم گیر هستند!اما مانند هر ابزار دیگری این ابزار نیز مکان استفاده خود را دارد. بیایید برخی از مزایای Cassandra را بررسی کنیم و ببینیم چرا شرکت هایی مانند Facebook ، eBay ، Reddit ، Twitter ، NetFlix ، IBM و چندین شرکت دیگر از Cassandra استفاده می کنند؟برای درک بهتر مطلب پیشنهاد می‌شود، با تفاوت های بنیادی اس‌کیوال و نواس‌کیوال آشنا باشید..مزایای کاساندرامتن باز:دیتابیس Cassandra یکی از پروژه های متن باز آپاچی است ، این بدان معناست که به صورت رایگان در دسترس است! بله ، به راحتی می‌توانید آن را دانلود کرده و استفاده کنید. در حقیقت ، متن باز بودن آن باعث ایجاد یک جامعه بزرگ کاساندرا شده است که در آن افراد همفکر نظرات ، سوالات ، پیشنهادات خود را در رابطه با داده های بزرگ به اشتراک می گذارند. علاوه بر این Cassandra می تواند با سایر پروژه های متن باز آپاچی مانند Hadoop ، Apache Pig و Apache Hive ادغام شود.معماری Peer to Peer:کاساندرا به جای معماری مستر-اِسلیو (Master-Slave) از معماری همتا به همتا (Peer to Peer) پیروی می کند. بنابراین هیچ نقطه شکستی در Cassandra وجود ندارد. علاوه بر این ، هر تعداد سرور را می توان به هر کلاستر Cassandra در هر یک از دیتا سنتر ها اضافه کرد. از آنجا که همه ماشین ها در یک سطح هستند، هر سروری می تواند درخواست هر کلاینت را پذیرا باشد. بدون شک ، با معماری قوی و ویژگی های استثنایی ، Cassandra این ابزار توانایی های خود را بسیار بالاتر از برخی دیتابیس های دیگر قرار داده است.مقیاس پذیری الاستیک:یکی از بزرگترین مزایای استفاده از Cassandra مقیاس پذیری الاستیک آن است. کلاستر کاساندرا را می توان به راحتی کوچک یا بزرگ کرد. جالب است که هر تعداد node را می توان بدون ایجاد مزاحمت زیاد در کلاستر اضافه یا حذف کرد. هنگام مقیاس بندی به بالا یا پایین ، نیازی نیست که کلاستر را مجدداً راه اندازی کنید یا درخواستهای مربوط به برنامه Cassandra را تغییر دهید. به همین دلیل است که Cassandra دارای توان بسیار بالا برای مدیریت بیشترین تعداد node است. با افزایش مقیاس ، میزان خواندن و نوشتن هر دو همزمان بدون هرگونه وقفه در برنامه ها افزایش می یابد.در دسترس بودن بالا و تحمل خطا:یکی دیگر از ویژگی های بارز Cassandra رِپلیکیشن یا همانند سازی داده ها است که باعث می شود Cassandra بسیار در دسترس و مقاوم در برابر خطا باشد. رِپلیکیشن به این معنی است که هر داده در بیش از یک مکان ذخیره می شود. این امر به این دلیل است که حتی اگر یک node خراب شود ، کاربر باید بتواند داده ها را به آسانی از مکان دیگری بازیابی کند. در یک کلاستر کاساندرا ، هر سطر بر اساس کلید ردیف تکرار می شود. می‌توانید تعداد رِپلیکیشن هایی را که می خواهید ایجاد شوند، تنظیم کنید. درست مانند مقیاس پذیری ، رِپلیکیشن نیز می تواند در چندین دیتا سنتر اتفاق بیفتد. این امر به قابلیتهای پشتیبان گیری و بازیابی سطح بالا در Cassandra منجر می شود.عملکرد بالا:ایده اصلی توسعه Cassandra استفاده از قابلیت های چندین ماشین چند هسته ای بود. کاساندرا این رویا را محقق کرده است! Cassandra عملکرد درخشانی را در زیر مجموعه داده های بزرگ نشان داده است. بنابراین ، کاساندرا مورد علاقه سازمانهایی است که هر روز با حجم عظیمی از داده ها سر و کار دارند و در عین حال نمی‌توانند چنین داده هایی را از دست بدهند.ستون محور بودن Cassandra:کاساندرا دارای یک مدل داده بسیار سطح بالا (مدل ستون-محور) است. به این معنی که Cassandra ستون ها را بر اساس نام ستون ذخیره می کند و منجر به برش (slicing) بسیار سریع می شود. بر خلاف پایگاه های داده سنتی ، جایی که نام ستون ها فقط از فراداده (metadata) تشکیل شده است ، در نام ستون های Cassandra می توان از داده های واقعی استفاده کرد. بنابراین ، سطرهای Cassandra می توانند از توده های سنگین ستون ها تشکیل شوند... بر خلاف پایگاه داده رابطه ای که از تعداد کمی ستون تشکیل شده اند، Cassandra دارای یک مدل داده قدرتمند است.ثبات قابل تنظیم:ویژگی هایی مانند ثبات قابل تنظیم (Tunable Consistency) ، کاساندرا را به یک پایگاه داده بی نظیر تبدیل می کند. در Cassandra ثبات می تواند بر دو نوع باشد - ثبات نهایی (Eventual consistency) و ثبات مستحکم (Strong consistency). که می توانید هر یک از این موارد را بر اساس نیاز خود پیاده سازی کنید. ثبات نهایی اطمینان حاصل می کند که عملیات رایت به محض پذیرش کلاینت روی کلاستر مورد تأیید قرار گیرد. در حالی که، ثبات مستحکم به این معنی است که هرگونه به روزرسانی برای همه ماشین ها یا تمام node هایی که داده های خاص در آن قرار دارند اعمال می شود...همچنین می‌توانید این ۲ گزینه را با هم ترکیب کنید. به عنوان مثال ، در صورت وجود دیتا سنتر های ریموت که تأخیر زیاد است می توانید از ثبات نهایی استفاده کنید و برای مراکز داده محلی که تأخیر کمتر است از ثبات مستحکم استفاده کنید.بدون اسکیما:در واقع Cassandra به نداشتن اسکیما (Schema-less/schema-free) مشهور است. در Cassandra ستون ها را می توان به دلخواه در ردیف ها ایجاد کرد. مدل داده Cassandra همچنین به عنوان مدل داده اسکیمای اختیاری نیز شناخته می شود. برخلاف پایگاه های داده سنتی، در کاساندرا نیازی به نمایش همه ستون های مورد نیاز برنامه نیست زیرا انتظار نمی رود هر سطر مجموعه ستون های یکسانی داشته باشد.معایب کاساندرامانند هر ابزار دیگری کاساندرا نیز عاری از عیب نیست.. در واقع مزایا و معایب هر ابزاری تحت شرایط خاص و نیاز های ما خود را نشان می‌دهند.. پس از مزایای این ابزار به بررسی معایب (یا بهتره بگیم کاستی ها) می‌پردازیمعدم پشتیبانی از مولفه های ACID:اگر نیاز به ذخیره داده های رابطه ای دارید و یا استفاده از مولفه های ACID در سیستم شما ضروری است، بهتر است به فکر پیدا کردن جایگزین مناسبی باشید.عدم پشتیبانی از Aggregation ها:اگر نیاز به استفاده از Aggregation روی داده ها دارید، بهتر است به فکر پیدا کردن جایگزین مناسبی باشید.عدم پشتیبانی از جوین ها و ساب کوئری ها:بسیاری از توسعه دهندگان اتکا و یا نیاز سنگینی به استفاده از JOIN ها دارند، اگر داده های شما به ترتیبی ذخیره می‌شوند که نیاز به استفاده از JOIN ها دارید، بهتر است به فکر پیدا کردن جایگزین مناسبی باشید.نتیجه گیری:انتخاب دیتابیس صحیح یک امر کاملا نسبی است.. قبل از انتخاب و یا مهاجرت به یک دیتابیس باید کاملا تمام جنبه ها و تمام تغییرات احتمالی در روند ذخیره سازی و بازکشی داده ها را بررسی کرد. همچنین ساختار عملکرد خود دیتابیس نیز از اهمیت زیادی برخوردار است.برای مثال به تفاوت های موجود بین کاساندرا و یکی از رقبای قدرتمندش یعنی مانگو دی‌بی دقت کنید: مدل کلاسترینگ در مانگو دی‌بی به شکل اولیه-ثانویه (Master-Slave) است; اگر نود اولیه down شود یکی از نود های ثانویه وظایف آن را به عهده می‌گیرد.. اما یک تاخیر در این بین اتفاق می‌افتد و باعث می‌شود در یک بازه ۳۰ تا ۶۰ ثانیه ای سرور دیتابیس به هیچ درخواستی پاسخ ندهد... اما این پروسه در کاساندرا متفاوت است: کاساندرا به جای داشتن یک نود اولیه، از چندین نود اولیه در یک کلاستر استفاده می‌کند. که باعث میشود downtime به حداقل برسه و High Availability ممکن بشه. مدل داده مانگو دی‌بی به صورت شئ محور و سند گرا طبقه بندی می شود. این بدان معناست که می تواند هر نوع ساختار شئ را که می تواند ویژگی هایی داشته باشد یا حتی برای چندین سطح تو در تو باشد ، را ذخیره و نشان دهد... از طرف دیگر کاساندرا مدل سنتی تری را دنبال می‌کند: جدولی با استفاده از سطر ها و ستون ها; که این ستون ها در حین ساخت از یکی از دیتا تایپ های موجود کاساندرا استفاده کرده و پس از آن بیشتر بر ساختار داده ها تکیه می کند.عامل متمایز کننده دیگر وجود Query Language است... برای اعمال هر عملیانی در مانگو دی‌بی از یه ساختار JSON استفاده میشه; در صورتی که کاساندرا زبان کوئری خودش (CQL) رو داره که شبیه به SQL هست اما محدودیت هایی هم داره.مورد دیگر نیاز یا عدم نیاز به فریم‌ورک داخلی برای تجمع داده ها (built-in aggregation framework) است. مانگو دی‌بی دارای یک چارچوب تجمع داخلی است، که به آن اجازه میدهد سند ها را به نتایج متراکم تبدیل کند... در حالی که کاساندرا برای این کار به ابزارهای خارجی مثل Hadoop و Spark متکی است.کیفیت ایندکس های ثانویه تعیین می‌کند که چگونه می توانید به طور کارآمد به داده های موجود در دیتابیس دسترسی پیدا کنید. میزان پشتیبانی این ایندکس ها در MongoDB و Cassandra یکسان نیست... می‌بینید که با وجودی که هر دو این دیتابیس ها از نوع NoSQL هستند، اما باز هم تفاوت های بنیادی زیادی دارند..