PDA

View Full Version : به چه دلیل باید از پایگاه داده مونگو استفاده کنم؟



Amir-Shabani
چهارشنبه 22 آبان 1392, 19:47 عصر
سلام بر همه دوستان.
عزاداری هایتان مقبول؛ ان شاء الله

توی این تاپیک در مورد تعاریف مختلف سیستمهای nosql (http://barnamenevis.org/showthread.php?425006-%D8%AA%D8%B9%D8%A7%D8%B1%DB%8C%D9%81-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85%D9%87%D8%A7%DB%8C-%D9%85%D8%AD%D8%AA%D9%84%D9%81-NoSQL-%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%AF%D8%B1-%DA%86%DB%8C%D8%B3%D8%AA%D8%9F) سئوال کرده بودم. همه اینها فقط تعاریف کلی هستند.

سئوالی که دارم این هست که برای چه دلیلی باید از پایگاه داده 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)!




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

مبین رنجبر
پنج شنبه 23 آبان 1392, 09:14 صبح
دوست عزیز پاسخ پرسش شما در تاپیکی که خودتان هم ایجادش کرده بودید داده شده است : تعاریف مختلف سیستمهای nosql (http://barnamenevis.org/showthread.php?425006-%D8%AA%D8%B9%D8%A7%D8%B1%DB%8C%D9%81-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85%D9%87%D8%A7%DB%8C-%D9%85%D8%AD%D8%AA%D9%84%D9%81-NoSQL-%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%AF%D8%B1-%DA%86%DB%8C%D8%B3%D8%AA%D8%9F) و لطفا تاپیک های تکراری ایجاد نکنید.

cups_of_java
پنج شنبه 23 آبان 1392, 12:05 عصر
ببین هر کدوم اینا تو جزییات فرقایی دارن که باعث میشه برای یه سری شرایط بهتر از دیگری فیت بشن.
مثلن جایی که ماندگاری دیتا برات ارزش کمتری داره و بیشتر نگهداری موقت و دسترسی سریع به شکل های مختلفی از دیتا برات مهمه 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 خیلی به کمکت میاد...