# پایگاه‌های داده > NoSQL >  NOSQL + SQL SERVER

## gholzam

با سلام 

من با SQL SERVER کار می کنم و  با کار NOSQL هم کمی آشنا هستم و کارکردم تا حدودی اما نمی دونم آیا برای یک سایت ، مثل یک شبکه اجتماعی باید فقط از NOSQL استفاده کنم و یا از NOSQL هم برای کش کردن داده و هم ذخیره و تغییر دائمی روی SQL SERVER ، چون سایت هایی مثل Facebook این کار رو با 1800  mysql و NOSQL انجام می ده،  من این رو متوجه نشدم چرا وقتی  NOSQL خودش توی هارد داده ذخیره می کنه، باید از MySQL هم استفاده کرد و حالا اگر ضرورت داره من چطور باید SQL SERVER و مثلا Redis رو مثل StackOverflow در کنار هم استفاده کنم؟ (یعنی برای برنامه نویسی چه الگوریتمی باید بچینم ) , و اینکه چرا از NEWSQL  استفاده نکنم؟

با سپاس فراوان

----------


## مبین رنجبر

> با سلام 
> 
> من با SQL SERVER کار می کنم و  با کار NOSQL هم کمی آشنا هستم و کارکردم تا حدودی اما نمی دونم آیا برای یک سایت ، مثل یک شبکه اجتماعی باید فقط از NOSQL استفاده کنم و یا از NOSQL هم برای کش کردن داده و هم ذخیره و تغییر دائمی روی SQL SERVER ، چون سایت هایی مثل Facebook این کار رو با 1800  mysql و NOSQL انجام می ده،  من این رو متوجه نشدم چرا وقتی  NOSQL خودش توی هارد داده ذخیره می کنه، باید از MySQL هم استفاده کرد و حالا اگر ضرورت داره من چطور باید SQL SERVER و مثلا Redis رو مثل StackOverflow در کنار هم استفاده کنم؟ (یعنی برای برنامه نویسی چه الگوریتمی باید بچینم ) , و اینکه چرا از NEWSQL  استفاده نکنم؟
> 
> با سپاس فراوان


سپاس از مطرح کردن این سوال.ما در مورد تکنولوژی ها و روش موجود که در حال استفاده می باشند بایدی نداریم.یعنی اینکه هیچ وقت نمیشه گفت برای یک سایت و یا به طور کل داده باید از NoSQL استفاده کرد و یا از دیتابیس های رابطه ای.این نوع داده و نوع کاربرد داده ها هستند که مشخص میکنند کجا از چه روشی استفاده شود.همونطور که خودتون هم ذکر کردید سایت های مثل فیسبوک و یا توییتر صرفا از NoSQL و یا از انواع دیگر استفاده نمیکنند.بلکه حتی به صورت ترکیبی از همدیگر استفاده می شوند.در بخشی از مسئله شما داده ها بدون ساختار هستند و با Big Data ها مواجه می شوید.برای اینکار به دلیل ناتوانی و نامناسب بودن این روش باید از روش های مناسب استفاده کرد.
پس در مورد سایتی که مثال زدید باید دید با چه داده هایی و با چه حجمی و اهمیتی درگیر هستید و درست انتخاب کرد.برای ذخیره سازی داده هایی که با مفهوم جدول و فیلد و رکورد به خوبی میشود آنها را پیاده سازی کرد اشتباه محض است که از روش های NoSQL استفاده کرد.

در مورد NewSQL هم باید بگم در مقایسه با NoSQL انتخاب های کمتری خواهیم داشت.چون جنبش NoSQL دنیای بزرگ تر و متنوع تری را خواهید داشت.ولی خوب در کنار NoSQL میتونه انتخاب دومی هم باشه.

----------


## gholzam

> سپاس از مطرح کردن این سوال.ما در مورد تکنولوژی ها و روش موجود که در حال استفاده می باشند بایدی نداریم.یعنی اینکه هیچ وقت نمیشه گفت برای یک سایت و یا به طور کل داده باید از NoSQL استفاده کرد و یا از دیتابیس های رابطه ای.این نوع داده و نوع کاربرد داده ها هستند که مشخص میکنند کجا از چه روشی استفاده شود.همونطور که خودتون هم ذکر کردید سایت های مثل فیسبوک و یا توییتر صرفا از NoSQL و یا از انواع دیگر استفاده نمیکنند.بلکه حتی به صورت ترکیبی از همدیگر استفاده می شوند.در بخشی از مسئله شما داده ها بدون ساختار هستند و با Big Data ها مواجه می شوید.برای اینکار به دلیل ناتوانی و نامناسب بودن این روش باید از روش های مناسب استفاده کرد.
> پس در مورد سایتی که مثال زدید باید دید با چه داده هایی و با چه حجمی و اهمیتی درگیر هستید و درست انتخاب کرد.برای ذخیره سازی داده هایی که با مفهوم جدول و فیلد و رکورد به خوبی میشود آنها را پیاده سازی کرد اشتباه محض است که از روش های NoSQL استفاده کرد.
> 
> در مورد NewSQL هم باید بگم در مقایسه با NoSQL انتخاب های کمتری خواهیم داشت.چون جنبش NoSQL دنیای بزرگ تر و متنوع تری را خواهید داشت.ولی خوب در کنار NoSQL میتونه انتخاب دومی هم باشه.


 سپاس از پاسخ شما . حالا اگر بخواهیم Redis و SQL SERVER را در کنار هم به کار ببریم چه باید کرد. چگونه این دو را با هم در یک حالت بهینه ترکیب کنیم و الگوریتم کار چگونه خواهد بود.

----------


## مبین رنجبر

> سپاس از پاسخ شما . حالا اگر بخواهیم Redis و SQL SERVER را در کنار هم به کار ببریم چه باید کرد. چگونه این دو را با هم در یک حالت بهینه ترکیب کنیم و الگوریتم کار چگونه خواهد بود.


اینطور که من تحقیق کردم یک سری پروژه های اوپن سورسی وجود داره برای ارتباط کلاینت Redis و پلتفرم دات نت.برای مثال میتونید به لینک زیر مراجعه کنید:

https://github.com/ServiceStack/ServiceStack.Redis

و همینطور عرض کنم که حالت آماده و بهینه ای رو نمیشه معرفی کرد.دنیای NoSQL دنیای تحقیقات و تجربه هست به خاطر همین من در مورد همه چیز اطلاعات ندارم.من سر نخ هارو معرفی میکنم و شما بسته به کاری که میخواهید انجام دهید باید تحقیق کنید.

----------


## cups_of_java

استفاده از انواع تکنولوژی های دیتابیس به این معنی نیست که شما یک داده رو اول تو NoSQL نگهداری و بعد توی SQL Server دائمیش کنی! بلکه به این معنی هست که داده کلن به چند بخش تقسیم میشه و هر بخش تو جای خودش قرار میگیره!
همون طور که دوستمون گفت داده های حجیم، داده های ذاتن بدون شما یا قبل تغییر به مرور زمان، .... اصولن با NOSQL بهتر مدیریت میشن و شما دیگه توی SQL Server یا هر RDBMS دیگه ای نگهشون نمیداری. داده های جدولی هم توی RDBMS شما قرار میگیرن. به طور کلی ایده موضوع رو باید بگیری! بعد تصمیم گیری کنی. شما ممکنه کارت با یه تکنولوژی هم راه بیفته! بوده پروژه ای که ما توش فقط از NoSQL استفاده کردیم. بوده مواردی هم که Hybrid استفاده کردیم. 
ضمنن توجه کن که با Hybrid کردن تکنولوژی ها، اگه درست و مهندسی شده این کار و انجام ندی و هر داده ای جای درست خودش قرار نگیره، برای خودت توی توسعه کد برنامت دردسر درست کردی! و توی نگهداری نرم افزارت اذیت میشی!

اما در مورد Redis که گویا قصد استفاده ازش داری: 
redis بیشتر به عنوان Cacheسرور استفاده میشه نه Database! البته شما میتونی مدت زمان Snapshot گرفتن داده های توی مموری رو به بازه زمانی دلخواه خودت نزدیک کنی که اطلاعات ذخیره بشه. اما مشکل اساسی اینه که ردیس اطلاعات رو توی مموری نگه میداره و برای کار های بزرگ، مموری سرور شما پر میشه و مناسب نیست این کار برای ماندگاری اطلاعات! (Data Persistence) ما از ردیس استفاده کردیم به عنوان نگهداری کننده اطلاعات موقت! به عنوان Cache می تونی استفاده کنی ازش جلوی هر پایگاه داده ای که بخوای! 
اگه دوست داشتی می تونی با من مشورت کنی، نمی دونم چرا می خوای از Redis استفاده بکنی؟ چون اینکارها مال سایت های خیلی پر بازخورد (مثل Facebook) و یا کار های تو مقیاس خیلی بزرگ هستش. در خیلی موارد شما نیازی بهش نداری.

----------

