سلام استاد .
این سوال رو به خاطر اینکه چندین تا چیز میدونم و بعضی چیزا شنیدم و هنوز کار نکردم می پرسم و می تونستم یه جوری یه روش برای خودم درست کنم ولی گفتم شما بهترین رویش رو بپرسم و سوالات مربوط به طراحی پایگاه داده هست.
1- فرض کنید در مانگو دی بی ما 8 مدل (ماشین ،کتاب,منزل و...) داریم . همون جور که میدونید کاربر وقتی سرچ میکنه ما فقط در یک مدل می تونیم سرچ رو انجام بدیم.
---آیا باید به هر 8 تا تا مدل Query زده و در صورت پیدا کردن جواب پاسخ رو برگشت بدیم ؟ آیا این در یک دیتابیس که میلیون تا سند وجود داره کاره منطقی هست؟
----آیا باید یک مدل علاوه بر 8 مدل بالا بسازیم و و این ها رو به صورت یک کیلد و مقدار جی سان ذخیره کنیم و با یک در خواست به این جی سان عظیم در خواست بدیم .(البته اگه حجم بالا باشه ما باید از elasticsearch استفاده کنیم.اگه این دو نه پس چیع؟
2- در مانگو دی بی بیشتر از 16 مگ نمی توان فایل ذخیره کرد در یک مدل. آیا بعد از پر شدن 16 مگ خود دی بی یک مدل می سازد؟ خودم هر روز باید مانیتورینگ کنم و حواسم باشه و به صورت هارد کد بسازم؟ باید از قبل مدلی که حدس میزنم فرارتر از این مقدار بره رو با cron-job به صورت پویا رصد کنیم و اگه فراتر از 16 مگ رفت یک کالکشن بسازم به نام جدید .حالا فرض کنیم شدم 2 مدل 16مگ برای مثلا ماشین. همون جور که می دونین findOne داریم باید بیام و خودم به صورت دستی بنویسم برا 2 مدل find one یا مثلا ببین با این Regex چن تا مدل داریم برو توشون findOne کن؟
استاد بانک ها که ماهانه مثلا1 بیلیون سند ذخیره میکنن باز هم یک دونه mongodb دارن با چندین model یا چندین database mongodb با n مدل در دل خود ؟
سلام دوست من
۱ - کاربر یهو همه موارد رو باهم جستجو که نمی کنه مثلا در بخش ماشین جستجو کرد میام در کالکشن ماشین ها دنبالش میگردیم و ...
اصولا در اپلیکیشن ها بزرگ به این صورت نیست و سیستمی رو مخصوص برای جستجو پیاده سازی میکنن همانطوری که خودتون هم مثال زدید مثلا elasticSearch تا اکثر موارد در بخش آماده باشن تا در پایگاه داده جستجوی زیادی انجام نشه
حالا خیلی روش هست مثلا در برخی موارد ما در کنار اینکه پایگاه داده مثلا مانگو داریم میان از redis هم استفاده میکنن که در حافظه ram کار میکنه و داده هارو اونجا قرار میده تا سیستمی پیاده سازی بشه که مواردی که بیشتر جستجو میشن درون redis قرار بگیره که سرعت بسیار بیشتری داره
کلا این مورد که چطور بیایم جستجوی عالی پیاده سازی کنیم بحث بسیار طولانی ای و پیچیده ایی داره که خیلی ها تنها در این زمینه تخصص دارن و بیشتر توسط کسانی که تنها کارشون کلان داده و تنها پایگاه داده هست پیاده سازی میشه
چون تنها شرکت های بزرگ با اپلیکیشن های بسیار بزرگ نیازمند چنین سیستم هایی هستن
حالا شما یک اپلیکیشنی داری که قرار هست در آینده بسیار بزرگ بشه پس انتخاب پایگاه داده بسیار مهم هست و بیشتر برای چنین اپلیکیشن های بسیار بزرگ نمیایم بگیم که از مانگو دی بی استفاده کنید مگر اینکه اپلیکیشن بسیار ساده ایی باشه ولی با کلی کاربر اما اگر نیازمند داده های بسیاری هست پس نیازمند رابطه های یا relation بسیار هست پس پایگاه داده SQL بیشتر به دردشون میخوره.
- هیچوقت ما نمیام به یکباره JSON عظیمی پر از داده دریافت کنیم این کار اصلا درست نیست و باید آهسته آهسته در پشت پرده دریافت بشه ولی خوب اگر بخوایم که سرور درون این json عظیم موردی رو برای ما پیدا کنه چی ؟
همانطوری که گفتم برای این داده های عظیم باید از تکنولوژی هایی مثل elasticSearch یا غیره استفاده کنیم و در کنارش سیستم cache هم پیاده سازی بشه که بیشتر مواردی که جستجو میشه درونش قرار بگیره
سوالاتی که پرسیدی رو نمیشه قطعی گفت که تنها این روش هست و اون روش بلکه خیلی روش ها با خیلی دیزاین سیستم ها موجود هست که باید خودت جستجو کنی و در موردشون یاد بگیری
- درسته آخرین سایز یک داکیومنت در مانگو دی ۱۶ مگ هست ولی میشه توسط GridFs بیشتر از این هم رفت و به قطعات کوچکتری تقسیم کرد ولی بیشتر از این بستگی به دیزاین سیستمی هست که پیاده سازی کردی مثلا در خیلی مواردی که من دیدم در پایگاه داده مواردی ذخیره شده که اصلا نیازی نیست یا اینکه تقسیم این موارد در کالکشن خودشون باعث میشه که خیلی حجم بیاد پایین
نمیتونی مدام در حال مانیتورینگ باشی که کی به ۱۶ مگ رسید تا کالکشن جدید بسازم بلکه باید به صورت داینامیک انجام بشه تا مشکلی در روند کار برنامه پیش نیاد
اصولا بانک نمیاد از مانگو دی بی استفاده کنه چون خیلیییییی Relation دارن و پیاده سازی رابطه زیاد در مانگو دی بی که پشتیبانی نمیکنه و توسط Mongoose شبیه سازی میشه خیلی روی سرعت تاثیر خواهد داشت پس از پایگاه داده های SQL استفاده میکنن و چنان سرورهای عظیم و پر سرعتی دارن که جوابگوی این همه درخواست هست.
شاید الان نگران این باشیم که چقدر مثلا مانگو دی بی در جستجو کردن میتونه جواب بده ولی نیازی به نگرانی زیاد نیست چون مانگو دی بی در کوئری سرچ بسیار سریع هست و در میلی ثانیه میتونه در کلی داده موردی که هست رو پیدا کنه و نمایش بده
انشاالله در ادامه دوره نود جی اس سعی میکنم در این مورد صحبت کنیم و چیزی نیست که تنها اینجا بشه بهش جواب داد
موفق باشید