NOSQL(برنامه نویسی)
NoSql سرنام کلمه (Not Only SQL ) میباشد، نسل بعدی پایگاه داده (نسل از بعد RDBMS)

در تعریفی که سایت http://nosql-database.org/ انجام داده است، عبارت NOSQL دارای ویژگی های زیر میباشد:
۱- دادهها در این سیستم به صورت رابطهای (جدولی) نمیباشند
۲-دادهها به صورت توزیع شده نگهداری میشوند.
۳-سیستم نرمافزاری متن باز میباشد.
۴-پایگاه داده مقیاس پذیر به صورت افقی میباشد(در مطالب بعدی توضیح داده خواهد شد.)
این نوع پایگاه داده به منظور رفع نیازهای برنامههای با حجم ورود و خروج داده بسیار بالا (برنامههای مدرن وب فعلی) ایجاد شدند.
شروع کار پیادهسازی این سیستمها در اوایل سال ۲۰۰۹ شکل گرفت و با سرعت زیادی رشد کرد و همچنین ویژگیهای کلی دیگری نیز به این نوع سیستم اضافه شد، این ویژگیها عبارتند از:
-
Schema-free : بدون شَما ! ، با توجه به برنامههای وبی فعلی ممکن است شمای نگهداری دادهها ( ساختار کلی ) مرتبا و یا گهگاهی تغییر کند. لذا در این سیستمها اصولا دادهها بدون شمای اولیه طراحی و ذخیره میشوند. ( به عنوان مثال میتوان در یک سیستم که مشخصات کاربران وارد سیستم میشود برای یک کاربر یک سری اطلاعات اضافی و برای کاربری دیگر از ورود اطلاعات اضافی صرفنظر کرد ، و در مقایسه با RDBMS به این ترتیب از ورود مقادیر Null و یا پیوندهای بیمورد جلوگیری کرد.
کنترل اطلاعات الزامی توسط لایه سرویس برنامه انجام میشود. ( در زبان جاوا توسط jsr-303 و یاBean Validation ها) - easy replication support : در این سیستم ، نحوهی گرفتن نسخههای پشتیبان و sync بودن نسخههای مختلف بسیار ساده و سر راست میباشد و سرور پایگاه داده به محض عدم توانایی خواندن و یا نوشتن از روی دیسک سراغ نسخهی پشتیبان میرود و آن نسخه را به عنوان نسخهی اصلی در نظر میگیرد.
- Simple API : به دلیل متنباز بودن و فعال بودن Community این سیستمها APIهای ساده و بهینهای برای اکثر زبانهای برنامهنویس محبوب ایجاد شده است که در پستهای بعدی با ارائه مثال آنها را بررسی خواهیم کرد.
- eventually consistent : در سیستمهای RDBMS که دادهها خاصیت ACID را ( در قالب Transaction) پیاده میکنند ، در این سیستمهای دادهها در وضعیت BASE قرار دارند که سرنام کلمات Basically Available ، Soft State ، Eventual Consistency میباشد.
- huge amount of data: این سیستمها به منظور کار با دادههای با حجم بالا ایجاد شدهاند ، یک تعریف کلی میگوید اگر مقدار دادههای نگهداری شده در پایگاههای داده برنامه شما ظرفیتی کمتر از یک ترابایت داده دارد از پایگاه داده RDBMS استفاده کنید واگر ظرفیت آن از واحد ترابایت فراتر میرود از سیستمهای NOSql استفاده کنید.
سیستم NoSql به جهت دستهبندی نحوهی ذخیرهسازی دادهها و ارتباط بین آنها به ۴ دسته کلی تقسیم میشود، که به ترتیب پیچیدگی ذخیرهسازی دادهها عبارتند از:
- Key/Value Store Databases
- Document Databases
- Graph Databases
- Column Family Databases
در حالت کلی در پایگاههایداده NoSQL دادهها در قالب KEY/VALUE (کلید/مقدار) نگهداری میشوند ، به این صورت که مقادیر توسط کلید یکتایی نگاشت شده و ذخیره میشوند، هر مقدار صرفا توسط همان کلید نگاشت شده قابل بازگردانی میباشد و راهی جهت دریافت مقدار بدون دانستن کلید وجود ندارد . در این ساختارداده منظور از مقادیر، دادههای اصلی برنامه هستند که نیاز به نگهداری دارند و کلیدها نیز رشتههایی هستند که توسط برنامهنویس ایجاد میشوند.
به دلیل موجود بودن این نوع ساختار دادهای در اکثر کتابخانههای زبانهای برنامهنویسی ( به عنوان مثال پیادهسازیهای مختلف اینترفیس Map شامل HashTable ، HashMap و موارد دیگر در کتابخانههای JDK ) این نوع ساختار برای اکثر برنامهنویسان آشنا بوده و فراگیری آن نیز ساده میباشد.
بدیهی است که اعمال فرهنگ دادهای ( درج ، حذف ، جستجو ) در این سیستم به دلیل اینکه دادهها به صورت کلید/مقدار ذخیره میشوند دارای پیچیدگی زمانی (1)O میباشد که بهینهترین حالت ممکن به لحاظ طراحی میباشد. همانگونه که مستحضرید در الگوریتمهایی که دارای پیچیدگی زمانی با مقدار ثابت دارند کم یا زیاد بودن دادهها تاثیری در کارایی الگوریتم نداشته و همواره با هر حجم دادهای زمان ثابتی جهت پردازش نیاز میباشد.
* برای اطلاع از اینکه چه زمانی بهتر است از بانکهای اطلاعاتی NoSQL استفاده کرد و چه زمانی خیر؟ به این لینک بروید
تگ ها
nosql, sql, بانک اطلاعاتی