راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
با سلام خدمت دوستان گرامی
در این پست قصد دارم در مورد چالشی که برای بروز رسانی سیستم ها مطرح کردم ، صحبت کنم.
بذارید با یک چالش دیگه شروع کنم :لبخند:
شما به عنوان یک برنامه نویس در تیمتون ، آیا از سورس کنترل استفاده می کنید؟
اگر جواب مثبت هست خوب پس دیتابیستون رو چطور تحت سورس کنترل نگهداری می کنید؟
آیا تا حالا نیاز پیدا کردید که مثلا چند نفر همزمان بر روی دیتابیس تغییراتی بدن ؟ بعد تغییرات رو چطوری مدیریت می کنید؟
لاگ تغییرات رو چطوری نگه داری میکنید که مثلا نسخه قبل چی بوده نسخه جدید چی شده.؟
خوب به نظرم سوال بسه.
بریم سر جوابها.
متاسفانه در SQL Server امکان اضافه کردن دیتابیس به سورس کنترل وجود نداره. بعضی از شرکتها مثل Red gate ابزاری دادند که به شما اجازه میدن دیتابیستون رو داخل سورس کنترل نگهداری کنید.
یا مثلا از ابزاری مثل Flyway استفاده کنید و کاملا به صورت Command سورستون رو مدیریت کنید.
نه صبر کنید. ....
یک خبر خوب دارم براتون.
با استفاده از Visual Studio شما یک پروژه به نام SQL Server Database Project دارید . که میتونید توسط ابزار SSDT Tools هم در نسخه های قبل نصبش کنید.
خوب مزیت این ابزار چیه.
روش کار کردن این ابزار به این شکل هست که کاملا مستقل از دیتابیس رفتار میکنه و کل دیتابیستون رو درمرحله اول به صورت اسکریپت داخل خودش اضافه میکنه.
حالا شما کل این Solution رو به راحتی میتونید به سورس کنترل مورد نظر اضافه کنید.
خوب حالا چی شما دارید و چه مزایایی رو داره این روش؟
خوبی این روش این هست که هر کسی که میخواد کار بکنه Solution رو Checkout میکنه و روی WorkSpace خودش روی سورس کار میکنه و وقتی که Solution رو Deploy میکنه روی دیتابیس localdb سیستم خودش دیبایس اجرا میشه و به هیچ چیزی ارتباطی نداره و به راحتی میتونه کارهای خودش رو تست کنه.
در نهایت کارهایی که انجام داده رو Check In میکنه.
حالا شما نیاز به یک build Server داره که یک Compare با دیتابیس مقصد بکنه و یک Script از تغییرات به شما بده و کافیه فقط اون روی سیستم مقصد اجرا بشه بدون اینکه مشکلی برای داده ها ایجاد بشه یا چیزی از بین بره.( چطوری امکان داره؟؟ )
شاید این سوال برای شما ایجاد شده باشه که مثلا یک فیلد رو نوعش رو عوض میکنیم تکلیف داده هاش چی میشه؟؟؟؟
یا اگر یک ستون رو حذف کنیم یا یک ستون به جدولی که داده داره اضافه کنیم چی میشه؟
هیچی در یک PreDeploy Script میتونید این مورد رو هندل کنید.
یکی از زیبایی های این روش این هست که شما میتونید سیستم دیتابیس خودتون رو به روش TDD - Test Driven Development توسعه بدید.
یعنی میتونید اولا Unit Test برای کدهاتون بنویسید بعد مثلا SP یا View بنویسید و وقتی دارید Solution رو Deploy میکنید اول Unit Test های شما اجرا میشه روی یک دیتابیس تست. بعد در نهایت اگه همه چیز بر وفق مراد بود حالا اسکریپت تغییرات بر روی سیستم مشتری یا QA اجرا میشه.
امیدوارم تا همین جا یک دید کلی درمورد این ابزار فوق العاده کسب کرده باشید و بتونید از این به بعد با استفاده از این ابزار ، توسعه دیتابیس رو وارد چرخه مهندسی نرم افزار بکنید.
سعی میکنم در پست بعدی یک مثال بدارم و نحوه کارش رو توضیح بدم که بیشتر باهاش آشنا بشید.
منتظر نظرات دوستان عزیزم هستم.
ارادتمند.
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
با سلام و ضمن تشکر از شما جناب آقای صادقیان از اینکه بحث ارتقاء و کنترل بانکهای اطلاعاتی رو باز نمودید . راستش من از پست سودمند شما مواردی رو یاد گرفتم ولی فقط خواستم اشاره ای هم به تجربیات خودم بکنم و نظر شما و بقیه دوستان رو هم داشته باشم . شرکت ما سالهاست که برروی پروژههای گوناگون بانک اطلاعاتی اسکیوال کار میکنه و راستش اوایل یکی از مهمترین معضلات ما همین ارتقا بانک اطلاعاتی کاربرانمون بوده بدون اینکه اطلاعات موجود دچار آسیبی بشه . تا اینکه با ابزاری (البته غیر رایگان) بنام Sql Delta آشنا شدیم این ابزار براحتی این امکان رو به ما میده که بتونیم بانک اطلاعاتی مبدا (دیتابیس اصلی خودمون) رو با بانک اطلاعاتی مقصد مقایسه کنیم و بطور خودکار اسکرپتی را برامون میسازه که میتونه روی بانک اطلاعاتی مقصد هر نوع تغییری رو (حتی تغییر نوع فیلد) بده و براحتی آپدیت ساختار بانک اطلاعاتی انجام میشه . این ابزار حتی اطلاعات موجود در بانکهای اطلاعاتی رو میتونه با هم مقایسه کنه و اسکریپتی هم برای آپدیت اطلاعات دیتابیس مقصد برامون میسازه که بارها در اجرای پروژه های ما کارمون رو تسریع کرده . راستش الان که سالها از این نرم افزار استفاده کردبم کاملا بهش وابسته شدیم . به همین دلیل خواستم این تجربه با دوستانم در سایت برنامه نویس هم به اشتراک بگذارم تا شاید کمکی برای دوستان باشه .
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
مطلب خیلی مفیدی بود ولی من می خواستم بدانم در مورد MySQL هم ابزاری هست که بشه ورژن کنترلش کرد اگر هست اطلاعاتی در مودش بنویسید لطفا
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
با سلام خدمت اساتید گرامی
خواستم درمورد موضوع بحث شده تجربه خودم رو بگم
در شرکتی که من کار میکردم کسی که مسئول طراحی دیتابیس بود فقط اجازه تغییرات در دیتابیس رو داشت و هرکسی که نظر یا ایده ای داشت باید به مسئول دیتابیس مطرح میکرد و پس از هماهنگی با تحلیلگر و تایید ، تغییرات اعمال میشد
بازم ممنون از همه اساتید بزرگوار
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
با سلام
نقل قول:
نوشته شده توسط
delphi77
مطلب خیلی مفیدی بود ولی من می خواستم بدانم در مورد MySQL هم ابزاری هست که بشه ورژن کنترلش کرد اگر هست اطلاعاتی در مودش بنویسید لطفا
در این مورد اطلاعاتی ندارم. ولی جستجو میکنم و نتیجه رو اعلام می کنم.
نقل قول:
در شرکتی که من کار میکردم کسی که مسئول طراحی دیتابیس بود فقط اجازه تغییرات در دیتابیس رو داشت و هرکسی که نظر یا ایده ای داشت باید به مسئول دیتابیس مطرح میکرد و پس از هماهنگی با تحلیلگر و تایید ، تغییرات اعمال میشد
این روش خیلی کاربردی نیست.
فرض کنید تیم شما 50 نفره هست و 20 نفر نیاز دارند بر روی دیتابیس کار کنند و سیستم نیز خیلی بزرگ و پیچیده است. آیا این یک نفر میتواند این حجم کار را انجام دهد؟ اگر ایشون نبود چه اتفاقی می افتد؟
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
نقل قول:
نوشته شده توسط
BATIS
با سلام و ضمن تشکر از شما جناب آقای صادقیان از اینکه بحث ارتقاء و کنترل بانکهای اطلاعاتی رو باز نمودید . راستش من از پست سودمند شما مواردی رو یاد گرفتم ولی فقط خواستم اشاره ای هم به تجربیات خودم بکنم و نظر شما و بقیه دوستان رو هم داشته باشم . شرکت ما سالهاست که برروی پروژههای گوناگون بانک اطلاعاتی اسکیوال کار میکنه و راستش اوایل یکی از مهمترین معضلات ما همین ارتقا بانک اطلاعاتی کاربرانمون بوده بدون اینکه اطلاعات موجود دچار آسیبی بشه . تا اینکه با ابزاری (البته غیر رایگان) بنام Sql Delta آشنا شدیم این ابزار براحتی این امکان رو به ما میده که بتونیم بانک اطلاعاتی مبدا (دیتابیس اصلی خودمون) رو با بانک اطلاعاتی مقصد مقایسه کنیم و بطور خودکار اسکرپتی را برامون میسازه که میتونه روی بانک اطلاعاتی مقصد هر نوع تغییری رو (حتی تغییر نوع فیلد) بده و براحتی آپدیت ساختار بانک اطلاعاتی انجام میشه . این ابزار حتی اطلاعات موجود در بانکهای اطلاعاتی رو میتونه با هم مقایسه کنه و اسکریپتی هم برای آپدیت اطلاعات دیتابیس مقصد برامون میسازه که بارها در اجرای پروژه های ما کارمون رو تسریع کرده . راستش الان که سالها از این نرم افزار استفاده کردبم کاملا بهش وابسته شدیم . به همین دلیل خواستم این تجربه با دوستانم در سایت برنامه نویس هم به اشتراک بگذارم تا شاید کمکی برای دوستان باشه .
در مورد این ابزار و ابزارهای دیگه من زیاد باهاشون کار نکردم. ولی در همین Visual Studio شما کارهای زیادی از قبیل مقایسه داده ها و ساختار و تست نویسی رو دارید که انشالله درپستهای بعد بهش اشاره میکنم.
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
باتوجه به اینکه ما تجربه پروژه های بزرگ رو داشتیم ولی در این مورد مشکل نداشتیم چون طراح و یا طراحان دیتابیس و تحلیلگر باهم هماهنگ میشدند و پس از اتمام طراحی و گاها موازی با طراحی دیتابیس کدنویسی هم انجام می شد
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
شرکت هایی که از زیرو کلاینت استفاده میکنند چطور از این امکان بهره ببرن ؟؟؟؟
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
ما تو شرکت خودمون یه نرم افزار نوشتیم که هر تغییری در دیتا بیس رو باید درخواست ثبت کنیم تا تیم دیتابیس اون رو پیاده کنند ولاگ هم در همون نرم افزار باقی میمونه
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
نقل قول:
نوشته شده توسط
dooste_2002
باتوجه به اینکه ما تجربه پروژه های بزرگ رو داشتیم ولی در این مورد مشکل نداشتیم چون طراح و یا طراحان دیتابیس و تحلیلگر باهم هماهنگ میشدند و پس از اتمام طراحی و گاها موازی با طراحی دیتابیس کدنویسی هم انجام می شد
منظورتون از زیروکلاینت چیه؟
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
نقل قول:
نوشته شده توسط
dooste_2002
باتوجه به اینکه ما تجربه پروژه های بزرگ رو داشتیم ولی در این مورد مشکل نداشتیم چون طراح و یا طراحان دیتابیس و تحلیلگر باهم هماهنگ میشدند و پس از اتمام طراحی و گاها موازی با طراحی دیتابیس کدنویسی هم انجام می شد
خوب این وسط اتفاقات زیادی ممکنه بیافته. به عنوان مثال دائما برنامه نویس باید با طراح دیتابیس داده هاشون بروز باشه و برای یک تغییر کوچک باید درخواست بده و این روند خیلی کار رو کند میکنه. همچنین برنامه نویس میتونه با توجه به نیازش برای خودش تست بنویسه که درچرخه شما امکان تست نویسی برای کدها امکان پذیر نیست. اگر روزی طراحان دیتابیس شما نباشند عملا کل تیم بیکار خواهد شد. چون تمام اتکای شما به یک سری افراد خاصه. این افراد باید در طراحی نهایی یا کاری که داره صورت میگیره نظر بدن ولی خود برنامه نویس میتونه جداولش رو طراحی کنه و خللی نیز ایجاد نمیکنه.
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
نکته هایی که آقای صادقیان فرمودند همه درسته و تنها با یک ورژن کنترل درست حسابی قابل حله هر کار دیگه ای که از روی نبود ورژن کنترل انجام بشه فقط میشه گفت رفع کتیه:چشمک:
من تجربه کار با دیتابیس های به شدت در حال تغییر و همچنین بیگ دیتا را داشتم بنابراین تغییرات ساختار و داده بسیار بسیار حساسیت ایجاد میکنه و لازمه که یک ورژن کنترل وجود داشته باشه
متاسفانه روی mysql ورژن کنترل خوبی ندیدم و مواردی که بودند فقط استراکچر را لاگ می کردند همچنین ابزارهایی مانند ماگریشن لاراول هم ناکارآمد بود مثلا تغییرات چندباره روی ساختار را در یک تغییر انجام نمی داد
خلاصه اگر کسی ورژن کنترل روی مای اسکول سراغ داره بگه :لبخندساده:
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
سلام و تشکر بابت بحث کاربردی که مطرح کردین بانک اطلاعاتی که من استفاده می کنم sql 2000 هست و به طور میانگین هفته ای یکبار آپدیت میشه میخاستم بدونم روشی که معرفی کردین (SSDT ) روی این نسخه sql جواب میده .
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
نقل قول:
نوشته شده توسط
ehsanarian
سلام و تشکر بابت بحث کاربردی که مطرح کردین بانک اطلاعاتی که من استفاده می کنم sql 2000 هست و به طور میانگین هفته ای یکبار آپدیت میشه میخاستم بدونم روشی که معرفی کردین (SSDT ) روی این نسخه sql جواب میده .
بله هیچ مشکلی نداره و به راحتی جواب نیازهای شمارو خواهد داد.
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
سلام و عرض ادب خدمت اساتید عزیز در مورد راهکاری که آقای صادقیان فرمودند تا اونجایی متوجه شدم که ما بوسیله ابزار vs کل دیتابیسو رو به صورت کوئری ایجاد میکنیم build Server که سورس ها رو مقایسه میکنه چی هست ممنون میشم راهنماییم کنید؟
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
در واقع در چرخه فرآیند Automatic سازی روند Build نرم افزار ، شما نیاز به یک Build Server دارید. کار این Build Server این هست که به مخزن کدهای شما دسترسی داشته و آخرین Check In های شمارو از روی سورس کنترل برداشته Build کرده و بر روی سیستم های UAT ,QA اون اسکرپیتها رو اجرا می کنه و آخرین فایل اجرایی نرم افزار رو نیز در مسیر سیستم ها کپی میکنه. در این فرآیند دیگه شما نیازی ندارید هم دیتابیس رو به صورت دستی به سیستم مشتری منتقل کنید هم اینکه فایل اجرایی برنامه رو به صورت دستی به سیستم طرف منتقل کنید.
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
ابزار ApexSQL رو نصب کنید و از امکانات فوق العاده اش لذت ببرید. قابلیت اتصال به TFS رو هم داراست
نقل قول: راهکارهای بروز رسانی سیستم ها در محیط های عملیاتی - کار با Source Control
نقل قول:
نوشته شده توسط
esmit61
ابزار ApexSQL رو نصب کنید و از امکانات فوق العاده اش لذت ببرید. قابلیت اتصال به TFS رو هم داراست
این ابزار پولی هست و شما دارید به یک ابزاری وابسته میشین که غیر مایکروسافتی هست. همچنین استفاده از قابلیتهای Localdb و Refactoring و IDE قدرتمند Visual Studio رو از دست میدین.
به جز این برای نوشتن Unit Test بر روی دیتابیس باز باید به ابزارهای دیگه وابسته بشین.
مشابه این ابزار رو شرکت Redgate هم داره که قابلیتهای خیلی بیشتری داره.
مهم این هست که این چرخه رو بتونیم درون سیستم ها و تولید نرم افزارهامون راه اندازی کنیم.