# پایگاه‌های داده > NoSQL >  به چه دلیل باید از پایگاه داده مونگو استفاده کنم؟

## Amir-Shabani

سلام بر همه دوستان.
عزاداری هایتان مقبول؛ ان شاء الله

توی این تاپیک در مورد تعاریف مختلف سیستمهای nosql سئوال کرده بودم. همه اینها فقط تعاریف کلی هستند.

سئوالی که دارم این هست که برای چه دلیلی باید از پایگاه داده MongoDB که یک پایگاده داده سند گرا هست  استفاده کنم. به طور واضح تر پایگاه داده CouchDB هم سند گرا هست ولی چه ویژگی باعث میشه که شما کوچ رو انتخاب نکنید؟
مونگو چه ویژگی بارز و یکتایی داره که از  سایر پایگاه داده ها جدا میشه؟
اگه قرار به free schema بودن باشه که این ویژگی مختص NoSQL هست.
عدم پشتیبانی از ACID هم که یکی دیگر ار ویژگی های nosql هست. این هم یونیک نیست

اگه از دیدگاه تئوری CAP هم نگاه کنیم پایگاه داده هایی مثل bigtable, hbase و redis مانند مونگو مناسب C-P هسنند. چرا نرم از Redis استفاده کنم؟
چند سکویی هم که خب! خیلی ها هستند....

میدونم که هر کدوم از این مدلها مناسب برای حل یک مساله خاص میباشند. اما مسائلی که با مونگو حل میشن شامل چه ویژگی هایی هستند که فقط مونگو توان حلش رو داره؟ چرا بقیه ندارن؟
در مورد امنیت و سرعت هم اطلاعاتی زیادی ندارم...


به جواب چنین چیزی رسیدم ولی در مورد redis
یک پایگاه داده سند گرای چند سکویی، ذخیره اطلاعات روی رم، مناسب برای نگه داری آخرین پرسجو ها. ولی این هم زیاد کامل نیست

این سئوال رو هم از انجمن مونگو در گروه های گوگل پرسیدم اما باز هم این به نظرم جوابی که دادن خیلی ویژگی بارز و یونیکی نبود. جواب هم این هستش



> mongodb is the gap from SQL to NOSQL, people understand SQL, they will feel at home using mongodb!
> mongodb is the ONLY dbms running on windows, all others are using cygwin or 'to use only for tests'
> mongodb  is not made on java! personal point of view here! java is sh*t, and  this is why i choosed 'blindly' mongodb, espetialy that i come from  python!
> mongodb has the console running on javascript, map reduce uses V8, so if you are a web dev, then you're at home!
> the  problem with CAP theorem and ACID is that Nosql solution finds how to  baypass the BASE constraints, and tend to be more ACID! the problem is  that web is full with OLD documents! so you will find something that is  not supported in mongodb, but it's not the case, after the update X.Y  this feature is  available on mongodb! for example, map reduce, you will  find in some books or old documents that is not paralyzed, this is due  to old Mozilla engine! now it uses Google's V8 (node.js as example)!



خیلی ممنون از جواب هایتان

----------


## مبین رنجبر

دوست عزیز پاسخ پرسش شما در تاپیکی که خودتان هم ایجادش کرده بودید داده شده است : تعاریف مختلف سیستمهای nosql و لطفا تاپیک های تکراری ایجاد نکنید.

----------


## cups_of_java

ببین هر کدوم اینا تو جزییات فرقایی دارن که باعث میشه برای یه سری شرایط بهتر از دیگری فیت بشن. 
مثلن جایی که ماندگاری دیتا برات ارزش کمتری داره و بیشتر نگهداری موقت و دسترسی سریع به شکل های مختلفی از دیتا برات مهمه Redis گزیته بهتریه (مثل Cacheها یا Job Queueها) اما وقتی نگهداری اطلاعات برات خیلی مهم باشه اون وقت Redis چون بیشتر روی حافظه سیستم تاکید داره تو حچم بالا دچار مشکل می کنه کارتو...
CouchDB و MongoDB مدتهاست که رقیب هم شدن و به نوعی دعوا دارن باهم سر جلو زدن از هم دیگه... اگه دقت کنی توی جواب هایی که بهت دادن به یه سری نکات که درست هم هست اشاره کردن:
1) MongoDB از Couchdb امکانات و پیچیدگی های بیشتری داره یعنی بزرگ تره! این باعث میشه که یه سری امکانات مثل انواع جستجو ها روی اطلاعات و ایندکس های اولیه رو داشته باشی که تو Couchdb نداری.
2) MongoDB بیشتر از Couchdb نزدیک دنیای SQLی هاست کار کردن باهاش ملموس تره به خاطر همین. (واسه همین گفتن بهت دنیای SQL و NoSQL رو بهم وصل می کنه)
2-1) MongoDB درایور هاش native هستن اما Couchdb کاملن HTTP هست.
3) Couchdb خیلی راحت و ساده نصب و آماده کار میشه. نگهداریش تجربه خاص خودشو می خواد اما خیلی سادست.
4) Couchdb کاملن HTTP RESTFUL هستش و خودش یه وب سرور هم هست. یعنی دیتابیسی برای وب! شما میتونی web appهات رو توی دیتابیست بزاری کنار دیتات!!! این یعنی بدون Middleware کار کنی... این یه مدل معماری خاص بهت میده که دنیای Couchdb مطرحش کرده و توی برنامه های موبایل خیلی مانور میده. این معماری سادگی و قابلیت مقیاس پذیری بالایی بهت میده.
5) Couchdb سرعت خوندن از viewهاش بسیار بالاست (با Mongo مقایسه نکردم) اما شما می تونی از بین صدها میلیون رکورد زیر نیم ثانیه اطلاعات خودت رو بکشی بیرون بر اساس Viewهات.
6) Couchdb روی حافظه سیستم خیلی خوب پهن میشه. می تونه روی یه گوشی نصب شه می تونه روی یه سرور غول پیکر هم نصب شه و تو هر کدوم بسته به شرایط بزرگ و کوچیک میشه.

انتخاب بین اینا به شرایط مسلت خیلی ربط داره... اما گاهی ام فرق نمی کنه کدوم و استفاده کنی. من CouchDB رو خیلی استفاده کردم Redis رو هم همینطور... Mongo رو نه هنوز. تنها محدودیتی که توی Couchdb منو خیلی اذیت کرده گاهی، نبود امکان جستجو های پیشرفته بوده... یعنی بتونی بین چند تا شرط که دینامیک انتخاب میشن AND بزاری و توی دیتا بگردی... 
از نظر جچم نگهداری روی Couchdb حافظه زیادی مصرف می کنه Mongo رو مقایسه نکردم.
از نظر Clustering هم Couchdb هنوز Cluster نشده اما قرار هست که (با BigCouch که مدل Clusteredش هست) بشه اما مدل های Master-Master و Master-Slave در Replication رو به سادگی و راحتی پشتیبانی می کنه.

کلن توی محیط هایی که شما عملیات Readت بیشتر باشه از Update و به داده کاوی حجم بالایی از اطلاعات نیازمند باشی Couchdb خیلی به کمکت میاد...

----------

