# پایگاه‌های داده > SQL Server > مدیریت دیتابیس (Database Administration) >  تقسیم بار بروی سرور های مختلف

## nafasak

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

لطفا هرگونه راهنمایی، سرنخ ، نام روش، توضیح، روشهای بهتر و بهینه ، لینک و ... هر چیزی که به نظر لازمه که بدونم رو به من بگید.
یا حتی اینکه آیا در مثلا پروسیجر Insert باید به روش خاصی کد بزنم یا نه رو هم راهنمایی بفرمایید.

ممنون..

----------


## micro24

سلام

Cluster را مطالعه کنید

----------


## in_chand_nafar

دوست عزيز SQL Server عملا از  LoadBalanced  كلاستر (NLB) پشتيباني نمي كنه چون لود بالانس كلاستر فقط در برنامه هايي جواب ميده كه State Less باشند مثل IIS و ساير سرويس هاي ويندوز اما شركت هايي اومدن و اينكار را در بانك اطلاعاتي خودشون انجام دادن مثل اوراكل  My SQL در اوراكل اين تكنولوژي RAC نام داره يه سر به اينجا بزن (و در ضمن جهت سلامتي مايكروسافت يه لعنت به اوركل بفرست)
خوب اما براي SQL Server راه حل چيست يه شركتي به نام SANBOLIC اين كار را انجام داده و 
اما مايكروسافت چي كار كرده توي نسخه 2008R2 به بالا و 2012 (ماه مارس مياد) اومده از تكنولوژي اوپن سورس Hadoop استفاده كرده 
اينجا سر برن ثواب داره 
اينجا بري طوري نميشه
خوب اگه اون دو لينك بالا رو خوندي يه سري مطلب در مورد اين پروژه و الگوريتمش گير آوردي
يه سري هم به سايت مايكروسافت بزن
http://blogs.msdn.com/b/uk_faculty_c...ows-azure.aspx
http://www.microsoft.com/download/en....aspx?id=27584
--------------------------------
ببين دوست اون داستان هاي كه بالا گفتم رو يه خورده فراموش كن سناريوي خودت رو بيشتر توضيح بده تا بهتر راهنمايي بشي در ضمن SQL Server را دست كم نگير 
همين جوريش هم كلي جوابت رو ميده در ضمن به نظر من اگر مي خواهي توي ساير لايه هاي برنامه ات مثل لايه سرويس ها مثل بيزنس لاير و ديتا لاير اين كار را انجام بده 
بهتر كه سناريوي خودت رو بنويسي تا بيشتر راهنمايي بشي در ضمن اگر خواستي Hadoop رو محض آزمايش و.. راه بياندازي پيام خصوصي بده تا يه پروژه تعريف كنيم يه خورده سرم براي تحقيق و... درد مي كنه
موفق باشي از نحوه نوشتن جملاتم ناراحت نشو چون امروز كمي حوصله ندارم
خداحافط علي يارت

----------


## nafasak

خیلی ممنون از توضیحات خوب شما،

همونطور که گفتی بهتر کمی بیشتر توضیح بدم، صورت مسئاله اینه ،
یه سایت خیلی بزرگ شبیه فیس بوک با کلی امکانات که در لحظه کلی درخواست به سمت سرور میاد.
 من در نظر گرفتم که از چند دیتابیس استفاده کنم. یکی برای ثبت نام و  اطلاعات حیاتی کاربر، یکی برای اطلاعات ثانوی کاربر مثل کامنت هاش و فایلاش  و ... 
(البته اینو بگم میخوام خیلی قوی کار کنم برای همین ممکنه سوالات عجیب و غریبی که به فکرم میرسه رو هم اضافه کنم ، شما ببخشید...)
1- آیا اینکه از چند دیتابیس بسته به طبقه بندی کلی از نظر درخواست استفاده بشه خوبه؟؟
خب، حالا در دیتابیس دوم گروه زیادی از کاربران با هم میخوان LIKE بزنن اما  برای نوع های مختلفی از قبیل عکس، کامنت، پروفایل و ... که هر کدوم برای  خودشو یک جدول جداگانه دارند.
2- آیا بهتره جدول Like برای هرکدام از نوع هایی که گفتم جداگانه بسازم یا  اینکه یک جدول Like داشته باشم و با یک فیلد مثلا Type رکوردهارو جدا کنم.
3- حالا در حالت دوم در این لحظه که این همه درخواست برای یک SP میاد Hadoop یا چیزی مثل اون درخواست هارو کنترل میکنه؟
4- توی کد من چیکار باید انجام بدم؟ یا توی spها و جداول؟

...فعلا همین...
ممنون

----------


## in_chand_nafar

خوب غكر كنم شايد سناريوي شما بيشتر آزمايش و... باشه تا واقعي چون ما توي ايران واقعا Solution نداريم كه Hadoop و... را بتوان توي اون استفاده كرد يكي از راه هاي فسقلي و آسان و معمولي كه من خودم هم به ازاي تهيه گزارش هاي يكپارچه چند بانك اطلاعاتي استفاده كردم
Distribute Query‌است اطلاعات روي چند سرور ذخيره شذه با اين روش همه اطلاعات را از روي اين چند تا كشيدم بيرون و...
اما بيشتر پردازش اصلي در اين حالت روي سروري است كه اطلاعات را Merge‌مي كند
اما بد نيست بري دنبال اين موضوع كه در زير مي بيني (البته باز روشي نيست كه واقعا بار پردازشي را مثل Hadoop و يا RAC مربوط به اوراكل مديريت كنه و...)
*Federated Database Servers*


*http://msdn.microsoft.com/en-us/libr...sql.80%29.aspx*

اگر خواستي در مورد Hadoop كار كني در مورد R&D و... مي تونيم با هم همكاري كنيم موفق باشيد

----------


## nafasak

بازم ممنون، 
راستش مسئاله آزمایش نیست.
مسئاله اینه که من میخوام تکنولوژی روز رو بدونم.
و اینه من به عنوان یک تولید کننده نرم افزار برای استفاده از این تکنولوژی باید چه تدابیری در کدنویسی (نرم افزار / دیتابیس) داشته باشم. یعنی چه کارهای مرسوم و جدید رو باید انجام بدم و چه کارهای مرسومی رو نباید انجام بدم،  مسئاله اصلا ایران نیست. مسئاله تکنولوژی روز برای یک کار بزرگه....
در مورد 4 تا سوال در پست قبل من 1 و 2 رو تا حدی فهمیدم که جدا سازی کار درستیه. باز هم اگه نظری دارید خوشحال میشم بفرمایید.
3 و 4 رو هنوز نمیدونم...
{
3- حالا در حالت دوم در این لحظه که این همه درخواست برای یک SP میاد Hadoop یا چیزی مثل اون درخواست هارو کنترل میکنه؟
4- توی کد من چیکار باید انجام بدم؟ یا توی spها و جداول؟
}

----------


## in_chand_nafar

اگر از Hadoop استفاده كنيد توي كد لازم نيست كاري انجام بديد روش كار Hadoop اين است كه بانك اطلاعاتي شما را بين سرور هاي مختلف پخش مي كند وقتي Insert انجام مي ديد خود به خود ديتا شما بين چندين سرور درج ميشه و وقتي Select مي كنيد اين ديتا از روي هر كدام از سرورها خونده ميشه (تعدادي از سرور 1 تعدادي از سرور 2 و.../دقيقا مثل RAID)  و در اختيار شما قرار مي گيره
Hadoop تقر يبا مشابه Google File System است شما در حالت عادي ايندكس ها و... را درست تنظيم كنيد در ضمن با مسائل مربوط به  SQL Tuning هم سعي كنيد آشنا شويد 
http://en.wikipedia.org/wiki/Apache_Hadoop (Google File System)
خيلي خوشحال مي شوم مي بينم توي انجمن بچه ها دنبال يه همچين مسائلي در حد Enterprise هستند 
موفق و مويد باشيد

----------


## v.hosseini2008

*با سلام خدمت همه دوستان.*

در پست ها از Hadoop صحبت شده بود ولی چیزی که من در این مورد میدونم این هست که Hadoop یک FrameWork هست که جهت آنالیز دیتا ها سنگین انجام میشه که در روش های سبک تر آن همان BI میباشد ،Hadoop از روش MapReduce جهت آنالیز استفاده میکنه که همان روش گوگل یا هو و ... میباشد اما مسئله که باید به آن دقت کرد اینه که ما قرار نیست Data  را آنالیز کنیم قرار هست که Data  را بر روی چندین سرور توزیع کنیم.جهت این توزیع همان طور که یکی از دوستان نقل کرده اند میشه که از Add Hoc Distribute Query‌ها مثل Linked Servers استفاده نمود و طبق یک الگوریتمی Data  را بر روی سرور های مختلف با توجه به Request  های ارسالی توزیع کرد و در زمان واکشی از Object  هایی مثل  Linked Servers یا OpenRowSet استفاده  نمود.

----------


## nafasak

شما منبع خاصی رو در رابطه با مطالبی که فرمودید سراغ دارید ؟

----------


## in_chand_nafar

برای تقسیم بار روش های مختلفی جهت تقسیم و انتقال دیتا روی سرورهای مختلف وجود داره
*1- Federation database :*توی Books Online مطلب کاملی درباره اون جود داره
یکی از این روش ها این است که شما بیس داده ها رو طوری در نظر بگیرین که عملا روی چند سرور تقسیم شده باشند 
برای مثال در جدول کاربران فرض می کنیم 60 میلیون رکورد قرار است ذخیره شود (هر چند این عملا برای SQL چیزی نیست) می گوییم از رکورد 1 تا 30 میلیون روی سرور A و از رکورد 30 میلیون به بعد در سرور B بعد با استفاده از Distribute Query و... اطلاعات را یه جا جمع می کنیم که بزرگترین مشکل این روش این است که شما عملا وقتی دارید دیتاها را در یک جا جمع می کنید بار پردازش اون رو روی یه سرور میگذارین
* 2 - Peer to peer Replication :* وقتی از این روش استفاده می کنید انگا یه شبکه فول مش دارین دیتا روی تمامی سرورها کپی در موقع واکشی داده ها برای پردازش می تونید با لود بالانسر و... کاربران را بین سرورهای مختلف پاس بدین اما مشکل این روش این است که عین دیتا شما در تمامی سرورها کپی میشه و بعدها و.... 

* 3- SQL Server 2012 :*عزیزم    	 	 		 			 			 				 	 یه سناریوی به نام HADR داره که تیو اون شما می توانید از انواع  روش های HA (ترکیبی و...) استفاده کنید در این حالت کافی است در این حالت فرض کنید که شما چندتا سرور دارین که روی یک Storage در حال کار هستند یکی از این سرور دسترسی کامل به بانک شما داره و مابقی سرورها Disaster اون هستن (تا زمان 2008 این طور بود ) اما در 2012 شما دسترسی Readonly به سایر نودها دارین ولی عملا شما باید یه Storage مشترک داشته باشین و .... البته لازم می دونم که فعلا دارم روی این قضیه با VM کار می کنم نظرات قطعی و... را در آینده Release خواهم کرد
* 4- Hadoop :* کلیه مواردی که در بالا گفتم از دوستانم شنیدم و واقعا آزمایش نکردم اما می دونم اون ها اینکاره بودن و.... در این مورد هم یه سری تحقیق می کنم و نتیجه رو می گم از دوست عزیزم                                                                      *v.hosseini2008*
می خوام که اگر منبع خوب و... که با این موضوع کار کرده باشه اطلاع رسانی کنند موفق باشید

----------


## in_chand_nafar

آقا ثواب کردی این بحث رو زنده کردی دو سه تا مطلب گیر آوردم و اگر خدا خواست یه سری سیستم خوب داره به دست میرسه برای تست این حالت در ضمن یه سری به اینجا بزن

http://facility9.com/2010/12/getting-started-with-hive/
https://ccp.cloudera.com/display/SUPPORT/Downloads
http://hadoop.apache.org/common/docs...uickstart.html
http://pages.cs.brandeis.edu/~cs147a/lab/hadoop-windows/
http://www.slideshare.net/Mathias-He...ig-syntax-card
http://hadoop.apache.org/

----------


## v.hosseini2008

> برای تقسیم بار روش های مختلفی جهت تقسیم و انتقال دیتا روی سرورهای مختلف وجود داره
> *1- Federation database :*توی Books Online مطلب کاملی درباره اون جود داره
> یکی از این روش ها این است که شما بیس داده ها رو طوری در نظر بگیرین که عملا روی چند سرور تقسیم شده باشند 
> برای مثال در جدول کاربران فرض می کنیم 60 میلیون رکورد قرار است ذخیره شود (هر چند این عملا برای SQL چیزی نیست) می گوییم از رکورد 1 تا 30 میلیون روی سرور A و از رکورد 30 میلیون به بعد در سرور B بعد با استفاده از Distribute Query و... اطلاعات را یه جا جمع می کنیم که بزرگترین مشکل این روش این است که شما عملا وقتی دارید دیتاها را در یک جا جمع می کنید بار پردازش اون رو روی یه سرور میگذارین
> * 2 - Peer to peer Replication :* وقتی از این روش استفاده می کنید انگا یه شبکه فول مش دارین دیتا روی تمامی سرورها کپی در موقع واکشی داده ها برای پردازش می تونید با لود بالانسر و... کاربران را بین سرورهای مختلف پاس بدین اما مشکل این روش این است که عین دیتا شما در تمامی سرورها کپی میشه و بعدها و.... 
> 
> * 3- SQL Server 2012 :*عزیزم    	 	 		 			 			 				 	 یه سناریوی به نام HADR داره که تیو اون شما می توانید از انواع  روش های HA (ترکیبی و...) استفاده کنید در این حالت کافی است در این حالت فرض کنید که شما چندتا سرور دارین که روی یک Storage در حال کار هستند یکی از این سرور دسترسی کامل به بانک شما داره و مابقی سرورها Disaster اون هستن (تا زمان 2008 این طور بود ) اما در 2012 شما دسترسی Readonly به سایر نودها دارین ولی عملا شما باید یه Storage مشترک داشته باشین و .... البته لازم می دونم که فعلا دارم روی این قضیه با VM کار می کنم نظرات قطعی و... را در آینده Release خواهم کرد
> * 4- Hadoop :* کلیه مواردی که در بالا گفتم از دوستانم شنیدم و واقعا آزمایش نکردم اما می دونم اون ها اینکاره بودن و.... در این مورد هم یه سری تحقیق می کنم و نتیجه رو می گم از دوست عزیزم                                                                      *v.hosseini2008*
> می خوام که اگر منبع خوب و... که با این موضوع کار کرده باشه اطلاع رسانی کنند موفق باشید



دوست عزیز لطفا در مورد بند 3 اگر رفرنسی دارین معرفی کنید و یا اینکه یک مقداری واضح تر توضیح بدین ممنون.و اما در مورد Hadoop من اون چیزی را که خودم خوندم مطرح کردم ولی بصورت عملی با هاش  کار نکردم.
و مطلب دیگه اینگه Federation database  فکر میکنم  در خصوص دیتا بیس های IBM قابل اجرا است اینطور نیست؟

----------


## in_chand_nafar

این کلمه را در Books online سرچ کنید 
*Federated Database Servers
در ضمن این مبحث روی اکثر بانک های اطلاعاتی وجود دارد
*

----------

