tag:blogger.com,1999:blog-315540712024-03-13T06:57:57.382+02:00مدونة GalalDevهذه المدونة تهتم بالموضوعات التقنية المتعلقة بالبرمجيات باللغة العربية لزيادة فعالية المحتوى العربيMohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.comBlogger33125tag:blogger.com,1999:blog-31554071.post-12688072269206880412020-06-20T02:45:00.001+02:002020-06-20T02:45:18.515+02:00كورس تعلم ال Asp.Net Core Blazor بالعربي<div style="direction: rtl; text-align: right;"><br /></div><div style="text-align: left;"><div style="direction: rtl; text-align: right;">السلام عليكم</div><div style="direction: rtl; text-align: right;">ان شاء الله دي مقدمة لكورس تعلم ال Blazor وهنشوف ازاي باستخدام ال C# تقدر تعمل Single Page Applications جميلة و سريعة يعني لو انت مطور دوت نت هتلاقي الموضوع بالنسبالك سهل جدا</div><div style="direction: rtl; text-align: right;">ومن مزايا استخدامك لتكنولوجي زي ال Blazor هتلاقي الانتاجية بتاعتك كDeveloper علية جدا لان هتلاقي كود كتير من اللي انت عامله في Backend بتستخدمه في الFrontend لانهم معمولين بنفس اللغة فاكيد طبعا هيفرق كتير</div><div style="direction: rtl; text-align: right;"><br /></div><div style="direction: rtl; text-align: right;">ان شاء الله الكورس ده هيبتدي الاول بمقدمة عن ايه هو الBlazor وتاريخه القريب وبعدين هنركز على بعض المفاهيم الاساسية المستخدمة في بناء ال Framework وممكن تلاقي محاضرة كاملة بتوضح مفهوم معين وبعدها محاضرة تشرح استخدامه في ال Blazor وده طبعا حاجة مهمة لان كل ما افهم الحاجة معمولة ليه وازاي افهم استخدمها ازاي بعد كده ويبقى كودي نضيف واداءه كويس وخالي من الاخطاء</div><div style="direction: rtl; text-align: right;">طول ما احنا شغالين في الكورس وكل حاجة بنتعلمها هنطبقها على مشروع عملي لبيع الساعات لكن في بعض الحاجات زي ال Blazor Lifecycle مثلا هنعملها Pages خاصة ان احنا نتست عليها الحاجات اللي اتعلمناها عشان اقدر اوضح الدرس بشكل اكبر وكل الكود هتلاقوه على Gihub ان شاء الله</div><div style="direction: rtl; text-align: right;">ال Blazor نازل باتنين Hosting Models واحد بيطلق عليه Blazor Server والاخر Blazor WebAssembly هنتكلم عن الاتنين في الكورس لكن هنركز على ال Blazor WebAssembly وهنبني كل حاجة بيه وبعد كده هنعمل كام فيديو لتحويل البروجكت ل Blazor Server وبكده هتقدر تلم الاتنين Hosting Models</div><div style="direction: rtl; text-align: right;">الكورس خلص منه جزء كبير والمحاضرات هتنزل في Playlist الكورس بشكل دوري وهتلاقوها في ال Description بتاع الفيديو</div><div style="direction: rtl; text-align: right;">ان شاء الله الكورس يبقى مفيد للجميع ومش هوصيكم على ال Share و ال Subscribe وكمان فعل زرر التنبيهات علشان كل ما ينزل فيديو للكورس يوصلك علطول باذن الله</div><div style="direction: rtl; text-align: right;">ولو ليك اي تعليق او حاجة حابب تشوفها في الكورس قولي عليها في تعليق على الفيديو</div><div style="direction: rtl; text-align: right;">وفي النهاية لا تنسو كل من شارك في عمل هذا الكورس من صالح دعائكم في هذه الايام وجزاكم الله خير</div><div style="direction: rtl; text-align: right;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/Sdf9qOHpJfA" width="320" youtube-src-id="Sdf9qOHpJfA"></iframe></div><div style="direction: rtl; text-align: right;"><br /></div></div>Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com2tag:blogger.com,1999:blog-31554071.post-16096580399318791982020-03-27T18:15:00.000+02:002020-03-27T18:15:11.431+02:00شرح Domain Driven Design بالعربي<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
<span style="background-color: white; color: #1c1e21; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">من اشهر الاساليب في تصميم البرمجيات خصوصا المعقدة هو ال</span><br style="background-color: white; color: #1c1e21; font-family: Helvetica, Arial, sans-serif; font-size: 14px;" /><span style="background-color: white; color: #1c1e21; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">Domain driven design (DDD)</span><br style="background-color: white; color: #1c1e21; font-family: Helvetica, Arial, sans-serif; font-size: 14px;" /><span style="background-color: white; color: #1c1e21; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">في الفيديو ده هتلاقي شرح مبسط مطعم بالامثلة للموضوع</span><br style="background-color: white; color: #1c1e21; font-family: Helvetica, Arial, sans-serif; font-size: 14px;" /><span style="background-color: white; color: #1c1e21; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">اتفرج على الفيديو ده وادعيلي وانسى الكرونا وافتكر (قُل لَّن يُصِيبَنَا إِلَّا مَا كَتَبَ اللَّهُ لَنَا هُوَ مَوْلَانَا ۚ وَعَلَى اللَّهِ فَلْيَتَوَكَّلِ الْمُؤْمِنُونَ )</span><br style="background-color: white; color: #1c1e21; font-family: Helvetica, Arial, sans-serif; font-size: 14px;" /><span style="background-color: white; color: #1c1e21; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">رابط ال YouTube</span><span class="text_exposed_show" style="background-color: white; color: #1c1e21; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px;"><br /><a data-ft="{"tn":"-U"}" data-lynx-mode="async" href="https://l.facebook.com/l.php?u=https%3A%2F%2Fyoutu.be%2FbEI4RW3ULvI%3Ffbclid%3DIwAR1Z3GnedB6szsPNvUAtbK5mNLZqC6Z3c1o7ngYbeNM032caqGmMVUHHOxA&h=AT1cQbYHpPhOzxqou83MuVxLGUsHO50H9c5yp2awg6Ev2JXD_WRXmWOXbZ3H7ULQJVUtWWCD0USV-i_u6ccxFrU0eVtklJmtxDjPoT-MYBfmvx1pmcPZsZig1bYTz4s4I5G7D3biw_ochmnnwe-d3e3F1cTr_vQ5H7Iq15MZgY2AUacb9LT8rz_4x_nq08rpItGCQOsDb7wNrDixbGQ_Mr3Z6ewbaq68_QVljFaIZxlhVoB7ri7Iaf7Izkul1hMiBlhaMUOYThAzgPdHEu02H18qLncE6nc715VkNCr3KbVxrqcVx-5ViUk-iN6d96fzuGkqw_TUbGgR4Lggh1wnQspudHfetjWfaAH_nzkAIuztq6EMII6k9qECbBeurLLZCDlj-6ZCej56bLfcVx-URaverb3Qp7_TO9o7fnyngmvilevOLdZyV1a7zTzgT_VhrsxmF2Mw9mYolxTTKUOw9h8lsFIppBA4MWW-vix-sA20GML7NacFYV-Mr28ty50RENd2muopIytkd1VacsENFDPGBMNZrp2t22793AnFCDBa8s3LidGqNsir5S66AzxFZIgUmw5Clm6ncV4dC-659U_4eJAmU23JxRgwXXxpV8QHoLHVYT58au9qnb5Syt2xT4vl" rel="noopener nofollow" style="color: #385898; cursor: pointer; font-family: inherit; text-decoration-line: none;" target="_blank">https://youtu.be/bEI4RW3ULvI</a></span></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/bEI4RW3ULvI/0.jpg" src="https://www.youtube.com/embed/bEI4RW3ULvI?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-79618292854579576222019-10-08T19:26:00.001+02:002019-10-08T19:26:17.241+02:00بالعربي التطور في البرمجة باستخدام ال .Net<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="_2cuy _3dgx" data-block="true" data-editor="chvhj" data-offset-key="t8tc-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin: 0px; padding: 0px; white-space: pre-wrap;">
<div class="_1mf _1mk" data-offset-key="t8tc-0-0" style="direction: rtl; font-family: inherit; position: relative; text-align: right;">
<span style="font-family: inherit;">في الفيديو ده بنتكلم عن التطور اللي حصل في تطوير البرمجيات بال.Net وازاي انتقلت ال .Net من نظام تشغيل الويندوز فقط الى ان تعمل على انظمة تشغيل متعددة</span></div>
</div>
<div class="_2cuy _3dgx" data-block="true" data-editor="chvhj" data-offset-key="3hohh-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin: 0px; padding: 6px 0px 0px; white-space: pre-wrap;">
<div class="_1mf _1mk" data-offset-key="3hohh-0-0" style="direction: rtl; font-family: inherit; position: relative; text-align: right;">
<span data-offset-key="3hohh-0-0" style="font-family: inherit;">وبتكلم عن Asp.Net core والتطور اللي فيه
وازاي انك تقدر تبني Single page Application بالفريم ورك الجديد Blazor
ومقدمة عن ال Xamarin وازاي بتبني بها Mobile Apps
وازاي تقدر تخلي البرامج اللي بتطورها برامج ذكية باستخدام ال Machine Learning</span></div>
</div>
<div class="_2cuy _3dgx" data-block="true" data-editor="chvhj" data-offset-key="28v5t-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin: 0px; padding: 6px 0px 0px; white-space: pre-wrap;">
<div class="_1mf _1mk" data-offset-key="28v5t-0-0" style="direction: rtl; font-family: inherit; position: relative; text-align: right;">
<span data-offset-key="28v5t-0-0" style="font-family: inherit;">الفيديو دسم واتمنى يكون مفيد لكل اللي هيشوفه</span></div>
</div>
<div class="_2cuy _3dgx" data-block="true" data-editor="chvhj" data-offset-key="fdqtn-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin: 0px; padding: 6px 0px 0px; white-space: pre-wrap;">
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/tRr_cwyN53Q/0.jpg" src="https://www.youtube.com/embed/tRr_cwyN53Q?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div class="_1mf _1mj" data-offset-key="fdqtn-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<br /></div>
</div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-59341237371757288142019-09-12T17:44:00.000+02:002019-09-12T17:44:05.882+02:0005 - فن تطوير البرمجيات - Microservices<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
الحلقة الخامسة من سلسلة The art of software development</div>
<div dir="rtl" style="text-align: right;">
وفي الفيديو ده بنكمل كلام عن ال Architectural Patterns and Styles وهنتكلم عن انواع زي Service Oriented Architectural Style و Microservices</div>
<div dir="rtl" style="text-align: right;">
وبنوضح بعض المفاهيم زي </div>
<div dir="rtl" style="text-align: right;">
Eventual Consistency</div>
<div dir="rtl" style="text-align: right;">
Event Sourcing</div>
<div dir="rtl" style="text-align: right;">
CQRS</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/YBTQ46akEiY/0.jpg" src="https://www.youtube.com/embed/YBTQ46akEiY?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-32344551356112966762019-09-12T17:42:00.002+02:002019-09-12T17:42:13.264+02:0004 - فن تطوير البرمجيات - Layered , Tires , Component Styles<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
الحلقة الرابعة من سلسلة The art of software development</div>
<div dir="rtl" style="text-align: right;">
وفي الفيديو ده بنتكلم عن ال Architectural Patterns and Styles وهنتكلم عن انواع زي Layered Architectural Style و N-Tires Architectural Style و Component-based Architectural Style</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/5zos__T8P2M/0.jpg" src="https://www.youtube.com/embed/5zos__T8P2M?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div dir="rtl" style="text-align: center;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-77311200386520914932019-09-12T17:38:00.002+02:002019-09-12T17:38:58.438+02:0003 - فن تطوير البرمجيات - مباديء ال Software Architecture<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" dir="rtl" style="clear: both; text-align: right;">
الحلقة الثالثة من سلسلة The art of software development</div>
<div class="separator" dir="rtl" style="clear: both; text-align: right;">
وفي الفيديو ده بنتكلم عن مقدمة المباديء الاساسية لل Software Architecture </div>
<div class="separator" dir="rtl" style="clear: both; text-align: right;">
وبنتكلم عن مفاهيم بنسمعها كتير زي coupling , cohesion , Separarion of concerns ... etc</div>
<div class="separator" dir="rtl" style="clear: both; text-align: right;">
<br /></div>
<div class="separator" dir="rtl" style="clear: both; text-align: right;">
ملحوظة : الفيديو وانا بسجله الصورة اتركبت على نفسها بشكل اصغر شوية ولضيق الوقت معملتلوش ايديت لكن المحتوى واضح</div>
<div class="separator" dir="rtl" style="clear: both; text-align: right;">
<br /></div>
<div class="separator" dir="rtl" style="clear: both; text-align: right;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/CX093JhBEuM/0.jpg" src="https://www.youtube.com/embed/CX093JhBEuM?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br /></div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-87311347672598121632019-09-12T17:36:00.000+02:002019-09-12T17:36:16.865+02:0002 - فن تطوير البرمجيات - Software Architecture<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
الحلقة الثانية من سلسلة The art of software development</div>
<div dir="rtl" style="text-align: right;">
وفي الفيديو ده بنتكلم عن مقدمة ال Software Architecture وايه هو بالظبط وايه اهميته وايه مبادئه الاساسية</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/wkEwkms6q54/0.jpg" src="https://www.youtube.com/embed/wkEwkms6q54?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-39399944912719898672019-09-12T17:32:00.002+02:002019-09-12T17:32:53.289+02:0001 - فن تطوير البرمجيات - دورة العمل Software Development life-cycle<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
في هذا الفيديدو ده اتكلم عن ال Software Development life-cycle بطريقة عملية اكتر مع بعض الامثلة وايضا اتكلم عن ال Waterfall و ال Agile وما هوالفرق الجوهري بينهم</div>
<div dir="rtl" style="text-align: right;">
وفي النهاية اعطي مقدمة عن ال DevOps ومفاهيمه</div>
<div dir="rtl" style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/IgzQe25ss0k/0.jpg" src="https://www.youtube.com/embed/IgzQe25ss0k?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div dir="rtl" style="text-align: center;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-64531059418787807952019-09-12T17:27:00.000+02:002019-09-12T17:33:50.216+02:0000 - فن تطوير البرمجيات - المقدمة<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" dir="rtl" style="clear: both; text-align: center;">
السلام عليكم</div>
<div class="separator" dir="rtl" style="clear: both; text-align: center;">
هذا الفيديو هو مقدمة لسلسلة فيديوهات بعنوان</div>
<div class="separator" dir="rtl" style="clear: both; text-align: center;">
The art of software development</div>
<div class="separator" dir="rtl" style="clear: both; text-align: center;">
وفي هذه السلسة دي سنتعرض لعملية تطوير البرمجيات وبخاصة مرحلة ال Design and Development</div>
<div class="separator" dir="rtl" style="clear: both; text-align: center;">
وهنستوضح مفاهيم مثل ال Software Architecture, System Design, OOP , Functional Programming.... etc</div>
<div dir="rtl" style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/3CxoSM5Jb0A/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/3CxoSM5Jb0A?feature=player_embedded" width="320"></iframe></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-88234834589200628132019-01-30T15:42:00.000+02:002019-01-30T16:50:14.296+02:00بالعربي Software Architecture Styles<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Yby8zQj5tOY/XFGnOGa-MBI/AAAAAAAAaxE/P_HGkv7EWYQj0L8PSYEYUM-YLq9QhhawgCLcBGAs/s1600/1_RnAIdM2cCgOuhK_yuDreRA.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="799" data-original-width="1280" height="124" src="https://1.bp.blogspot.com/-Yby8zQj5tOY/XFGnOGa-MBI/AAAAAAAAaxE/P_HGkv7EWYQj0L8PSYEYUM-YLq9QhhawgCLcBGAs/s200/1_RnAIdM2cCgOuhK_yuDreRA.png" width="200" /></a></div>
في المقال <a href="https://galaldev.blogspot.com/2018/10/software-architecture.html" target="_blank">السابق </a>تكلمنا عن ما هو ال Software Architecture وما هي فوائد ان يكون بناء النظام يتبع Architecture Style معين.<br />
في هذا المقال سوف نتناول بعض ال Architecture Styles ونتعرف على خصائصها وايضا سنجيب على التساؤل التالي:<br />
هل يجب ان يتبع النظام كله Architecture Style واحد ام ممكن ان يتبع اكثر من Style.<br />
<br />
<br /></div>
<div dir="rtl" style="text-align: right;">
<br />
<a name='more'></a><br /></div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
ما هو ال Architecture Style</h2>
</div>
<div dir="rtl" style="text-align: right;">
ال Architecture Style هو مجموعة من المباديء التي تقوم باتباعها اثناء بناء النظام لتشكل الشكل العام و الاطار العام لبنية النظام. وهذه المباديء هي مباديء عامة لتصميم النظام لتحل مجموعة من المشاكل التي قد تكون متكررة بين الانظمة. ولفهم ذلك تخيل معي انك تريد بناء نظام كبير Enterprise وتريد ان تفصل بين الكود المسؤول عن الواجهات UI والكود المسؤول عن ال Application Logic والكود المسؤول عن الحفظ في قواعد البيانات حيث لكل جزء سواء UI او Application Logic او Database Code فريق خاص به فماذا ستفعل فهذه مشكلة تريد حلها وبناء نظام يفصل بين هذه المراحل . انت الان لديك طريقين الاول ان تقوم بالاجتهاد لايجاد وسيلة لعمل هذا الفصل بين المراحل وهذا الحل لا افضله لك او ان تتبع بعض الاساليب التي تساعدك في عمل هذا الفصل لان هذه المشكلة واجهت ناس اخرين من قبلك وعلى مر الزمن تم صياغة بعض المباديء التي تتبعها لحل هذه المشكلة وهذا ما يسمى بال Architecture Styel.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
ايضا ال Architecture Style قد يكون خاص بطريقة عمل الهيكل العام للكود او قد يكون لطريقة عمل ال Deployment للنظام او قد يكون خاص بطريقة الاتصال بين مكونات النظام.</div>
<table style="background-color: white; border-collapse: collapse; border-spacing: 0px; box-sizing: inherit; color: black; font-family: "Segoe UI", SegoeUI, "Segoe WP", "Helvetica Neue", Helvetica, Tahoma, Arial, sans-serif; font-size: 0.875rem; table-layout: auto; width: 705px;"><thead style="box-sizing: inherit;">
<tr class="header" style="box-sizing: inherit;"><th style="border-color: var(--border); border-style: solid; border-width: 0px 0px 1px; box-sizing: inherit; font-size: 0.875rem; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; text-align: left; vertical-align: bottom;"><div style="box-sizing: inherit;">
Category</div>
</th><th style="border-color: var(--border); border-style: solid; border-width: 0px 0px 1px; box-sizing: inherit; font-size: 0.875rem; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; text-align: left; vertical-align: bottom;"><div style="box-sizing: inherit;">
Architecture styles</div>
</th></tr>
</thead><tbody style="box-sizing: inherit;">
<tr class="odd" style="box-sizing: inherit;"><td style="border-color: var(--border); border-style: solid; border-width: 1px 0px 0px; box-sizing: inherit; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; vertical-align: top;"><div style="box-sizing: inherit;">
<em style="box-sizing: inherit;">Communication</em></div>
</td><td style="border-color: var(--border); border-style: solid; border-width: 1px 0px 0px; box-sizing: inherit; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; vertical-align: top;"><div style="box-sizing: inherit;">
Service-Oriented Architecture (SOA), Message Bus</div>
</td></tr>
<tr class="even" style="box-sizing: inherit;"><td style="border-color: var(--border); border-style: solid; border-width: 1px 0px 0px; box-sizing: inherit; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; vertical-align: top;"><div style="box-sizing: inherit;">
<em style="box-sizing: inherit;">Deployment</em></div>
</td><td class="" style="border-color: var(--border); border-style: solid; border-width: 1px 0px 0px; box-sizing: inherit; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; vertical-align: top;"><div style="box-sizing: inherit;">
Client/Server, N-Tier, 3-Tier</div>
</td></tr>
<tr class="odd" style="box-sizing: inherit;"><td style="border-color: var(--border); border-style: solid; border-width: 1px 0px 0px; box-sizing: inherit; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; vertical-align: top;"><div style="box-sizing: inherit;">
<em style="box-sizing: inherit;">Domain</em></div>
</td><td style="border-color: var(--border); border-style: solid; border-width: 1px 0px 0px; box-sizing: inherit; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; vertical-align: top;"><div style="box-sizing: inherit;">
Domain Driven Design</div>
</td></tr>
<tr class="even" style="box-sizing: inherit;"><td style="border-color: var(--border); border-style: solid; border-width: 1px 0px 0px; box-sizing: inherit; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; vertical-align: top;"><div style="box-sizing: inherit;">
<em class="" style="box-sizing: inherit;">Structure</em></div>
</td><td style="border-color: var(--border); border-style: solid; border-width: 1px 0px 0px; box-sizing: inherit; line-height: 1.5; overflow-wrap: break-word; padding: 12px 16px; vertical-align: top;"><div class="" style="box-sizing: inherit;">
Component-Based, Object-Oriented, Layered Architecture</div>
</td></tr>
</tbody></table>
<h2 dir="rtl" style="text-align: right;">
Layered Architectural Style</h2>
<div dir="rtl" style="text-align: right;">
في هذا الStyle يتم تقسيم <b>الهيكل </b>الخاص بالنظام الى اكثر من طبقة متتالية وكل طبقة لا تتعامل الى مع الطبقة التي تسبقها فقط واشهر مثال لذلك هو تقسيم النظام الى اربع طبقات الطبقة الاخيرة هي قاعدة البيانات وتسمى ال Database Layer او ال Persestance Layer وهي عبارة عن البيانات التي يتم حفظها الطبقة التي تسبقها خاصة بالكود الذي يتعامل مع حفظ و استرجاع البيانات من قواعد البيانات ويطلق علىيها Data access layer والطبقة التي تسبقها هي التي بها ال Application Logic وتسمى ال Business Layer والطبقة الاولى هي التي تتعامل مع الواجهات UI Layer او ال Presentation Layerحيث ان ال UI Layer لا تتعامل الا مع ال Application Logic ولا تتعامل ابدا مع Data access layer و ايضا ال Application Logic لا تتعامل مباشرة مع قاعدة البيانات ولكن كل التعامل يكون عن طريق ال Data access layer.<br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-73lbeAjOJSE/XE8q7SbNqkI/AAAAAAAAavw/xC3IhETaQzIqzQ1_EAM5XcAISLAX47NMgCLcBGAs/s1600/Screen-Shot-2015-10-06-at-5.48.11-PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="407" data-original-width="547" height="475" src="https://2.bp.blogspot.com/-73lbeAjOJSE/XE8q7SbNqkI/AAAAAAAAavw/xC3IhETaQzIqzQ1_EAM5XcAISLAX47NMgCLcBGAs/s640/Screen-Shot-2015-10-06-at-5.48.11-PM.png" width="640" /></a></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
وقد يطرأ الى ذهنك سؤال لماذا هذا التقسيم وما الذي ساستفيده منه؟</div>
<div dir="rtl" style="text-align: right;">
هذا التقسيم يساعد على تحقيق مبدأ ال Separation of cencerns لان كل جزء من الكود البرمجي معروف ما هي مسؤوليته ووظيفته ويضا تكون درجة الاعتمادية بين الطبقات منخفضة وهذا يؤدي الى تسهيل عملية الصيانة و التعديل داخل الكود. ومن ناحية اخرى يمكنك ادخال اكثر من مطور كل مكور يكون مسؤول عن كود معين فقد يكون احدهم مسؤول عن الواجهات وما يخصها (Frontend Developer) واخر مسؤول عن ال Application Business Logic (Backend Developer) وهكذا.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
ملاحظة: قد يتطلب نظامك تقسيم عدد اكثر من الطبقات فلا مانع من ذلك.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
Client/Server Architectural Style</h2>
<div dir="rtl" style="text-align: right;">
هذا ال Style يهتم بطريقة ال Deployment الخاصة بالانظمة الموزعة التي يكون فيها اكثر من Client يتصل بـ Server وابسط مثال لهذا ال Style هي الانظمة التي يتم بنائها لتعمل على ال WEB ـ(Web Based) حيث يكون ال Client هو ال Browser على جهاز المستخدم والذي يتواصل مع ال Application Server عن طريق احد البروتوكولات المعروفة مثل HTTP. وقد يكون النظام الذي يتبع هذا ال Style هو عبارة عن Desktop Application وهو ال Client ويتواصل مع Application Server عن طريق اي بروتوكول وهكذا.<br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-B7NaRI8xU5I/XFB0yQdVZPI/AAAAAAAAawI/K1mBKMtmT0wRb9eTtkQcqtoyjouC9arewCLcBGAs/s1600/client-server-architecture.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="246" data-original-width="484" height="325" src="https://1.bp.blogspot.com/-B7NaRI8xU5I/XFB0yQdVZPI/AAAAAAAAawI/K1mBKMtmT0wRb9eTtkQcqtoyjouC9arewCLcBGAs/s640/client-server-architecture.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
وفي هذا الStyle يكون (في الغالب) البيانات مخزنة في ال Server مما يعطي له بعض المزايا مثل انه يكون آمن اكثر لان البيانات مخزنة في ال Server وليس عند ال Client وايضا بمركزية الاتصال بالبيانات وايضا سهولة الصيانة. ولكن قد تضيف هذه المركزية بعض العيوب فمثلا في الغالب يكون ال Applicaion Logic مرافق للكود الخاص بقواعد البيانات مما يعطي صعوبة في الفصل بين المسؤليات وكلن هذا العيب ممكن تلافيه اذا تم تطوير هذا ال Style الى Multi-Tire Style .</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
N-Tier Architectural Style</h2>
<div dir="rtl" style="text-align: right;">
هذا ال Style يهتم بعمل Deployment للنظام فهو مطابق لفكرة ال Layered Architectural Style ولكن كل Layer تكون على Physical Server مختلف فتخيل معي انك قمت بتصميم نظامك بال Layered Architectural Style وقمت بتصميم الية لاتصال كل Layer بالاخرى عن طريق بروتوكول معين او Interface معين وهذا اتاح لك امكانية عمل Deploy لكل Layer على Physical Server مختلف , اذا انت قمت بتطبيق ال N-Tier Architectural Style. اراك الان وقد ربطت ذلك بما سبق واعلم انك استنتجت ان ال Client Server Architecture هو نوع من ال N-Tier Architectural Style فهنيئا لك 😀😀 فهو بالفعل يسمى 2Tier Architecture.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-KOdbXU5Sidc/XFB1pYpecrI/AAAAAAAAawU/agLq2VSfn-gMwwR6Xk_XLPb9c-FN2e-twCLcBGAs/s1600/n-tier-db-archi.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="432" data-original-width="1085" height="254" src="https://2.bp.blogspot.com/-KOdbXU5Sidc/XFB1pYpecrI/AAAAAAAAawU/agLq2VSfn-gMwwR6Xk_XLPb9c-FN2e-twCLcBGAs/s640/n-tier-db-archi.png" width="640" /></a></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
والفائدة الاكبر من هذه الطريقة هي ال Scalability حيث انك تستطيع ان تستخدم اكثر من Server ليخدم نفس النظام مما قد يحسن الاداء.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
Object-Oriented Architectural Style</h2>
<div dir="rtl" style="text-align: right;">
هذا ال Style المقصود به تقسيم هيكل النظام الى Objects مستقلة يمكن اعادة استخدامها وكل Object يحتوي على الـData الخاصة به و ايضا ال Functions التي يقوم بها فمثلا تخيل معي انك تقوم بانشاء نظام لادارة عمليات البيع لمكان ما فقد يكون لديك Object او Class باسم الفاتورة Order وداخل هذه الClass يوجد البيانات الخاصة بها مثل التاريخ و اجمالي السعر والعميل وهكذا و ايضا تحتوي على Functions مثل اضافة فاتورة او حذف الفاتورة وهكذا. والطريقة البديلة لهذا ال Style كانت عن طريق بناء Functions بدون Objects لتنفيذ المهام بمعنى في المثال السابق بناء Function مستقلة تسمى CreateOrder و تاخذ Parameters مثل تاريخ الفاتورة و العميل و المنتجات وهكذا وتسمى هذه الطريقة <span style="background-color: white; font-family: "segoe ui" , "segoeui" , "segoe wp" , "helvetica neue" , "helvetica" , "tahoma" , "arial" , sans-serif; font-size: 16px;">Procedural instructions </span>.<br />
ولكن طريقة ال Object-Oriented تتميز انها تنظر للنظام بالكامل كانه مجموعة من ال Objects التي تكون مستقلة وقل اعتماديتها على بعضها البعض والتي قد تتواصل عن طريق Interfaces او Functions او Properties.<br />
وبالطبع هذا ال Style له عدة معايير مثل ال Abstraction ,Inheritance ,Encapsulation , Polymorphism , Decoupling ويمكن القراءة اكثر عن ذلك عن طريق دراسة ال Object-Oriented Progrmming.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-BuA71CvNdXg/XFGYJl8wC_I/AAAAAAAAaws/OczK7AhMiRQQWsccMtS1DCHIS8Isyc7iQCLcBGAs/s1600/java-oops.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="429" data-original-width="557" height="492" src="https://1.bp.blogspot.com/-BuA71CvNdXg/XFGYJl8wC_I/AAAAAAAAaws/OczK7AhMiRQQWsccMtS1DCHIS8Isyc7iQCLcBGAs/s640/java-oops.png" width="640" /></a></div>
<br />
بالطبع ال OOP له مزايا متعددة اهمها هو تقليل الاعتمادية بين ال Objects مما يتيح لك امكانية عمل Test Automation بسهولة فكلما كان ال Design جيد كلما كانت الحياة سهلة في كل ما بعد ذلك سواء ال Implementation او ال Testing او ال Maintenance وهكذا وايضا قد تلجأ الى استخدام Design Patterns معينة في حل المشاكل التفصيلية البرمجية وهذا موضوع مقال قادم باذن الله.</div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
Service-Oriented Architectural Style (SOA)</h2>
<div>
ي هذا ال Style يتم بناء النظام كمجموعة من ال Services المستقلة عن بعضها البعض كل Service تستطيع التواصل مع ال Service الالخرى بدون ان تعلم ما بداخلها ولكنها تعلم فقط معطيات هذه ال Service. ولفهم ذلك تخيل معي انك تقوم ببناء نظام خاص ببيع و شراء المنتجات اونلاين ولديك Mobile App يقوم الناس بالشراء منه و ايضا لديك موقع الكتروني ولديك برنامج على ال Windows وكلهم يبيعو و يشتروا داخل نفس النظام وانت تريد تطبيق ال SOA فقمت بعمل Service لعملية البيع و Service لعملية شحن المنتج للعميل و Service لعملية الدفع الالكتروني و هكذا فعند شراء العميل من اي من الانظمة الموقع ام الApp ام البرنامج يقوم بالتواصل مع Service البيع وارسال معطياتها من حيث المنتج و العنوان ووسيلة الدفع ثم تقوم هذه ال Service بالتواصل مع Service الدفع لتتم عملية الدفع ثم بعد التأكد من الدفع تتواصل مع Service الشحن لينزل امر التوريد والشحن وهكذا.</div>
<div>
هذه ال Services يتم التواصل بين بعضها البعض و بين ال Clients الخاصة بها مثل الموقع ام الApp ام البرنامج بواسط بروتوكلات متعددة اشهرها عن طريق ال Http ويضا ب Formats متعددة اشهرها ال Json.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-ZxNkb1T55K8/XFGjAeS94kI/AAAAAAAAaw4/9J62cgafiBIeqii2piYPCPdN-WrHmHIewCLcBGAs/s1600/pegl_serv_oriented_app.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="439" data-original-width="489" height="572" src="https://2.bp.blogspot.com/-ZxNkb1T55K8/XFGjAeS94kI/AAAAAAAAaw4/9J62cgafiBIeqii2piYPCPdN-WrHmHIewCLcBGAs/s640/pegl_serv_oriented_app.gif" width="640" /></a></div>
<div>
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
وهذا ال Style تم استنباط منه Style اخر يسمى Microservice سوف يكون موضوع مقال قدام باذن الله.<br />
<br />
<h2 style="text-align: right;">
هل لابد ان يتبع النظام Style واحد</h2>
<div>
في الحقيقة لا يتبع النظام Style واحد ولكنه قد يكون متبع عدة Styles واظن انك قد استنبطت ذلك فتخيل معي انك قمت ببناء نظام باستخدام ال Layered Architectural Style وقسمته بالفعل لعدة طبقات واحدة لل Logic والاخرى للواجهات و اخرى لقواعد البيانات و قمت ببناءه ايضا باستخدام Service-Oriented Architectural Style فاستطعت ان تجعل اتصال بين ال Services التي قد تكون متواجدة في Layers مختلفة عبر ال Network باستخدام هذا ال Style فاستطعت ان تجعل كل Layer على Physical Server مختلف وبذلك تكون حققت N-Tire Architectural Style وايضا قمت بتصميم كل Service باستخدام Object-Oriented Architectural Style لتجعل التصميم سهل ويمكن تعديله واختباره بسهولة</div>
<div>
<br /></div>
<div>
انت الان اشكرت اكثر من Architectural Style لتبني نظامك , انت جميل لفعلك ذلك وانا سعيد لوصولك الى هنا 😁😁<br />
<br />
الان بقي لك شيء واحد وهو ان تعمل <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Like</a> لصفحتنا على <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Facebook</a> وان تكتب تعليق اذا اعجبك المقال او اذا تريد المناقشة واعلم انك اذا لم تعمل <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Like</a> فان ال الاسباجتي كود هو الذي منعك 😁😁😁 ولا تنسانا من صالح دعئك<br />
<div dir="rtl" style="text-align: center;">
<br /></div>
<div dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="text-align: center;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.1&appId=231569350872216&autoLogAppEvents=1';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
</div>
<div class="fb-like" data-action="like" data-href="https://www.facebook.com/GalalDev-438227283302149/" data-layout="standard" data-share="true" data-show-faces="true" data-size="large" dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="text-align: right;">
<div style="text-align: center;">
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
<div style="text-align: center;">
<br /></div>
</div>
<h4 dir="rtl" style="text-align: right;">
</h4>
</div>
</div>
<div dir="rtl" style="text-align: right;">
ملحوظة ما تم ذكره هو بعض ال Architectural Styles وليس جميعهم كما ان كل Style له تفاصيل اكثر بكثير ولكن هذا المقال كان لتوضيح الرية العامة ويمكنك التبحر اكثر ان اردت.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
مراجع</h2>
</div>
<div dir="rtl" style="text-align: right;">
https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ee658117(v=pandp.10)</div>
<div dir="rtl" style="text-align: right;">
http://www.dailywebsolutions.com/what-is-client-server-architecture</div>
<div dir="rtl" style="text-align: right;">
http://pafel.net/2015/10/misc/software-architecture-layered-architecture/</div>
<div dir="rtl" style="text-align: right;">
https://dbinfoworld.wordpress.com/2014/11/09/different-types-of-database-architecture/<br />
https://www.javatpoint.com/java-oops-concepts</div>
<div dir="rtl" style="text-align: right;">
https://www.ibm.com/support/knowledgecenter/en/SSMQ79_9.1.1.2/com.ibm.egl.pg.doc/topics/pegl_serv_overview.html</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com1tag:blogger.com,1999:blog-31554071.post-5046168683930363612018-11-13T23:57:00.000+02:002018-11-14T00:14:47.623+02:00هل كل وظائف ال IT تحتاج مهارة برمجية (الاجابة هنا 🤔)<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: right;">
<a href="https://2.bp.blogspot.com/-hWEOAYkuObg/W-s5ntPXWII/AAAAAAAAZis/Q1Q81Z3HjfME9zBZ7ahBbEk9aG0AblBngCLcBGAs/s1600/IntroIT.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="405" data-original-width="700" height="115" src="https://2.bp.blogspot.com/-hWEOAYkuObg/W-s5ntPXWII/AAAAAAAAZis/Q1Q81Z3HjfME9zBZ7ahBbEk9aG0AblBngCLcBGAs/s200/IntroIT.jpg" width="200" /></a>في احد الموتمرات قابلت مجموعة من الشباب حديث التخرج او اقترب علي التخرج وكانوا في حيرة كبيرة لتحديد المجال المناسب لهم في العمل وايضا كانت لديهم تساؤلات عن احتياجات سوق العمل الفعلية ومدي جدوي المواد التي يدرسونها وهكذا. حتي ان كان بعضهم يظن انه طالما لا يملك مهارة كتابة الاكواد بصورة ماهرة انه لن يعمل بمجال ال IT.</div>
<div style="text-align: right;">
ففي هذا المقال سوف اوضح بعض المجالات المختلفة في ال IT من واقع خبرتي ومعلوماتي الشخصية<br />
<br />
<a name='more'></a></div>
</div>
<div dir="rtl" style="text-align: right;">
<b><br /></b></div>
<div dir="rtl" style="text-align: right;">
</div>
<h2 dir="rtl" style="text-align: right;">
<b>محلل الاعمال (Business Analyst)</b></h2>
<div>
<b><br /></b></div>
<div dir="rtl" style="text-align: right;">
وهو الشخص الذي يقوم بالتواصل مع العميل وتحليل متطلباته ومتطلبات النظام الذي يحتاجه وكتابة هذه المتطلبات بشكل مناسب. ثم بعد تنفيذها يقوم بتسليمها للعميل وتدريبه عليها. في فرق ال Agile يطلق على هذا الشخص Product Owner</div>
<div dir="rtl" style="text-align: right;">
<b>لا تتطلب قدرة على كتابة الاكواد.</b></div>
<div dir="rtl" style="text-align: right;">
<b><br /></b></div>
<div dir="rtl" style="text-align: right;">
</div>
<h2 dir="rtl" style="text-align: right;">
محلل النظم (System Analyst)</h2>
<div dir="rtl" style="text-align: right;">
<div style="text-align: right;">
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
هذا الشخص هو الذي يقوم بتصميم النظام تصميم فني بمعني انه يقوم باستلام الطلبات ثم يقوم برسم شكل قاعدة البيانات ERD وايضا يقوم بتصميم ال Components المختلفة في النظام بدون تطبيقها وبعد ذلك يسلمها للمبرمجين لتنفيذها او بمعنى اخر انه يقوم بعمل System Design.<br />
<div dir="rtl">
<b>تتطلب خبرة عالية بهندسة البرمجيات وبالطبع كتابة الاكواد </b><br />
<b><br /></b></div>
</div>
<div dir="rtl" style="text-align: right;">
</div>
<h2 dir="rtl" style="text-align: right;">
مهندسين البرمجيات</h2>
<div dir="rtl" style="text-align: right;">
<div style="text-align: right;">
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
وهذا هو الشخص المسؤول عن كتابة الاكواد البرمجية وتنفيذ التصميم وقد تنقسم هذه الوظيفة الي</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
Frontend developer</h2>
<div dir="rtl" style="text-align: right;">
<div style="text-align: right;">
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
وهو المبرمج المسؤول عن ال User interface ويكون عمله علي برمجة واجهات النظام فقط وجعلها سهلة وفعالة للمستخدمين ويكون معظم عمله علي لغة مثل JavaScript وايضا قد يستخدم framework خاص بال UI مثل Angular او Vue او اي Framework اخر.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
</div>
<h2 dir="rtl" style="text-align: right;">
Backend developer</h2>
<div dir="rtl" style="text-align: right;">
<div style="text-align: right;">
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
وهو المسؤول عن ال Business logic وتنفيذ مهام النظام الرئيسية وايضا التواصل مع قاعدة البيانات وحفظ البيانات في قاعدة البيانات والإستعلام عنها وهكذا وقد يستخدم لغات مثل C# او Java او Framework مثل Node.js او اي لغة اخرى</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
Fullstack developer</h2>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br />
وهذا الشخص يكون له من المهارات ما يؤهله لان يكون Frontend and backend وبالتالي يقوم بالدورين معا.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
وقد يختلف المسمي باختلاف الTechnology مثلا<br />
<div dir="ltr" style="text-align: right;">
.Net web developer</div>
<div dir="ltr" style="text-align: right;">
Php developer</div>
Xamarin developer<br />
Android developer<br />
......الخ</div>
<div dir="rtl" style="text-align: right;">
<b>وبطبيعة الحال لابد ان تكون مهارة التكويد للمبرمجين اعلى ما يمكن</b><br />
<b><br /></b></div>
<h2 dir="rtl" style="text-align: right;">
مصمم الواجهات Ui designer</h2>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
هو الشخص المسؤول عن تصميم الواجهات واختيار الالوان وجعل شكل التصميم رائع ويستخدم ادوات التصميم مثل ادوات Adobe.</div>
<div dir="rtl" style="text-align: right;">
<b>يحتاج مهارة تكويد متوسطة</b></div>
<div dir="rtl" style="text-align: right;">
<div style="text-align: right;">
<br /></div>
</div>
<h2 dir="rtl" style="text-align: right;">
مهندس ال Testing او Quality Control</h2>
<div dir="rtl" style="text-align: right;">
<br />
هو الشخص الذي يقوم باختبار النظام بعد تطويره من قبل المبرمجين والتأكد من ان النظام يقوم بمهامه بفعالية وهنا قد تكون عملية الاختبار تتم بشكل يدوي بمعني ان الTester يقوم بالعمل علي النظام كانه مستخدم ويتاكد من جودته.<br />
او ان تتم بشكل Automated عن طريق ان الTester يقوم باستخدام ادوات تساعده علي كتابة اكواد برمجية تختبر النظام.<br />
<b>يحتاج مهارة تكويد من متوسطة اذا كان الTest يدوي الى فوق متوسطة لو كان Test Automation</b></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
Quality Assurance</h2>
<div dir="rtl" style="text-align: right;">
<br />
الشخص صاحب هذه الوظيفة يكون مسؤول عن متابعة ال Process الخاصة بسير العمل داخل الشركة والتاكد من ان الفريق في الشركة يتبع الانشطة المختلفة وايضا قد يقوم بعمل اقتراحات لتحسين ال Process فمثلا اذا كانت الشركة لديها بعض المعايير لعملية التحليل وطريقة كتابته و طريقة تسليمه فدور هذا الشخص التأكد من تنفيذ هذه المعايير من قبل الفريق.</div>
<div dir="rtl" style="text-align: right;">
<b>لا تحتاج مهارة تكويد</b><br />
<b><br /></b></div>
<h2 dir="rtl" style="text-align: right;">
مهندس ال Devops</h2>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
اذا كان مصطلح Devops جديد عليك يمكنك مراجعة مقالي السابق من <a href="http://galaldev.blogspot.com/2018/09/devops.html" target="_blank">هنا</a>.<br />
هذا الشخص يكون هو المسؤول عن تجهيز البيئة الخاصة بالادوات التي يعمل عليها فريق البرمجيات والتحليل وعمل الاعدادات اللازمة وايضا عمل الاعدادات اللازمة للاصدارات المختلفة من الانظمة التي تطورها الشركة لتكون جاهزة للتنزيل عند العملاء<br />
فمثلا اذا كانت الشركة تعمل علي ال TFS وهذا هو عباره عن Server لادارة عملية تطوير البرمجيات ، هنا يكون دور مهندس الDevops عمل تنصيب لل TFS وعمل اعداداته وصلاحيات المستخدمين وعمل اعدادات الSource control واعدادات ال Build واعدادات ال Releases وهكذا.</div>
<div dir="rtl" style="text-align: right;">
<b>يحتاج مهارة تكويد متوسطة</b><br />
<b><br /></b></div>
<h2 dir="rtl" style="text-align: right;">
الدعم الفني (Technical Support)</h2>
<div dir="rtl" style="text-align: right;">
<br />
وهو الشخص الذي يتواصل معه العميل اذا اراد ان يستفسر عن شيء بالنظام او اذا واجهته مشكلة معينة.<br />
<b>قد لا تحتاج هذه الوظيفة الى مهارة تكويد او قد تحتاج حسب طبيعة عملية الدعم وحسب طبيعة المشروع</b></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
مدير قواعد البيانات Database Admin</h2>
<div dir="rtl" style="text-align: right;">
<br />
هو الشخص المسؤول عن ادارة قاعدة البيانات وصيانتها والتأكد من أدائها وتحسينه وايضا اخذ نسخ احتياطية والتأكد من سلامتها</div>
<div dir="rtl" style="text-align: right;">
<b>يحتاج مهارة تكويد متوسطة</b><br />
<b><br /></b></div>
<h2 dir="rtl" style="text-align: right;">
مهندس Network </h2>
<div dir="rtl" style="text-align: right;">
<br />
هو الشخص المسؤول عن عمل الشبكات داخل الشركة ومتابعتها والتأكد من فعالياتها<br />
<b>يحتاج مهارة تكويد منخفضة</b></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
System Admin</h2>
<div dir="rtl" style="text-align: right;">
<br />
وهو الشخص المسؤول عن ال Servers و ال PCs و ادارتها وامنها وصيانتها.</div>
<div dir="rtl" style="text-align: right;">
<b style="font-family: "times new roman";">يحتاج مهارة تكويد منخفضة</b><br />
<div dir="rtl" style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: right; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div style="margin: 0px;">
<b><br /></b></div>
</div>
</div>
<h2 dir="rtl" style="text-align: right;">
مهندس Machine Learning </h2>
<div dir="rtl" style="text-align: right;">
<br />
اذا كنت تريد مقدمة عن ال Machine learning يمكنك قراءة مقالي السابق من <a href="http://galaldev.blogspot.com/2018/05/machine-learning-intro.html" target="_blank">هنا</a><br />
هذا الشخص هو المسؤول عن بناء النماذج الخاصة بال Machine learning حيث ان علم ال Machine learning تختلف تفاصيل دراستة عن ال Software development ولذلك تكون هناك حاجة لشخص مسؤول عن ذلك وفي الحقيقة هذه من اكثر الوظائف التي تقول دراسات كثيرة انها ستكون الاعلي طلبا خلال الاعوام القادمة.<br />
<b>يحتاج مهارة تكويد عالية</b></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
متخصص الBusiness Intellegence</h2>
<div dir="rtl" style="text-align: right;">
<br />
في بعض الاماكن الكبيرة قد يكون هناك النظام الذي يعمل عليه الموظفين بشكل يومي وايضا نظام اخر مهمته امداد الادارة العليا بتقارير و رسومات بيانية تساعدهم في اتخاذ القرار هنا ياتي دور هذا الشخص الذي يكون مسؤول عن تطوير هذا النظام وقد يستخم انظمة مثل SQL SERVER Analysis Service,Tablue,Power BI....etc</div>
<div dir="rtl" style="text-align: right;">
<b style="font-family: "times new roman";">يحتاج مهارة تكويد متوسطة الى عالية حسب طبيعة وظيفته داخل المؤسسة</b></div>
<div dir="rtl" style="text-align: right;">
</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
Data analyst</h2>
<div dir="rtl" style="text-align: right;">
<div style="text-align: right;">
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
في بعض الاماكن قد يكون هناك نظام او اكثر تعمل عليه المؤسسة ومع تعدد الانظمة واحتياج الادارة الي تقارير معينة او تحليلات معينة لا يستطيع المستخدم العادي الوصول لها من خلال الانظمة المتاحة لديه ، تظهر هنا اهمية هذا الشخص الذي يقوم بجمع البيانات وعمل تحليلات جاهزة وتقارير يستطيع الموظف العادي استخدامها</div>
<div dir="rtl" style="text-align: right;">
<b>يحتاج مهارة تكويد متوسطة</b></div>
<div dir="rtl" style="text-align: right;">
<b><br /></b></div>
<div dir="rtl" style="text-align: right;">
<b>كما لاحظنا مما سبق لا تحتاج كل الوظائف الى مهارات تكويد عالية فبالطبع كلما كانت قدرتك على كتابة الاكواد عالية كلما كانت حياتك اسهل لانك ستستطيع عمل Automation لاعمالك اليومية بسهولة ولكن في بعض الوظائف قد لا تكون ضرورية</b></div>
<div dir="rtl" style="text-align: right;">
<b><br /></b></div>
<div dir="rtl" style="text-align: right;">
هذه بطبيعة الحال ليست كل الوظائف المتاحة في مجال ال IT ولكن هذه من الاكثر شيوعا.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
واود التنويه الى ان في معظم الاحيان يقوم شخص واحد باكثر من وظيفة فمثلا قد يقوم المبرمجون ايضا بوظيفة محلل النظم وقد يقوم ال Tester بوظيفة ال Quality Assurance وقد تشمل وظيفة ال Data Analyst اعمال ال Business Intellegence وقد يقوم ال System Admin باعمال ال Network , وادارة قواعد البيانات...... الخ</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-27767992968800160112018-10-14T00:35:00.003+02:002019-01-30T15:45:39.744+02:00بالعربي مقدمة عن Software Architecture واهميته<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
<a href="https://2.bp.blogspot.com/-pXN8-CJ5LGw/W8JRfIy57FI/AAAAAAAAY8A/y4sR1lZUHaQZn1KCEmZYQShjras5qJCGwCLcBGAs/s1600/welcome-bg.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="376" data-original-width="722" height="102" src="https://2.bp.blogspot.com/-pXN8-CJ5LGw/W8JRfIy57FI/AAAAAAAAY8A/y4sR1lZUHaQZn1KCEmZYQShjras5qJCGwCLcBGAs/s200/welcome-bg.png" width="200" /></a><u>ان</u> بناء البرامج ليس بالشيء البسيط فلبناء اي نظام لابد ان يمر بمجموعة مراحل اولها جمع المتطلبات والتخطيط ثم التصميم والبرمجة ثم الاختبار والتنصيب وهكذا<br />
ومن اهم القرارات عند تصميم اي نظام هو اختيار الهيكل او ال Architecture الخاص بهذا النظام الذي يراعي متطلبات النظام التشغيلية و الفنية ويراعي جودة النظام من حيث الاداء و الامان والاستجابة للتعديلات وهكذا. في هذا المقال سوف نتناول مقدمة عن ال Software Architecture واهمية اختيار ال Style المناسب في بداية تصميم النظام لضمان نجاحه.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
</div>
<a name='more'></a><div dir="rtl" style="text-align: right;">
<br /></div>
<h3 dir="rtl" style="text-align: right;">
ما هو ال Software Architecture ؟</h3>
<div>
<br /></div>
<div dir="rtl" style="text-align: right;">
<b>ولفهم المقصود بال Software Architecture تخيل معي السيناريو التالي :</b></div>
<div dir="rtl" style="text-align: right;">
<b><br /></b></div>
<div dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="text-align: right;">
جاء لك احد العملاء وطلب منك ان تقوم بعمل نظام لادارة مكتبته التي يقوم فيها ببيع وايجار الكتب<br />
فقمت انت ببناء النظام بدون ان تاخذ في اعتبارك اختيار Architecture مناسب لطبيعة النظام او الفريق الذي يعمل في تطوير البرنامج.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
فقمت انت ببناء النظام مثلا ك Desktop application معتمد علي قاعدة بيانات Access مثلا باعتبار ان البرنامج سيعمل علي جهاز واحد وموظف واحد وقمت ببناء النظام كله علي هذا الاساس 😱😱.</div>
<div dir="rtl" style="text-align: right;">
<br />
عند تسليم العميل اكتشفت أن لديه اكثر من مكتب بيع الكتب ويريد أن يعملوا جميعا علي نفس النظام (يال الهول).</div>
<div dir="rtl" style="text-align: right;">
<br />
<b>اصبحت الان في ورطة كبيرة حيث أن نظامك أصبح لا يلائم عميلك ولكن لماذا حدث هذا ؟</b></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
الإجابة ببساطة انك لم تختار ال Architecture المناسب من البداية فمثلا في هذا المثال كان من المفترض أن تبني نظامك ك Client-Server Architecture بحيث أن النظام يسمح باتصال اكثر من Client (مكتب بيع المكتبة) علي ال Application Server كما هو الحال في ال Web based systems.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div class="separator" dir="rtl" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-VwLuq9pKhXk/W8JU06YkLMI/AAAAAAAAY8M/czuZkUxbZ0sd6ptqzA5132oD2ThuIr5yQCLcBGAs/s1600/client-341420.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="780" data-original-width="1040" height="240" src="https://4.bp.blogspot.com/-VwLuq9pKhXk/W8JU06YkLMI/AAAAAAAAY8M/czuZkUxbZ0sd6ptqzA5132oD2ThuIr5yQCLcBGAs/s320/client-341420.png" width="320" /></a></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
افترض معي انك قد راعيت كيفية عمل ال Deployment من البداية وصممت نظامك Client-Server Architecture وكان فريقك هو مبرمج أو اثنان يقومان بكل العمل ولكن بعد فترة أصبح فريقك اكبر وأصبح هناك من يصمم الواجهات وهناك من يقوم بعمل اللوجيك الخاص بالنظام وهناك من يصمم قاعدة البيانات وهكذا وانت لم تكن تراعي ذلك في ال Architecture ولم تكن تقسم نظامك الي طبقات مثلا طبقة الواجهات طبقة اللوجيك وطبقة للاتصال بقاعدة البيانات فماذا ستفعل ؟!!! </div>
<div dir="rtl" style="text-align: right;">
اذا كنت من البداية معتمد ايضا علي Layered Architecture كانت امورك ستصبح اسهل.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div class="separator" dir="rtl" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-LTMFS-NJFqs/W8JV0D0p8FI/AAAAAAAAY8Y/JfPUdawgKCIUvn_9TDP_9oi5tyoavo8bQCLcBGAs/s1600/image1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="314" data-original-width="491" height="204" src="https://1.bp.blogspot.com/-LTMFS-NJFqs/W8JV0D0p8FI/AAAAAAAAY8Y/JfPUdawgKCIUvn_9TDP_9oi5tyoavo8bQCLcBGAs/s320/image1.PNG" width="320" /></a></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
مما سبق يتضح أن ال Software Architecture هو عملية تحديد الهيكل العام للنظام أو البرنامج الذي يلائم متطلبات التشغيل و ايضا المتطلبات الفنية أثناء البناء أو صيانة النظام او حتى ال Deployment وكل ذلك لتحسين جودة النظام من حيث أدائه أو امانه أو استجابته التعديلات .... الخ.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
</div>
<h3 dir="rtl" style="text-align: right;">
يصعب تغييرها </h3>
<div style="direction: rtl;">
<br /></div>
<div dir="rtl" style="text-align: right;">
ومن الواضح أن القرارات الخاصة بال Software Architecture هي قرارات هامة جدا بمعني اننا نحدد شكل النظام العام ووحداته ولكن دون الدخول في تفاصيل كيفية التنفيذ وايضا هذه القرارات تكون مؤثرة <b>يصعب تغييرها</b> مستقبلا لذا لابد من الحذر الشديد في البداية</div>
<div dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
</div>
<h4 dir="rtl" style="text-align: right;">
ولاختيار الـ Architecture المناسب لابد من الإجابة عن بعض الأسئلة منها</h4>
<div dir="rtl" style="text-align: right;">
<br /></div>
<ul dir="rtl" style="text-align: right;">
<li>كيف سيقوم المستخدمين باستخدام نظامك ؟<br />فقد يختلف الArchitecture باختلاف عدد او اسلوب المستخدمين فمثلا اذا كان المستخدم سيقوم باستخدام النظام من ال Mobile وايضا من الكمبيوتر فهنا قد تحتاج لاختيار Architecture مناسب لذلك</li>
<li>كيف سيتم عمل Deployment لنظامك ؟<br />فقد يكون النظام سيتم تنصيبه على خادم واحد او سيتم تنصيبه على خوادم كثيرة وهنا يوجد اختلاف جوهري في عملية بناء النظام واختيار قاعدة بياناته بين تلك وذلك</li>
<li>ما هي المعايير التي تعبر عن جودة نظامك بمعني هل سرعة اداء واستجابة النظام ام امان النظام .... الخ؟<br />فقد يهتم نظام بالاداء اكثر من الامان او يهتم نظام اخر بالامان اكثر من الاداء</li>
<li>كيف يتم تصميم النظام بحيث يستجيب للتغيرات مع مرور الوقت دون إعادة بنائه من جديد ؟</li>
</ul>
<div style="text-align: right;">
<br /></div>
<h3 dir="rtl" style="text-align: right;">
ال Architecture Styles</h3>
<div>
<br /></div>
<div dir="rtl" style="text-align: right;">
ويوجد اكثر من Style متعارف عليه لل Software Archictecture ذكرت بشكل مبسط جدا مثالين منهم في هذا المقال وهم ال <b>Client Server Architecture</b> و ال <b>Layered Architecture</b> ولكن يوجد Styles اخرى فمنها من يتهتم بطريقة ال Deployment ومنها من يهتم بتقسيم بناء النظام من الداخل وهكذا وسوف اتحدث عن هذه ال Styles في مقال او اكثر قادمين باذن الله. وايضا في المقالات القادمة سوف اتحدث عن علاقة ال Software Archeticture بال DevOps</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
الان بقي لك شيء واحد وهو ان تعمل <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Like</a> لصفحتنا على <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Facebook</a> وان تكتب تعليق اذا اعجبك المقال او اذا تريد المناقشة واعلم انك اذا لم تعمل <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Like</a> فان ال الاسباجتي كود هو الذي منعك 😁😁😁</div>
<div dir="rtl" style="text-align: center;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.1&appId=231569350872216&autoLogAppEvents=1';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
</div>
<div class="fb-like" data-action="like" data-href="https://www.facebook.com/GalalDev-438227283302149/" data-layout="standard" data-share="true" data-show-faces="true" data-size="large" dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="text-align: right;">
<div style="text-align: center;">
<br /></div>
</div>
<h4 dir="rtl" style="text-align: right;">
مراجع</h4>
<div dir="rtl" style="text-align: right;">
https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff650706(v%3dpandp.10)</div>
<div dir="rtl" style="text-align: right;">
https://www.coursera.org/learn/software-architecture/</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com5tag:blogger.com,1999:blog-31554071.post-43340519875089311972018-09-24T20:28:00.000+02:002018-09-24T20:30:44.252+02:00بالعربي ادوات ال Agile لتحقيق ال Planning في ال DevOps<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
<a href="https://3.bp.blogspot.com/-unMY49BQD8M/W6koCL_u9yI/AAAAAAAAYMM/DmDyp-hYyZgdaj_8LP-1z4Pck5ct9Uo5ACLcBGAs/s1600/shutterstock_496292356.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1254" data-original-width="1600" height="156" src="https://3.bp.blogspot.com/-unMY49BQD8M/W6koCL_u9yI/AAAAAAAAYMM/DmDyp-hYyZgdaj_8LP-1z4Pck5ct9Uo5ACLcBGAs/s200/shutterstock_496292356.jpg" width="200" /></a><br />
<a href="https://4.bp.blogspot.com/-MgvlM6n0bvw/W6kn_UN0n8I/AAAAAAAAYLo/XdS29URvAlQkgE5XI4Ng-S8KZeAouwHkACLcBGAs/s1600/AgileLogo2018_CLEAR.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"></a>في هذا المقال سوف نستكمل حديثنا في سلسة <a href="http://galaldev.blogspot.com/2018/09/planning-devops.html" target="_blank">مقدمة على ال DevOps</a> التي قد بدأنها بمقدمة عامة لتوضيح الصورة الكلية لموضوع ال DevOps ثم تبعها مقال خاص بالفرق بين <a href="http://galaldev.blogspot.com/2018/09/planning-devops.html" target="_blank">التخطيط لصناعة البرمجيات</a> بين اسلوب ال Agile والاسلوب القديم وكيفية عمل عملية ال Estimation بالاعتماد على ال Story Points.<br />
في هذا المقال سوف نوضح بعض المفاهيم والادوات المستخدمة في عملية التخطيط والمتابعة لدورة حياة صناعة البرمجيات الخاصة بال Agile او بصورة ادق ال Agile Scrum حيث انها الطريقة الاكثر شيوعا.<br />
<br />
<br />
<br />
<a name='more'></a><br />
<br />
<h2 style="text-align: right;">
الفريق</h2>
<br />
<a href="https://3.bp.blogspot.com/-sV3MeidW7oE/W6koBGDd20I/AAAAAAAAYMY/9WxQALxE56gN7JAmneOWiRPFoQvAnl-IwCEwYBhgL/s1600/scrum.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="296" data-original-width="550" height="107" src="https://3.bp.blogspot.com/-sV3MeidW7oE/W6koBGDd20I/AAAAAAAAYMY/9WxQALxE56gN7JAmneOWiRPFoQvAnl-IwCEwYBhgL/s200/scrum.png" width="200" /></a>من اهم معايير ال Agile الاثنى عشر ان "يراجع فريق العمل على فترات منتظمة كيف يصبح أكثر فاعلية، ثم يدقق ويضبط سلوكه وفقا لذلك" وهذا النص مقتبس من موقع ال <a href="http://agilemanifesto.org/iso/ar/principles.html" target="_blank">agilemanifesto</a> فكما هو واضح اهمية الدور الذي يقوم به الفريق ففي ال Agile اصبح الفريق يعيد تنظيم عمله وادائه وسلوكه خلال كل Sprint بل وايضا الفريق يستطيع ان يختار طريقة العمل التي يعمل بها سواء Scrum أو Kanban او اي طريقة اخرى . اي ان الفريق اصبح لديه صلاحيات اكبر كانت بالسابق تقتصر على اشخاص او مديرين محددين.<br />
<br />
وفي اغلب فرق تطوير البرمجيات نجد انها تحتوي على اعضاء مثل المبرمجين Developers و ال Testers و ال Business Analyst و ال System مع تدرجهم الوظيفي سواء Senior , Junio Or Team Leader ... الخ . ولكن في ال Scrum ظهر عضوان جديدان وهم كالتالي<br />
<br /></div>
<div dir="rtl" style="text-align: right;">
<h3 style="text-align: right;">
Product Owner</h3>
هو العضو في الفريق حلقة الوصل بين العميل و فريق التطوير فهو الشخص الذي يتواصل مع العميل ويفهم احتياجاته ثم يقوم بكتابة متطلبات العميل ومناقشتها مع باقي اعضاء الفريق وعند الانتهاء من الطلبات وتنفيذها او تنفيذ جزء منها هو الذي يتواصل مع العميل ويقوم باخذ رأيه في ما تم تنفيذه وهكذا , وفي الحقيقة هذا ما كان يقوم به ال Business Analyst ولكن مع اختلاف المسميات</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<h3 style="text-align: right;">
Scrum Master</h3>
هو العضو في الفريق الذي يحافظ على اداء الفريق ويذلل كل المعوقات طوال فترة ال Sprint فمثلا هو الشخص الذي يتأكد من اتمام انشطة ال Scrum المختلفة ومتابعتها او انه الشخص المسئول عن ايجاد حلول والتواصل مع الاخرين لحل مشكلة في حاسوب المطور مثلا او انه هو الشخص الذي يحمي الفريق من اي ضغوط خارجية فمثلا قد يحمي الفريق من ضغوط يقوم بها Product Owner قليل الخبرة مثلا.<br />
<br /></div>
<div dir="rtl" style="text-align: right;">
<a href="https://2.bp.blogspot.com/-yyRTEOIcMgs/W6koAcrCISI/AAAAAAAAYMU/o2RHC4fX6SoMEk2CYmdbbkjgpZkhojjOwCEwYBhgL/s1600/agile-29-512.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="512" data-original-width="512" height="200" src="https://2.bp.blogspot.com/-yyRTEOIcMgs/W6koAcrCISI/AAAAAAAAYMU/o2RHC4fX6SoMEk2CYmdbbkjgpZkhojjOwCEwYBhgL/s200/agile-29-512.png" width="200" /></a><br />
<h2 style="text-align: right;">
دورة العمل داخل ال Scrum</h2>
<div>
تخيل معي ان لديك مجموعة طلبات من عميل لمشروع جديد مكتوبة في ملف Excel مثلا اول شيء سيتم عمله هو كتابة هذه المتطلبات علي شكل User Story بمعنى تقسيم هذه الطلبات بشكل مبسط لاقصى درجة ثم كتابتها على شكل انا كمستخدم اريد كذا و كذا او ممكن كتابتها باي طريقة يتفق عليها الفريق تكون واضحة للجميع</div>
<br />
الان انت لديك مجمعة من ال User Story لم تدخل للعمل وهذه المجموعة تسمى ال Backlog او السجل الذي يحتوي كل ال User Stories ولابد من ان تقوم بترتيبه حسب الاوليات.<br />
<br />
<h3 style="text-align: right;">
Release Planning</h3>
الخطوة الاولى هي التخطيط لل Releases التي سوف تصدرها من النظام الذي تقوم بتطويره وفي خلال هذه المرحلة يجتمع كامل الفريق مع ال Product Owner للنقاش في ال User Stories المختلفة داخل ال Backlog وبناء على هذه النقاشات يتم الغاء بعض ال User Stories او تعديلها او اعادة ترتيب اولوياتها او او او<br />
ثم بعد ذلك يقوم الفريق بعمل Story Point Estimation الذي تكلمنا عنه باستفاضة في <a href="http://galaldev.blogspot.com/2018/09/planning-devops.html" target="_blank">مقال سابق</a> وينتج عنه ان اجمالي عدد نقاط ال Backlog وعن طريق عدد النقاط تستطيع تحديد عدد ال Sprints التي سيستغرقها المشروع<br />
فمثلا اذا كان اجمالي عدد النقاط 100 نقطة والفريق يقوم بعمل 25 نقطة كل Sprint اذا هذا ال Backlog سيستغرق 4 Sprints ومثلا كان الفريق يقوم باصدار Release كل 2 Sprint اذا هذا المشروع سيتم اصدارة على 2 Release وبهذه الطريقة تستطيع معرفة متى ستنتهي كل User Story او بمعنى اخر الSprint الذي ستنتهي فيه ال User Story<br />
<br /></div>
<div dir="rtl" style="text-align: right;">
<h3 style="text-align: right;">
Sprint Planning</h3>
قبل بداية ال Sprint تقوم بالتخطيط له عن طريق تقسيم كل User Story الى Tasks على كل عضو من اعضاء الفريق فمثلا قد تكون هناك Task لعمل الواجهة UI من قبل ال Frontend و Task اخر لبرمجة ال Backend وتاسك اخر لعمل Unit Test و Task اخر لعمل Test Plan او Test Execution من ال Testers وهكذا.<br />
وعملية التوزيع هذه تقوم فيها بتحديد عدد ساعات متوقع لكل Task ويقوم بها العضو صاحب ال Task نفسه (ولا يقوم بها مديره مثلا نيابة عنه) وذلك لضمان التزامه بمال قال وايضا لشعورة بمدى اهمية رأيه.<br />
<br />
الان كل عضو في الفريق يعلم ماذا عليه ان يفعل تحديدا فقد شاركوا جميعا في مناقشة ال Business الخاص بكل User Story خلال ال Release Planning وايضا يعلم كل عضو الوقت المتوقع لتنفيذ كل مهمة وكل الفريق يعمل حسب الاولوية التي حددها ال Product Owner مع العميل وكذلك العميل يعلم متى سيتسلم كل طلب من طلباته المختلفة (الكل سعيد و فرحان :) ).<br />
<br />
هل تتذكر الان الطريقة القديمة وكيف كا يحدث فيها من ضغوط وتخطيط باسلوب قديم لا يشارك فيه الا بعض من الفريق وقد يفشل المشروع بالنهاية؟ هل احسست بالفرق النفسي للفريق و للعميل و بمستوى الاداء الذي يتحسن من تعديل اسلوب التخطيط فقط حتى الان.<br />
<br />
<h3 style="text-align: right;">
Standup Meeting</h3>
خلال فترة عمل ال Sprint يقوم الفريق بعمل اجتماع يومي غالبا في بداية اليوم لمدة حوالي ربع ساعة (اجتماع سريع) . والهدف منه هو متابعة العمل بشكل سريع ففي هذا الاجتماع يتم الاجابة على الاسئلة التالية؟<br />
ماذا فعلت بالامس؟<br />
ماذا ستفعل اليوم؟<br />
هل يوجد معوقات تعوق عملك؟<br />
<br />
<br />
<h3 style="text-align: right;">
Retrospective Meeting</h3>
في نهاية كل Sprint يعقد هذا الاجتماع لمناقشة ما تم خلال ال Sprint ككل وقد يقوم الفريق بتقييم ادائه او مناقشة التعديلات التي قد يقومون بها لتحسين العمل في ال Sprint القادم وهكذا.<br />
<br />
<h3 style="text-align: right;">
Sprint Review Meeting</h3>
في هذا الاجتماع يجتمع الفريق مع ال Product Owner لتسليمه الذي تم بالSprint وقد يتم مناقشة اي اعدادات خاصة بالطلبات التي نفذت او توضيح اسلوب عملها على النظام وما الى ذلك.<br />
<br />
<h3 style="text-align: right;">
Customer Feedback</h3>
بعد انتهاء ال Sprint يقوم الفريق بتجهيز نسخة من النظام تحتوي على ما تم خلال ال Sprint وتكون متاحة للعميل ليبدي رأيه فيما تم تنفيذه خلال ال Sprint. وفي الحقيقة هذه الخطة من الخطوات الهامة جدا حيث اخذ رأي العميل بعد كل Sprint يجعلك في امان من عدم توافق ما تم تنفيذه مع متطلباته حيث انه اذا وجد شيئا لم يعجبه سوف يخبرك بعد الSprint وبالتالي قد تستطيع تعديله في Sprint لاحق وهكذا.<br />
<br />
<br />
<br />
الان انت خططت للمشروع وقمت بمتابعة الSprints من خلال اجتماع يومي واجتماع اخر كل Sprint وايضا سلمت الطلبات للProduct Owner واخذت رأي العميل بعد كل Sprint . هل تشعر بالتحسن الذي حدث؟<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-2xwtD2IKmAM/W6koClLUsJI/AAAAAAAAYMQ/__8_-8-ggxw1O8l5skZFZK2-IVRpH8YZACLcBGAs/s1600/wp_wp_graf_scrum_200_en.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="596" data-original-width="1600" height="238" src="https://2.bp.blogspot.com/-2xwtD2IKmAM/W6koClLUsJI/AAAAAAAAYMQ/__8_-8-ggxw1O8l5skZFZK2-IVRpH8YZACLcBGAs/s640/wp_wp_graf_scrum_200_en.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
الان بقي لك شيء واحد وهو ان تعمل <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Like</a> لصفحتنا على <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Facebook</a> وان تكتب تعليق اذا اعجبك المقال او اذا تريد المناقشة واعلم انك اذا لم تعمل <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Like</a> فان ال Scrum Master هو الذي منعك 😁😁😁<br />
<div style="text-align: center;">
<br /></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.1&appId=231569350872216&autoLogAppEvents=1';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<br />
<div class="fb-like" data-action="like" data-href="https://www.facebook.com/GalalDev-438227283302149/" data-layout="standard" data-share="true" data-show-faces="true" data-size="large">
</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<h2 style="text-align: right;">
مراجع</h2>
https://www.mountaingoatsoftware.com<br />
http://agilemanifesto.org/iso/ar/principles.html<br />
<br />
تمت بحمد الله<br />
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com1tag:blogger.com,1999:blog-31554071.post-84585424391481881232018-09-15T03:07:00.002+02:002018-09-15T03:07:37.229+02:00بالعربي ال Planning في ال DevOps ببساطة<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
<a href="https://2.bp.blogspot.com/-Rn4H1ZVa2KI/W5xXD3AXwJI/AAAAAAAAYJU/_m5iNycZpw4AP2GJiIROTfI41-4MCnHjQCLcBGAs/s1600/3958-9695ce61-83fa-4dcd-92fc-ee2feca72531.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="376" data-original-width="735" height="101" src="https://2.bp.blogspot.com/-Rn4H1ZVa2KI/W5xXD3AXwJI/AAAAAAAAYJU/_m5iNycZpw4AP2GJiIROTfI41-4MCnHjQCLcBGAs/s200/3958-9695ce61-83fa-4dcd-92fc-ee2feca72531.png" width="200" /></a>في هذا المقال سوف استكمل سلسلة ال مقدمة عن الDevOps وسوف اتكلم عن ال Planning وعن طريقة تقييم متطلبات العملاء وتوقع الوقت الذي قد يستغرقه تنفيذ المشروع وذلك بصورة مبسطة</div>
<div dir="rtl" style="text-align: right;">
وهذا المقال مرتبط بالمقال السابق <a href="http://galaldev.blogspot.com/2018/09/devops.html" target="_blank">مقدمة عن ال DevOps</a></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br />
<br />
<br />
<br />
<a name='more'></a><br />
<br />
كما رأينا في المقال السابق اختلاف طرق دورة حياة بناء البرمجيات واتضح لنا ان طريقة البناء باسلوب الشلال بها مشاكل كبيرة قد تؤدي الى فشل المشروع في النهاية وان طريقة ال Agile افضل بكثير حيث انها تجعلنا ناخذ رأي العميل في كل دورة صغيرة من حياة المشروع</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
ولل Agile اكثر من طريقة اشهرهم تسمى Scrum فهيا بنا نمشي في جوانبها 😀<br />
<br />
<h2 style="text-align: right;">
Scrum</h2>
<div>
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
الان انت قائد فريق يتكون من 5 اشخاص وجاء لك عميل يريد بناء نظام لادارة صيدلية ونفترض للتبسيط انه اعطى لك كل احتياجاته من البرنامج الذي يريده واتفقتم على كل المطلوب.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
جميل انت الان تعاقدت على مشروع جديد , مبروك 💪💪<br />
<br />
ولكن انتظر هل اخبرت العميل المدة الزمنية التي سيتسلم فيها العميل المشروع 🕓 ؟</div>
<div dir="rtl" style="text-align: right;">
في ال Agile المفترض ان طريقة تقييم المجهود والمدة الزمنية للمشروع لا يقوم بها شخص واحد ذو خبرة كما هو المعتاد ولكن يقوم بها الفريق ككل وهذا عمليا ادق و افضل ولكن كيف , خذ نفس عميق وهيا نفقهم ما هو الSprint اولا</div>
<div dir="rtl" style="text-align: right;">
<br />
<h2 style="text-align: right;">
ال Sprint</h2>
<div>
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
عادة في ال Scrum يتم تقسيم المشروع الى مراحل كل مرحلة تسمى Sprint وكل Sprint يفضل ان يكون وقته من اسبوعان الى اربعة اسابيع وقد تقوم بتقسيم اعلى يسمى Release</div>
<div dir="rtl" style="text-align: right;">
مثلا انت من الممكن ان تقول لعميلك هذا المشروع ساسلمه لك على ثلاث Releases (وانت تعلم ان كل Release تحتوي على اثنان Sprint وانت تعلم ايضا ان كل Sprint اسبوعان مثلا) اذا المشروع سيأخذ 12 اسبوع</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<b>ولكن كيف يستطيع فريقك تحديد عدد ال Releases او عدد ال Sprints التي ستأخذها متطلبات برنامج الصيدلية التي تعاقدت عليه ؟</b></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
في الحقيقة لتحقيق ذلك لابد من تحويل كل متطلب من متطلبات عميلك الى رقم ولكن كيف ذلك 🤔.؟</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
تخيل معي ان متطلبات بناء نظام الصيدلية هي كالتالي</div>
<div dir="rtl" style="text-align: right;">
</div>
<ol dir="rtl" style="text-align: right;">
<li>الصيدلي يريد تعريف اسماء الادوية على النظام</li>
<li>الصيدلي يريد تعريف اسماء العملاء على النظام</li>
<li>الصيدلي يريد بيع الادوية</li>
</ol>
<div dir="rtl" style="text-align: right;">
الطريقة التي سنتحدث عنها الان تسمى <b>Fibonacci </b><span class="fontstyle0">وهي من اشهر الطرق المستخدمة في ال Scrum وتعتمد هذه الطريقة على اعطاء كل متطلب رقم اما 1 او 2 او 3 او 5 او 8 او 13 وهكذا (لاحظ انه لا يوجد رقم 4 مثلا او 6 او ...)</span></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
الان سيقوم فريقك الذي سيعمل على تحقيق هذه المتطلبات بتحديد اقل طلب يأخذ مجهود وليكن الطلب الاول ويعطي له الرقم 1 كعدد نقاط</div>
<div dir="rtl" style="text-align: right;">
عند تقييم مثلا عدد النقاط للطلب رقم 3 يقوم فريقك بمقارنة المجهود المطلوب لتنفيذه بالطلب صاحب اقل نقاط الذي ياخذ رقم 1 فمثلا تخيل ان فريقك قيم هذا الطلب انه سيكون 5 اضاعاف الطلب الاول ولذلك اعطى له 5 نقاط</div>
<div dir="rtl" style="text-align: right;">
وعند تقيييم الطلب الثاني وجد فريقك انه مساوي للطلب الاول وبالتالي اعطى له 1 وهكذا</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
الان انت لديك وزن نسبي لكل طلب فالنفترض مثلا ان مجموع طلبات الصيدلية بالكامل كانت 120 نقطة.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
بقي لك ان تعرف عدد النقاط التي تستطيع تنفيذها داخل ال Sprint الواحد وفي الحقيقة اذا كنت في بداية عملك بال Scrum لن تكون على يقين من الرقم ولكن اذا كنت بدأت العمل قبل ذلك ففي نهاية الSprint ستعرف عدد النقاط التي استطاع فريقك تنفيذها وبعد اكثر من Sprint ستستطيع تحديد الرقم المناسب الذي يستطيع فريقك تنفيذه </div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
نفترض مثلا ان فريقك يستطيع تنفيذ 10 نقاط في ال Sprint الواحد اذا بمعادلة بسيطة 120 نقطة اجمالي الطلبات نقوم بقسمتها على عدد النقاط التي يستطيع فريقك تنفيذها 10 يكون الناتج 12 Sprint</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
ولكن لحظة ما قام به فريقك الان هو عمل ما يسمى بال Release Planning اي انه خطط حجم المجهود الذي ستأخذه Relase او اكثر ولكن لم يتم التخطيط لمهام ال Development و ال Testing و ال System Design ..... الخ فاين ومتى يتم ذلك</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
هذا ما سنراه في المقال القادم 😃😃😃</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
ملاحظات </h2>
<div>
<br /></div>
</div>
<div dir="rtl" style="text-align: right;">
عدد النقاط التي يستطيع الفريق تنفيذها خلال ال Sprint تسمى <b>Team Velocity</b></div>
<div dir="rtl" style="text-align: right;">
طريقة التقييم كل متطلب بمقارنتة بالمتطلب الاصغر تسمى <b>Relative Estimation</b></div>
<div dir="rtl" style="text-align: right;">
اختيار الارقام من هذه المجموعة <span class="fontstyle0">1, 2, 3, 5, 8, 13, 21, 34 وعدم اختيارها بالتسلسل الطبيعي تسمى<b> </b></span><b>Fibonacci</b><br />
النقاط التي تاخذها متطلبات العميل تسمى <b>Story Points</b><br />
كل متطلب من متطلبات العميل يسمى <b>User Story</b></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
اذا كنت تريد متابعة المقالات القادمة يمكنك ان تعمل <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank"><b><span style="font-size: large;">Like لصفحتي</span></b></a> على ال <a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">Facebook</a> واعلم انك اذا لم تعمل<a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank"><span style="font-size: large;"> Like </span></a>فان ال Waterfall هو الذي منعك 😂😂😂<br />
<br />
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.1&appId=231569350872216&autoLogAppEvents=1';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<br />
<div class="fb-like" data-action="like" data-href="https://www.facebook.com/GalalDev-438227283302149/" data-layout="standard" data-share="true" data-show-faces="true" data-size="large">
</div>
</div>
<h2 style="text-align: right;">
مراجع</h2>
<div>
<br /></div>
<div>
<span style="text-align: left;">https://docs.microsoft.com/en-us/azure/devops/learn/what-is-devops</span></div>
<div>
<br /></div>
<div id="fb-root">
</div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-83643737434318357352018-09-01T20:58:00.000+02:002018-09-05T19:50:36.279+02:00مقدمة عن الDevOps<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="direction: rtl; text-align: right;">
<a href="https://4.bp.blogspot.com/-epvHTW_l1dM/W4rc20ZLMUI/AAAAAAAAXts/ALoxA-2zPZYM2DnHpAWA69NjJSBYEYt3gCLcBGAs/s1600/devops.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="824" data-original-width="1600" height="102" src="https://4.bp.blogspot.com/-epvHTW_l1dM/W4rc20ZLMUI/AAAAAAAAXts/ALoxA-2zPZYM2DnHpAWA69NjJSBYEYt3gCLcBGAs/s200/devops.png" width="200" /></a>في هذا المقال سوف اتحدث عن مقدمة بسيطة عن ال DevOps ولماذا لابد ان تهتم فرق تطوير البرمجيات به وما هي النتائج المترتبة عن استخدام اساليبه وفي نهاية المقال سوف يكون اتضح لماذا استخدام اساليب ال DevOps احدث ثورة في تطوير البرمجيات ولماذا المطورون الذين يتبعون اساليبه يستطيعون تنفيذ اعمال مذهلة بجودة عالية</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
<a name='more'></a></h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
انت صاحب شركة وتريد تطوير نظام جديد</h2>
<div>
<br /></div>
<div style="direction: rtl; text-align: right;">
تخيل معي ان لديك شركة تطوير برمجيات او انك بصدد تطوير نظام لعميل ما وقد اتفقت معه ان تسلمه النظام هذه خلال 6 اشهر</div>
<div style="direction: rtl; text-align: right;">
فماذا ستفعل لتطوير هذا النظام؟</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
نعم مثلما اجبت</div>
<div style="direction: rtl; text-align: right;">
اولا سوف تقوم انت وفريقك بتحليل المطلوب جيدا وستجلس مع العميل جلسات مطولة لمعرفة المطلوب جيدا وبعد ذلك سوف توثق كل ما تم الاتفاق عليه في مستند به كل المتطلبات</div>
<div style="direction: rtl; text-align: right;">
ثانيا سوف تبدأ بتصميم النظام و برمجته</div>
<div style="direction: rtl; text-align: right;">
ثالثا سوف تقوم باختبار النظام والتأكد من ان كل المطلوب تم تنفيذه بصورة صحيحة</div>
<div style="direction: rtl; text-align: right;">
رابعا سوف تقوم برفع ملفات النظام على الخادم الخاص بالعميل</div>
<div style="direction: rtl; text-align: right;">
خامسا سوف تقوم بتسليم العميل كل متطلباته</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
وبذلك تكون انتهيت 😃</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
للاسف عند تسليم العميل فوجيء العميل وقال لك "ليس هذا ما كنت اريد , بل كنت اريد كذا و كذا"</div>
<div style="direction: rtl; text-align: right;">
الان وفي هذه اللحظه احمرت عيناك وارتفع ضغط دمك وقلت له "كلا , هذا ما طلبته انت سابقا"</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
الحقيقة ان العميل ليس مخطيء (اعذرني وتقبل هذه الكلمة) فهو ليس لديه الخبرة ليستطيع ان يتصور شكل النظام الذي سوف تصممه له بالاضافة الى انه قد تتفتح لديه افكار جديدة عندما يرى النظام امامه.</div>
<h3 dir="rtl" style="text-align: right;">
</h3>
<h3 dir="rtl" style="text-align: right;">
</h3>
<h3 dir="rtl" style="text-align: right;">
اذا ما الحل؟</h3>
<div style="direction: rtl; text-align: right;">
<br />
تخيل معي انك سوف تعمل باسلوب اخر كالتالي</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
سوف تقسم المشروع الذي مدته 3 اشهر الى 6 مراحل وكل مرحلة هي اسبوعان وخلال كل مرحلة تقوم بتطوير واختبار جزء من النظام يمكن ان يعمل وفي نهاية كل مرحلة تاخذ راي عميلك وتاخذ منه تعديلاته ان وجدت</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
اليس بهذه الطريقة ضمنت نجاح المشروع وانه يحقق ما يريده عميلك؟</div>
<div style="direction: rtl; text-align: right;">
اليس هذا الهدف اصلا؟</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
اعتقد انك الان مقتنع ان الاسلوب الثاني افضل وفي الحقيقة اتفق حديثا مجتمع مطوري البرمجيات على ذلك.</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
الاسلوب الاول لادارة دورة حياة تطوير البرمجيات يسمى الشلال Waterfall وهذا الاسلوب القديم وكان متبع لسنين كثيره ولكنه مع الوقت تحدث منه مشاكل كالتي ذكرتها سابقا</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-GD1JogEItQg/W4reb9QY4SI/AAAAAAAAXt4/Ooq7lHNq2XMY_H5lLk_Sv4TjOkRxkJhnQCLcBGAs/s1600/waterfall.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="496" data-original-width="516" height="380" src="https://2.bp.blogspot.com/-GD1JogEItQg/W4reb9QY4SI/AAAAAAAAXt4/Ooq7lHNq2XMY_H5lLk_Sv4TjOkRxkJhnQCLcBGAs/s400/waterfall.gif" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="direction: rtl; text-align: right;">
الاسلوب الثاني هو اسلوب ال Agile Scrum وهو يعتمد على تقسيم المشروع الى مراحل Sprints وجوهر هذا التقسيم هو مشاركة العميل دائما لتكون الصورة واضحة بين الطرفين وللAgile اكثر من اسلوب مثل Scrum , Kanban , .... الخ وليس المجال هنا لذكرها وايضا يوجد داخل الScrum مثلا انشطة مختلفة للمساعدة في الPlanning و ال Managment و ال Review وهكذا<br />
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-aTU2dBgIwIU/W4re8mmbPHI/AAAAAAAAXuA/U33uVjRc2oQAOoEkeFsAOIi7h-_juMN9gCLcBGAs/s1600/agile.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="260" data-original-width="695" height="239" src="https://2.bp.blogspot.com/-aTU2dBgIwIU/W4re8mmbPHI/AAAAAAAAXuA/U33uVjRc2oQAOoEkeFsAOIi7h-_juMN9gCLcBGAs/s640/agile.jpeg" width="640" /></a></div>
<div style="direction: rtl; text-align: right;">
</div>
<div style="direction: rtl; text-align: right;">
<br />
<br /></div>
<div style="direction: rtl; text-align: right;">
الان انت حللت مشكلة ادارة المشروع وضمان نجاحه ولكن ماذا عن تسريع العمليات المتتابعة داخل المشروع ولتفهم ما اقصده تخيل معي انك بعد اول مرحلة في ال 6 مراحل من تطوير مشروعك تريد ان ترفع ملفاتك على سيرفر العميل ماذا ستفعل؟</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
نعم الامر بسيط ستأخذ نسخة فارغة من قاعدة بيانات المشروع + ملفات المشروع وتنصبهم على سيرفر العميل بكل بساطة </div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
الان عميلك بدأ يعمل بالفعل وانت انهيت المرحلة الثانية فكيف سيتم تنصيب النسخة الجديدة؟</div>
<div style="direction: rtl; text-align: right;">
الامر اصبح صعب الان لانه يوجد قاعدة بيانات حالية تريد الحفاظ عليها و على بياناتها ولذلك حتى تستطيع رفع النسخة الجديدة تريد ان تعمل اسكربت مثلا يعدل في الSchema الحالية يجعلها مساوية للجديدة وبعد ذلك تقوم بتنصيب ملفات المشروع الجديدة.</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
هل تتخيل ما كمية الوقت اللذي ستحتاجه لفعل ذلك في كل مرة تريد فيها تنصيب نسخة جديدة؟</div>
<div style="direction: rtl; text-align: right;">
ماذا تتخيل ان يحدث اذا قمت بخطأ ما اثناء التحديث ؟ قد يؤدي الى توقف النظام تماما</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
هنا يأتي دور ال DevOps</h2>
<div style="direction: rtl; text-align: right;">
<a href="https://3.bp.blogspot.com/-PMrYgM292w0/W4rffhHUV6I/AAAAAAAAXuM/7aeEPB4zpyYwRnzMtCPBtE1liO3c4KzFgCLcBGAs/s1600/automation.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="341" data-original-width="556" height="195" src="https://3.bp.blogspot.com/-PMrYgM292w0/W4rffhHUV6I/AAAAAAAAXuM/7aeEPB4zpyYwRnzMtCPBtE1liO3c4KzFgCLcBGAs/s320/automation.png" width="320" /></a><br />
<br />
فال DevOps هو بالاساس يهتم بالتسليم المستمر للعملاء عن طريق استخدام ادوات و طرق تشغيل و فريق العمل لتحقيق ذلك</div>
<div style="direction: rtl; text-align: right;">
ولذلك فال DevOps هو مرتبط ارتباط مباشر بال Automation بمعنى انك كلما قمت بالعمليات التي تقوم بها يدويا بشكل تلقائي Automated فانت اقرب الى ال DevOps.</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
وسوف تشعر بميزة ال DevOps كلما كبر حجم فريقك وكان هناك متخصصين للOperations اي تنصيب و تشغيل النظام ومسئولين اخرين للتطوير والبرمجيات وايضا كلما كبر حجم مشروعك فتخيل معي انك تقوم باصدار Release نسخة جديدة كل ساعة فماذا ستفعل ان عملت بالاسلوب العادي؟</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
في الحقية الفريق الذي يحقق ال DevOps هو فريق يستطيع ان يقوم باعمال هائلة و يستطيع ان يستجيب للتغيرات بسهولة لانتاج برامج ذات قيمة فعلية.</div>
<div style="direction: rtl; text-align: right;">
<br />
<br /></div>
<h3 dir="rtl" style="text-align: right;">
وليكون الفريق يحقق ال DevOps لابد ان يحقق بعض او كل ما يلي</h3>
<h3 dir="rtl" style="text-align: right;">
</h3>
<h3 dir="rtl" style="text-align: right;">
</h3>
<h3 dir="rtl" style="text-align: right;">
Agile Planning</h3>
<div style="direction: rtl; text-align: right;">
<br />
اي يتبع اساليب الAgile و التخطيط لها وذلك للقدرة على الاستجابة للتغيرات ومشاركة العملاء بشكل فعال وايضا لمتابعة المشروع بشكل فعال عن طريق انشطة ال Agile المختلفة<br />
.</div>
<h3 dir="rtl" style="text-align: right;">
</h3>
<h3 dir="rtl" style="text-align: right;">
Continuous Development</h3>
<div style="direction: rtl; text-align: right;">
<br />
اي ان كل المطورين و المبرمجمين يعملون على Source Controle ما مثل Git او TFS مثلا ومن وجهة نظري لابد ان يكون كل ملف من الكود مرتبط بال User Story او ال Requirment الخاصة به لامكانية تتبعه.<br />
.</div>
<div style="direction: rtl; text-align: right;">
<h3 dir="rtl">
</h3>
<h3 dir="rtl">
Continuous Monitoring</h3>
<div style="direction: rtl;">
<br />
والمقصود هنا متابعة البرنامج اثناء تشغيله بادوات ال Monitoring المختلفة لقياس ادائه وفعاليته طوال مدة تشغيله<br />
</div>
</div>
<h3 dir="rtl" style="text-align: right;">
</h3>
<h3 dir="rtl" style="text-align: right;">
Continuous Testing</h3>
<div style="direction: rtl; text-align: right;">
<br />
وهنا يأتي اهمية ال Test Automation بمعنى انه يتم عمل Automation لاعمال ال Testing المختلفة و ال Automation هنا مقصود به كتابة كود يقوم باختبار الكود الخاص بالبرنامج وذلك يمكننا انه في اي لحظة اريد ان اختبر البرنامج اقوم بضغطة زر باختباره كاملا كما لو انه يقوم انسان باختباره (هل متخيل مدى الجودة و السرعة).<br />
.</div>
<h3 dir="rtl" style="text-align: right;">
</h3>
<h3 dir="rtl" style="text-align: right;">
Continuous Integration</h3>
<div style="direction: rtl; text-align: right;">
<br />
والمقصود هنا انه بمجرد ان يقوم المبرمج برفع الكود على ال Source Controle يتم عمل Build لكل الكود وعمل Test لكل الكود (حيث اننا عملنا Test Automation سابقا) واذا حدث Bug يظهرتلقائيا . (ما رايك الان في سرعة التنفيذ)<br />
.</div>
<h3 dir="rtl" style="text-align: right;">
</h3>
<h3 dir="rtl" style="text-align: right;">
Continuous Delivery</h3>
<div style="direction: rtl; text-align: right;">
<br />
والمقصود هنا بعد عمل ال Build واختباره ان تتواجد نسخة جاهزة قابله للتنزيل لدى العميل بضغطة زرر (😀).<br />
.</div>
<h3 dir="rtl" style="text-align: right;">
</h3>
<h3 dir="rtl" style="text-align: right;">
Continuous Deployment</h3>
<div style="direction: rtl; text-align: right;">
<br />
والمقصود هنا بعد عمل ال Build واختباره ان يتم تنصيب نتيجة ال Build مباشرة على Server العميل</div>
<div style="direction: rtl; text-align: right;">
وهذه اقصى قمة ال DevOps حيث انه بمجرد رفع المبرمج للكود يتم عمل Build و اختبار الكود و تنصيبه لدى العميل مباشرة</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-qD0kmphWrO0/W4rgRxgiWFI/AAAAAAAAXuU/ATOilbeBIOsTwEAAT8HSnOXxBKlRa1NnQCLcBGAs/s1600/continuous-delivery-versus-continuous-deployment.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="271" data-original-width="600" height="288" src="https://3.bp.blogspot.com/-qD0kmphWrO0/W4rgRxgiWFI/AAAAAAAAXuU/ATOilbeBIOsTwEAAT8HSnOXxBKlRa1NnQCLcBGAs/s640/continuous-delivery-versus-continuous-deployment.png" width="640" /></a></div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
ما رأيك الان هل يستحق موضوع ال DevOps اهتمامك , اليس بتطبيقه تستطيع تطوير برمجيات بسرعة وجودة عالية</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
ما سبق هو مقدمة بسيطة بدون التطرق الى ال Tools او الادوات التي يمكن استخدامها حيث ان الموضوع غير مرتبط باداه معينة ولكن باي وسيله تستطيع بها تحقيق ما سبق.<br />
.<br />
لا تنسي عمل لايك لصفحتنا في ال Facebook لمتابعة المزيد<br />
<a href="https://www.facebook.com/GalalDev-438227283302149/" target="_blank">https://www.facebook.com/GalalDev-438227283302149/</a></div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
مراجع</h2>
<div>
<br />
https://docs.microsoft.com/en-us/azure/devops/learn/what-is-devops</div>
<div>
https://en.wikipedia.org/wiki/DevOps</div>
<div>
https://www.apress.com/gp/book/9781484214473</div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
<br /></div>
<div style="direction: rtl; text-align: right;">
<br /></div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com7tag:blogger.com,1999:blog-31554071.post-45735186152788803122018-05-16T14:39:00.001+02:002018-09-01T13:56:42.303+02:00بالعربي كيف يعمل ال Machine Learning بصورة مبسطة<div dir="rtl" style="text-align: right;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Fg6RCpMJRdI/WvwomzpdjiI/AAAAAAAAVdM/EjFrOxBIyUwmntTVyzR3iW62osgPhrn3ACLcBGAs/s1600/machine-learning-cybersecurity-applications.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1376" data-original-width="1600" height="171" src="https://1.bp.blogspot.com/-Fg6RCpMJRdI/WvwomzpdjiI/AAAAAAAAVdM/EjFrOxBIyUwmntTVyzR3iW62osgPhrn3ACLcBGAs/s200/machine-learning-cybersecurity-applications.png" width="200" /></a></div>
<h2 style="text-align: right;">
مقدمة</h2>
في الاونة الاخيرة ازدادت اهمية اساليب الذكاء الاصطناعي و تعلم الاله وذلك نظرا لاستخدامهم في العديد من حياتنا اليومية ولكن كيف يحدث هذا السحر كيف يفهم الهاتف او الحاسوب ما يجري حوله كيف يتعرف على صورتي ويحدد هويتي كيف يفهم صوتي ويحدثني وينفذ ما اقول. في هذا المقال سأحاول توضيح مثال بسيط لفهم كيف يحدث ذلك.<br />
<br />
<h2 style="text-align: right;">
<a name='more'></a>الذكاء الاصطناعي في حياتنا </h2>
<div style="text-align: right;">
قد تفاجىء اذا قلت لك انك لابد وحتما قمت بالتعامل مع بعض البرامج التي تعمل بالذكاء الاصطناعي فاذا قمت مثلا بعملية بحث على جوجل وقمت بكتابة كلمة "درغام" مثلا ففهم جوجل بانك تريد البحث عن "اسد" ايضا واظهر النتائج لذلك فقد استخدمت هذه التقنية اوا اذا كنت فتحت ال Facebook وتفاجئت انه يظهر لك الاشياء التي تهتم بها دائما او انه عندما ترفع صور لك ولاصدقائق يقوم بعمل Tag لهم فقد استخدمت تقنيات الذكاء الاصطناعي.</div>
<div style="text-align: right;">
باختصار تقنيات الذكاء الاصطناعي متفاعلة معنا في حياتنا اليومية وسوف يزيد هذا التفاعل بشكل كبير في الايام القادمة فدعنا الان نتعرف عن ما هو المقصود بالذكاء الاصطناعي.</div>
<br />
<h2 style="text-align: right;">
الذكاء الاصطناعي Artificial Intelligence</h2>
<div>
يوجد للذكاء الاصطناعي تعاريف كثيرة ولكن التعريف الذي اجده مناسب هو <b>"الاساليب التي تتبعها البرامج لتحاكي قدرات البشر من حيث التعلم والاستنتاج على اشياء لم تبرمج بها من قبل"</b> وهو يعتبر علم كبير وله اساليب كثيرة ومن اهم هذه الاساليب هي اساليب تعلم الالة او ال Machine Learning.<br />
</div>
<div>
</div>
<h2 style="text-align: right;">
تعلم الاله Machine Learning</h2>
<div>
هي باختصار شديد ان البرامج تستطيع ان تتعلم من البيانات التي لديها لاستنتاج معلومات لم تكن تعرفها من قبل وهذا هو محور حديثنا في هذا المقال وللتوضيح انظر المثال التالي</div>
<br />
<h2 style="text-align: right;">
تحديد سعر المنزل</h2>
<div>
تخيل معي انك صاحب منزل وتريد بيعه ولكن لا تعرف السعر المفترض ان تبيع به وتريد من برنامج حاسوب يعمل بتقنيات ال Machine Learning ان يحسب لك السعر المناسب لبيع هذا المنزل</div>
<div>
وتخيل ايضا ان المحدد الوحيد لتحديد سعر المنزل هو المساحة <b>وذلك للتبسيط فقط</b></div>
<div>
ليستطيع البرنامج تحديد سعر المنزل لابد ان تقوم بتغذيته ببيانات سابقة عن اسعار و مساحات منازل تم بيعها من قبل حتى يستطيع التعلم منها ولكن ليس من ضمنها مساحة منزلك مثلا</div>
<div>
<br /></div>
<div>
تخيل معي ان البيانات التي غذيت بها البرنامج كانت كالتالي</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-QEzELjqz0D0/WvwXG-J8N0I/AAAAAAAAVcI/l_ixcn7RgtcT7jxYSiRGm6V4O_KAcV4MACLcBGAs/s1600/ScreenShot047.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="324" data-original-width="279" src="https://1.bp.blogspot.com/-QEzELjqz0D0/WvwXG-J8N0I/AAAAAAAAVcI/l_ixcn7RgtcT7jxYSiRGm6V4O_KAcV4MACLcBGAs/s1600/ScreenShot047.jpg" /></a></div>
العمود Space هو المساحة بالمتر المربع والعمود Price هو السعر بالاف جنيه<br />
وانت الان بعد التغذية بهذه البيانات تريد ان تعرف سعر منزلك الذي مساحته هي <b>190 متر مربع</b><br />
<br />
<h3 style="text-align: right;">
كيف يقوم ال Machine Learning بايجاد السعر ؟</h3>
<div style="text-align: right;">
<span style="font-weight: normal;">تقنيات ال Machine Learning قائمة على ايجاد العلاقة بين المدخلات و المخرجات بمعنى انت الان لديك مدخل واحد وهو المساحة و مخرج واحد وهو السعر فتقوم ال Machine Learning بالتعلم من البيانات المدخلة وفي النهاية تعطي لك معادلة عند ادخال قيمة المساحة لها تعطيك السعر </span></div>
<div style="text-align: right;">
<span style="font-weight: normal;">ولنفهم ذلك دعنا نقوم بتمثيل البيانات التي ادخلناها للبرنامج بيانيا كالتالي بحيث يكون المحور السيني (X) هو المساحة والمحور الصادي (Y) هو السعر</span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-ZOfGxBQmAgs/Wvwc0UF0GGI/AAAAAAAAVc0/Qe6a4oyINCkAQ0OhqowrfAvx9f1fXh-qACLcBGAs/s1600/ScreenShot050.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="368" data-original-width="560" src="https://2.bp.blogspot.com/-ZOfGxBQmAgs/Wvwc0UF0GGI/AAAAAAAAVc0/Qe6a4oyINCkAQ0OhqowrfAvx9f1fXh-qACLcBGAs/s1600/ScreenShot050.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<h4 style="text-align: right;">
<span style="font-weight: normal;">الان يقوم البرنامج الذي يعمل بال Machine Learning بتحليل البيانات لاستنتاج المعادلة التي ترسم خط يمر تقريبا بكل النقاط داخل الرسم البياني وتكون على الشكل التالي</span></h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-TW0GVSioCXY/WvwdPL9CrRI/AAAAAAAAVc8/Gq013fwhen8tKoBm8beXRNl3pN-Urob0ACLcBGAs/s1600/ScreenShot051.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="371" data-original-width="555" src="https://4.bp.blogspot.com/-TW0GVSioCXY/WvwdPL9CrRI/AAAAAAAAVc8/Gq013fwhen8tKoBm8beXRNl3pN-Urob0ACLcBGAs/s1600/ScreenShot051.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: right;">
<span style="font-weight: normal;"> الان من الرسم تستطيع ان تستنتج سعر منزلك الذي يبلغ مساحته 190 متر مربع والذي تكون قيمته<b> 398 الف </b>كما بالشكل التالي<b></b></span><br />
<span style="font-weight: normal;"><b><br /></b></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-jD0O_rI8E90/Wv1VmuBm2qI/AAAAAAAAVfc/xZDmnZEs_mk6XQjNqKU1UCghWbse_AsSQCLcBGAs/s1600/ScreenShot052.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="374" data-original-width="547" src="https://2.bp.blogspot.com/-jD0O_rI8E90/Wv1VmuBm2qI/AAAAAAAAVfc/xZDmnZEs_mk6XQjNqKU1UCghWbse_AsSQCLcBGAs/s1600/ScreenShot052.jpg" /></a></div>
<span style="font-weight: normal;"><b><br /></b></span>
<span style="font-weight: normal;"><b><br /></b></span></div>
<div style="text-align: right;">
<span style="font-weight: normal;">والمعادلة التي تم رسم الخط بها ستكون كالتالي</span></div>
<h4 style="text-align: right;">
<span style="font-weight: normal;"><b>السعر = المساحة × 1.0553 + 198.26</b></span></h4>
<div style="text-align: right;">
<span style="font-weight: normal;">وبهذه المعادلة تستطيع ان تستنتج اي سعر لاي مساحة لديك </span></div>
<div style="text-align: right;">
<span style="font-weight: normal;">اذا الهدف الرئيسي هو ايجاد هذه المعادلة وعند ايجادها يحدث السحر وعمل اشياء لا تستطيع البرامج العادية فعله</span></div>
<div style="text-align: right;">
<br /></div>
<div style="text-align: right;">
<span style="font-weight: normal;">قد يتوارد الى زهنك الان كيف يتم عمل الاشياء الاخرى الاكثر تعقيدا مثلا ان يقوم ال Facebook عند رفع صورة ما بالتعرف على وجه اصدقائي وعمل Tag لهم؟ </span></div>
<div style="text-align: right;">
<span style="font-weight: normal;">الفكرة مشابهة جدا فتخيل ان ال Facebook لديه صور كثيرة معرفة لديه لك وعن طريق الصور هذه قام بعمل معادلة شبيهة وعند ادخال صورة جديدة تعطي المعادلة مثلا قيمة صفر اذا كانت الصورة لا تشبهك او 1 اذا كانت الصورة تشبهك وبالطبع هناك تفاصيل كثيرة في هذا الموضوع ولكن الفكرة العامة واحدة 😀.</span><br />
<span style="font-weight: normal;"> </span></div>
<h2 style="text-align: right;">
<span style="font-weight: normal;">توضيحات هامة</span></h2>
<div style="text-align: right;">
<span style="font-weight: normal;">ما قمنا به في مثال بيع المنزل هو مثال بسيط جدا للتوضيح بمحدد واحد فقط وهو المساحة ولكن في الحياة العملية يوجد اكثر من محدد</span></div>
<div style="text-align: right;">
<span style="font-weight: normal;">العملية التي قمنا بها تسمى Linear Regression وهي لاستنتاج او توقع قيمة السعر المتغيرة</span></div>
<div style="text-align: right;">
</div>
<h2 style="text-align: right;">
<span style="font-weight: normal;">ولكن كيف تستطيع ال Machine Learning استنتاج هذه المعادلة ؟</span></h2>
<div style="text-align: right;">
<span style="font-weight: normal;">هذا ما سوف اقوم بتوضيحه في مقالات قادمة باذن الله 😀😀ولكن ان كنت تريد المزيد من التعمق في هذه التقنيات انصحك وبشدة البداية بهذا الكورس ل Andrew ng فقد افدني كثيرا عند بداية تعلمي لهذه التقنيات</span></div>
<div style="text-align: right;">
<span style="font-weight: normal;">https://www.youtube.com/watch?v=Hxm4ERsDv5U&list=PLBAGcD3siRDghsFtvJH9HjWSq9DHk1fTJ</span></div>
</div>
<br />
<h2 style="text-align: right;">
مراجع</h2>
<div>
https://ar.wikipedia.org/wiki/%D8%B0%D9%83%D8%A7%D8%A1_%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A</div>
<div>
https://ar.wikipedia.org/wiki/%D8%AA%D8%B9%D9%84%D9%85_%D8%A7%D9%84%D8%A2%D9%84%D8%A9<br />
https://www.youtube.com/watch?v=Hxm4ERsDv5U&list=PLBAGcD3siRDghsFtvJH9HjWSq9DHk1fTJ </div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com2tag:blogger.com,1999:blog-31554071.post-92107230361505416312018-04-29T13:57:00.000+02:002018-09-01T14:33:04.068+02:00اساليب تطوير البرمجيات الحديثة (فيديو)<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
<a href="https://4.bp.blogspot.com/-tl6ArT3LEOI/W4qG3kQoVLI/AAAAAAAAXtg/fOd9U0BEYcEsNT-YetXdh5a0S4QhCbKfwCLcBGAs/s1600/software-dev.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="398" data-original-width="611" height="130" src="https://4.bp.blogspot.com/-tl6ArT3LEOI/W4qG3kQoVLI/AAAAAAAAXtg/fOd9U0BEYcEsNT-YetXdh5a0S4QhCbKfwCLcBGAs/s200/software-dev.gif" width="200" /></a> في الفيديوهات التالية يتم توضيح بعض التطورات التي حدثت مؤخرا في صناعة البرمجيات من حيث ال Software Life Cycle و ال Architecture الجديد مثل ال Micro-services و طرق تخزين البيانات الجديدة و طرق ال Deployment الجديدة مثل ال Docker وايضا المهام الذكية االلتي اصبحت من المتطلبات الاساسية في صناعة من الSoftware.</div>
<div dir="rtl" style="text-align: right;">
<br />
<div class="separator" style="clear: both;">
والجدير بالذكر انه تم تسجيل هذه المحاضرة اثناء احد اللقاءات الاسبوعية لمبرمجين شركة <a href="https://facebook.com/CodeZone.EG/" target="_blank">CodeZone</a></div>
<div class="separator" style="clear: both;">
مشاهدة ممتعة 😀 </div>
</div>
<div dir="rtl" style="text-align: center;">
<br />
<div dir="ltr" style="text-align: center;" trbidi="on">
<iframe allowfullscreen="" frameborder="0" height="344" src="https://www.youtube.com/embed/videoseries?list=PLLFqEKhpE3ZVDzWCiJzmfiBmeB-ZnaAyX" width="425"></iframe></div>
</div>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-55868724214034430212018-03-19T00:04:00.001+02:002018-09-01T14:30:06.384+02:00فيديو مقدمة عن ال NoSQL databases بالعربي<div dir="rtl" style="text-align: right;" trbidi="on">
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="" style="clear: both; text-align: right;">
<a href="https://3.bp.blogspot.com/-EvRYO8yz9F0/W4qF_ZxqytI/AAAAAAAAXtY/XkzXGmY2BUs7E9CykqdwknoDaeN2baBZgCLcBGAs/s1600/nosql-database.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="208" data-original-width="208" height="200" src="https://3.bp.blogspot.com/-EvRYO8yz9F0/W4qF_ZxqytI/AAAAAAAAXtY/XkzXGmY2BUs7E9CykqdwknoDaeN2baBZgCLcBGAs/s200/nosql-database.png" width="200" /></a>في الفيديو التالي ستجد مقدمة بسيطة عن قواعد بيانات ال NoSQL والفرق الرئيسي بينها وبين ال relational databases والاسباب التي ادت الى الاحتياج لهذا النوع من قواعد البيانات كما انك في اخر المحاضرة ستتمكن من تقدير احتياجك من قاعدة البيانات التي تستخدمها في مشروعك القادم هلي هي NoSQL ام Relational<br />والجدير بالذكر انه تم تسجيل هذه المحاضرة اثناء احد اللقاءات الاسبوعية لمبرمجين شركة <a href="https://facebook.com/CodeZone.EG/" target="_blank">CodeZone</a></div>
<div class="separator" style="clear: both; text-align: right;">
مشاهدة ممتعة 😀 </div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/I9zgrdCf0fY/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/I9zgrdCf0fY?feature=player_embedded" width="320"></iframe></div>
<br />
<br /></div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com0tag:blogger.com,1999:blog-31554071.post-5081671842085786982018-01-01T20:40:00.000+02:002018-01-09T17:50:13.525+02:00بالعربي شرح مشاكل ال Indexes وطرق علاجها وصيانتها<div dir="rtl" style="text-align: right;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-eeffA6wMrCM/WkAq-Q1XboI/AAAAAAAASyU/OdD4utm5UW4ElgfWQkQw1hXJuhSc3vJDACLcBGAs/s1600/91f4586090297f275d687c4ec27b8d7c.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="500" data-original-width="500" height="200" src="https://2.bp.blogspot.com/-eeffA6wMrCM/WkAq-Q1XboI/AAAAAAAASyU/OdD4utm5UW4ElgfWQkQw1hXJuhSc3vJDACLcBGAs/s200/91f4586090297f275d687c4ec27b8d7c.gif" width="200" /></a></div>
في هذا المقال سوف نوضح اسلوب عمل صيانة لل Indexes داخل ال SQL Server لمتابعة ادائها المستمروهو مفيد لمديرين قواعد البيانات ومسئولين ال IT واي مهتم باداء قواعد بيانات SQL Server<br />
ويمكنك مراجعة المقال السابقة الخاص بتوضيح الفرق بين انواع ال Indexes من <a href="http://galaldev.blogspot.com.eg/2015/11/sql-server-index.html" target="_blank">هنــــــا</a><br />
<br />
<h2 style="text-align: right;">
تجزئة البيانات (Fragmentation)</h2>
<div style="text-align: right;">
البيانات داخل ال SQL Server في نهاية المطاف يتم تخزينها في ملفات قاعدة البيانات على ال HardDisk واي بيان داخل ال SQL Server يتم كتابته في صورة وحدات تسمى Pages داخل الملفات او بمعنى اخر تستطيع ان تعتبر ال Page هي اقل وحدة قياس للبيانات داخل الملفات. وحيث ان البيانات يتم تعديلها باستمرار فذلك يؤدي الى مشكلة التجزئة (Fragmentation) ويوجد نوعين من مشاكل التجزئة هما internal fragmentation و external fragmentation.</div>
<div style="text-align: right;">
<br />
<a name='more'></a><br /></div>
<h2 style="text-align: right;">
تجزئة داخلية internal fragmentation</h2>
<div style="text-align: right;">
ومعناه ان ال Pages المكتوب بها البيانات بها مساحات فارغة اي ان الPage ليست مستغلة بالكامل ولتوضيح المشكلة تخيل معي ان لديك جدول للموظفين وان لديك Index على حقل كود الموظف مثلا وان اجمالي بيانات هذا الIndex يتم تخزينها في 10 Pages ولكن بسبب مشكلة ال internal fragmentation وان ال Pages غير مستغلة بالكامل تم تخزين هذا ال Index على 20 Page اي ضعف عدد ال Pages. اذا عند عمل اي عملية استعلام تستخدم هذا ال Index (عمل Where على عمود كود الموظف مثلا) سيتم قراءة 20 Page بدلا من قراءة 10 فقط مما يؤدي الى التأثير السلبي على اداء ال Index.</div>
<div style="text-align: right;">
</div>
<h2 style="text-align: right;">
تجزئة خارجية External fragmentation</h2>
<div style="text-align: right;">
وهذه المشكلة المقصود بها ان ترتيب ال Pages المخزن بها البيانات فعليا داخل الملفات في ال HardDisk مختلف عن ترتيب ال Key الخاص بال Index . وهذه المشكلة تؤثر على الاداء بشكل سلبي حيث مثلا لقراءة بيانات هذا ال Index تقوم ابرة القراءة في الHardDisk بالتنقل الغير مرتب لقراءة البيانات الفعلية من الملفات بينما لو كانت مرتبة بال Key الخاص بال Index كانت ستتم عملية القراءة <span class="fontstyle0">sequential read بشكل اسرع.</span><br />
<br />
الشكل التالي يوضح انواع ال fragmentation<span class="fontstyle0"><br /></span></div>
<div style="text-align: right;">
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-i_O92mpUe1Y/WkpmqeLMyoI/AAAAAAAATMc/TTWcPklyg7ok7FzRvwt0YkE3XYlnPrcCwCLcBGAs/s1600/fragmentation.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="269" data-original-width="432" height="248" src="https://3.bp.blogspot.com/-i_O92mpUe1Y/WkpmqeLMyoI/AAAAAAAATMc/TTWcPklyg7ok7FzRvwt0YkE3XYlnPrcCwCLcBGAs/s400/fragmentation.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">انواع ال fragmentation ماخوذ من<a href="http://web.cs.ucla.edu/classes/spring09/cs111/scribe/12/fragmentation.png" target="_blank"> هنا </a></td></tr>
</tbody></table>
</div>
<div style="text-align: right;">
<br />
<span class="fontstyle0">وقد تحدث هذه المشاكل نتيجة حذف البيانات او عمل تعديل update لبيانات بحجم اكبر مما كانت مخزنة عليه مما
يؤدي الى عمل Page Split لتجزئة تخزين البيانات التي كانت مخزنة في Page واحدة على 2 Pages او بعض
الاسباب الاخرى.</span></div>
<div style="text-align: right;">
<br />
<h2 style="text-align: right;">
<span class="fontstyle0">FILLFACTOR</span>
</h2>
<div style="text-align: right;">
عند انشاء Index جديد او اعادة بناء Index حالي تتيح قاعدة البيانات Option باسم <span class="fontstyle0">FILLFACTOR</span> وهذا ال Option هو عبارة عن نسبة المساحة التي يتم التخزين عليها داخل ال Page و الافتراضي لها 100 اي لا يتم ترك اي مساحة فارغة داخل ال Page (في حالة كتابة ال FillFactor بصفر يعتبرها ال SQL Server انها 100).<br />
هذه الخاصية تتيح تجنب مشكلة ال Page Split فمثلا تخيل معي انك قمت بتغيير قيمة ال FillFactor الى 80 فبذلك انت قمت بترك مساحة فارغة داخل كل Page بحوالي 20% فعند ادخال بيانات جديدة او تعديل بيانات بحجم اكبر مثلا تكون هناك مساحة فارغة داخل ال Page يمكن الكتابة عليها مما يقلل من مخاطر ال Page Split.<br />
ولكن لا شيء دون ثمن حيث عند استخدام ال FillFactor دون الحاجة لها سيؤدي الى حدوث مشكلة ال Internal Fragmentation بشكل كبير فلذلك يجب استخدامها بحذر.</div>
<h2 style="text-align: right;">
كيف يمكن اكتشاف ال Fragmentation ؟</h2>
<div style="text-align: right;">
من الاشياء الهامة الفحص الدوري على البيانات واكتشاف مشاكل التجزئة (fragmentation) لما لها من اثر سيء على اداء قواعد البيانات وتوفر ال SQL Server دالة Function لاكتشاف مشاكل ال Fragmentation وهي <span class="fontstyle0">sys.dm_db_index_physical_stats ويمكن استخدامها بالاستعلام التالي</span></div>
<div style="text-align: right;">
<br /></div>
<div style="direction: ltr;">
<pre class="brush: sql">SELECT '[' + dbschemas.[name] + '].[' + dbtables.[name] + ']' AS TableName ,
dbindexes.[name] AS IndexName ,
indexstats.alloc_unit_type_desc ,
indexstats.avg_fragmentation_in_percent ,
indexstats.avg_page_space_used_in_percent ,
indexstats.page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED')
AS indexstats
INNER JOIN sys.tables dbtables ON dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas ON dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
ORDER BY indexstats.avg_fragmentation_in_percent DESC ,
avg_page_space_used_in_percent ASC;
</pre>
</div>
</div>
<div style="text-align: right;">
<br /></div>
<div style="text-align: right;">
<br /></div>
<div style="text-align: right;">
مخرجات هذا الاستعلام كالتالي<br />
<ul style="text-align: right;">
<li><span class="fontstyle0">avg_fragmentation_in_percent</span></li>
<ul>
<li><span class="fontstyle0">نسبة ال External Fragmentation وهذه القيمة نريدها اقرب الى الصفر </span></li>
</ul>
<li><span class="fontstyle0"><span class="fontstyle0">avg_page_space_used_in_percent</span></span></li>
<ul>
<li><span class="fontstyle0">نسبة ال Internal Fragmentation وهذه القيمة نريدها اقرب الى 100</span><span class="fontstyle0"> </span>
</li>
</ul>
</ul>
</div>
<div style="text-align: right;">
<span class="fontstyle0">فبالاستعلام السابق يمكن اكتشاف ال Indexes التي بها مشاكل Fragmentation فيمكن تعديله مثلا بعمل Where لجلب الIndexes التي ال External Fragmentation لها اكبر من 20 وهكذا.</span><br />
<span class="fontstyle0"> ولكن ماذا بعد ان اكتشفنا ال Indexes التي بها مشاكل؟</span><br />
<h2 style="text-align: right;">
<span class="fontstyle0">Index Rebuild And </span><span class="fontstyle0">Reorganize</span>
</h2>
<div style="text-align: right;">
</div>
<div style="text-align: right;">
<span class="fontstyle0">من الاساليب المتبعة لحال مشكلة ال Fragmentation اما عمل Index Reorganize او Index Rebuild</span></div>
<h3 style="text-align: right;">
<span class="fontstyle0">اولا </span><span class="fontstyle0"></span><span class="fontstyle0">Index Reorganize</span></h3>
<div style="text-align: right;">
<span class="fontstyle0">وفي هذه العمليه يقوم ال SQL Server بفحص كل Page خاصة بال Leaf Level الخاص بال Index فاذا وجد مساحة فارغة في ال Page يقوم باخذ البيانات من ال Page التالية ووصعها فيها وهكذا وفي النهاية يقوم بحذف ال Pages التي تركت فارغة بعد ذلك البيانات في ال Leaf Level يتم اعادة توزيعها مما يجعل تريبها الفعلي قريب جدا من ترتيب ال Key الخاص بال Index.</span></div>
<div style="text-align: right;">
<span class="fontstyle0">وميزة عملية ال Reorganize انها تعالج مشكلة ال Internal Fragmentation وايضا مشكلة ال External Fragmentation لل Leaf Level ولكن بشكل مبسط في حالة ان نسبة ال External Fragmentation هي 30% او اقل بينما اكثر من ذلك لا تعالجها.</span></div>
<div style="text-align: right;">
<span class="fontstyle0">واهم ميزة لهذه العملية انها تتم Online اي ان كل ال Indexes التي يحدث لها </span><span class="fontstyle0">Reorganize</span> يمكن عمل استعلام عليها ولا يحدث لها Lock اثناء ال <span class="fontstyle0">Reorganiz.</span></div>
<div style="text-align: right;">
<span class="fontstyle0">الكود التالي يوضح طريقة عمل ال </span><span class="fontstyle0"><span class="fontstyle0">Reorganiz</span></span></div>
<div style="direction: ltr;">
<pre class="brush: sql">ALTER INDEX Index_Name ON Table_Name REORGANIZE ;
</pre>
</div>
</div>
<div style="text-align: right;">
<br />
<h3 style="text-align: right;">
<span class="fontstyle0">ثانيا Index Rebuild</span></h3>
<div style="text-align: right;">
<span class="fontstyle0">في هذه العملية يتم حذف ال Index واعادة انشاءه من جديد وبالتالي تجد ان اثرها على مشكلة ال Fragmentation كبير جدا حيث انه تم اعدة انشاء ال Index بالكامل ولكن في بعض الاحيان لا يتم ازالة ال </span><span class="fontstyle0"><span class="fontstyle0">Fragmentation بنسبة 100% وذلك لان عملية ال Rebuild يتم توزيعها على عدد ال Cores في ال Processor وبالتالي قد تتبقى نسبة بسيطة من ال Fragmentation ولكم يوجد option يجعلها تنفذ على Core واحد ان اردت.</span></span></div>
<div style="text-align: right;">
<span class="fontstyle0"><span class="fontstyle0">طبعا من التوضيح السابق يتضح ان عملية ال Rebuild نتيجتها افضل بكثير ولكن المشكلة انها عملية ثقيلة على موارد ال Server وتستهلك وقت كبير كلما كان حجم البيانات كبير كما انها يمكن ان تتم Online ولكن في ال Enterprise Edtion غير ذلك لا يمكن اجرائها Online مما يؤدي الى عمل Lock على ال Index طوال فترة ال Rebuild .</span></span></div>
<div style="text-align: right;">
<br /></div>
<div style="text-align: right;">
<span class="fontstyle0">الكود التالي يوضح طريقة عمل الRebuild</span></div>
<div style="direction: ltr;">
<pre class="brush: sql">ALTER INDEX Index_Name ON Table_Name REBUILD ;</pre>
</div>
<span class="fontstyle0"> انا شخصيا افضل عمل Rebuild عن ال Reorganize حيث ان النتيجة بعد ال Rebuild تكون تحسن ملحوظ في اداء ال Index ولكن مشكلة ال Lock هي اكبر عائق كما انها تستهلك ال CPU وال RAM بشكل كبير ولذلك اقوم بعمل Index Rebuild في الاوقات التي يكون العمل قليل او منعدم على قاعدة البيانات مثلا يوم الجمعة الثالثة صباحا. كما انه من الافضل عمل Rebuild للIndexs التي تحتاج ذلك التي يمكن ايجادها باستخدام الاستعلام الخاص باكتشاف ال Fragmentation</span><br />
<h3 style="text-align: right;">
-----------------------------------------------</h3>
<div style="text-align: right;">
تم بحمد الله</div>
<br />
<h2 style="text-align: right;">
<span class="fontstyle0">مراجع </span></h2>
<span class="fontstyle0">APRESS : Pro SQL Server Administration</span>
</div>
<h2 style="text-align: right;">
</h2>
</div>
Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com3tag:blogger.com,1999:blog-31554071.post-33555922428798141242017-12-08T03:06:00.002+02:002018-03-26T19:00:16.088+02:00شرح استرجاع Restore قواعد بيانات SQL Server بالعربي<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="rtl" style="text-align: right;" trbidi="on">
<a href="https://2.bp.blogspot.com/-jbB85uggXe0/WinlJJgJ3JI/AAAAAAAAR7s/EIo49dIdNeIbHlWQb7JX6GfbjfZwxE_LgCLcBGAs/s1600/restart.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="512" data-original-width="512" height="200" src="https://2.bp.blogspot.com/-jbB85uggXe0/WinlJJgJ3JI/AAAAAAAAR7s/EIo49dIdNeIbHlWQb7JX6GfbjfZwxE_LgCLcBGAs/s200/restart.jpg" width="200" /></a>في هذا المقال سوف نشرح طريقة عمل Restore لملف نسخة احتياطية Backup لقاعدة بيانات SQL Server ولمعرفة عمل ال Backup يمكنك مراجعة المقال السابق من <a href="https://galaldev.blogspot.com/2017/03/sql-server-Backup.html">هنـــا</a><br />
<br />
<a name='more'></a><br /><br />
<h2 style="text-align: right;">
استرجاع قاعدة البيانات عن طريق ال SQL Server Management Studio</h2>
بعد فتح ال Management Studio بالضغط Right Click على قاعدة البيانات المراد استرجاعها واختيار Restore ثم Database كما الشكل التالي<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-i4R5B4PzJ7Y/WinDGlq_VEI/AAAAAAAAR6Q/fKoMVPinMxcOjkG-OPzPSrCw1HFCI25tACLcBGAs/s1600/ScreenShot026.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="409" data-original-width="853" height="306" src="https://1.bp.blogspot.com/-i4R5B4PzJ7Y/WinDGlq_VEI/AAAAAAAAR6Q/fKoMVPinMxcOjkG-OPzPSrCw1HFCI25tACLcBGAs/s640/ScreenShot026.jpg" width="640" /></a></div>
ونلاحظ من الشكل السابق انه يوجد اختيار اخر يتيح امكانية استرجاع ملف من ملفات قاعدة البيانات او<a href="https://galaldev.blogspot.com/2017/02/sql-server-filegroups.html" target="_blank"> File Group</a><br />
ولكن لن يتم التركيز على هذا الاختيار لندرة استخدامه الا في حالات معينة<br />
<br />
بعد الضغط على Database سيظهر الاختيار التالي<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-WoOMeIta5yc/WinLjHOBOrI/AAAAAAAAR6g/JVvXkenvBsI7wwY8c7kYcJr2Nsvo9xcZgCLcBGAs/s1600/ScreenShot027.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="716" data-original-width="871" height="526" src="https://3.bp.blogspot.com/-WoOMeIta5yc/WinLjHOBOrI/AAAAAAAAR6g/JVvXkenvBsI7wwY8c7kYcJr2Nsvo9xcZgCLcBGAs/s640/ScreenShot027.jpg" width="640" /></a></div>
<br />
ولاختيار ملف باكب من الملفات المخزنة نقوم باختيار Device كما بالاشكال التالية<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-r7CWDwh9w7Y/WinMS1Df9wI/AAAAAAAAR6o/L5cvF83NELM2ABD3MlqbWk4VkSSCXQJnQCLcBGAs/s1600/ScreenShot028.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="869" height="530" src="https://2.bp.blogspot.com/-r7CWDwh9w7Y/WinMS1Df9wI/AAAAAAAAR6o/L5cvF83NELM2ABD3MlqbWk4VkSSCXQJnQCLcBGAs/s640/ScreenShot028.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Li2hNQqCHY8/WinNJWY570I/AAAAAAAAR60/yrGLsVrkEsoHN5335CN6SQJw1VekSuilQCLcBGAs/s1600/ScreenShot029.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="412" data-original-width="507" height="520" src="https://1.bp.blogspot.com/-Li2hNQqCHY8/WinNJWY570I/AAAAAAAAR60/yrGLsVrkEsoHN5335CN6SQJw1VekSuilQCLcBGAs/s640/ScreenShot029.jpg" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-PAbz_R2BPK0/WinNJC0FZKI/AAAAAAAAR6w/rz-5FtVI5T4f8LbsKv1FPrStQtxS-BCDQCLcBGAs/s1600/ScreenShot030.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="485" data-original-width="653" height="474" src="https://1.bp.blogspot.com/-PAbz_R2BPK0/WinNJC0FZKI/AAAAAAAAR6w/rz-5FtVI5T4f8LbsKv1FPrStQtxS-BCDQCLcBGAs/s640/ScreenShot030.jpg" width="640" /></a></div>
<br />
بعد ذلك سيظهر محتويات ملف الباكب كما سبق بالشكل التالي<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-fNfe0K4-ns0/WinNrCTA4GI/AAAAAAAAR68/yWRQU8A5YzkpdCoiyz7A_fqmzMjFUz1xQCLcBGAs/s1600/ScreenShot031.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="718" data-original-width="872" height="526" src="https://1.bp.blogspot.com/-fNfe0K4-ns0/WinNrCTA4GI/AAAAAAAAR68/yWRQU8A5YzkpdCoiyz7A_fqmzMjFUz1xQCLcBGAs/s640/ScreenShot031.jpg" width="640" /></a></div>
ولمزيد من التحكم نختار من القائمة الجانبية على اليسار Files كما بالشكل التالي<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-DDkHk1bqW5Y/WinPjHHc4vI/AAAAAAAAR7I/hYrcm3IxN9kREgPPpkNYr_5jqE5D2IFcgCLcBGAs/s1600/ScreenShot032.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="721" data-original-width="871" height="528" src="https://1.bp.blogspot.com/-DDkHk1bqW5Y/WinPjHHc4vI/AAAAAAAAR7I/hYrcm3IxN9kREgPPpkNYr_5jqE5D2IFcgCLcBGAs/s640/ScreenShot032.jpg" width="640" /></a></div>
ثم نقوم باختيار Options من القائمة الجانبية كما بالشكل التالي<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-xUvX-17bNTg/WinX1pZsXcI/AAAAAAAAR7Y/z6x5pK0XVbMpdog-IBy1X4RPoRX6hnaTACLcBGAs/s1600/ScreenShot033.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="722" data-original-width="866" height="532" src="https://1.bp.blogspot.com/-xUvX-17bNTg/WinX1pZsXcI/AAAAAAAAR7Y/z6x5pK0XVbMpdog-IBy1X4RPoRX6hnaTACLcBGAs/s640/ScreenShot033.jpg" width="640" /></a></div>
اثناء فترة عمل ال Restore تكون قاعدة البيانات في حالة تسمى Restoring ولا يمكن التعامل عليها الا بعد انتقالها للحالة العادية <br />
الاختيار With Recovery يعيد قاعدة البيانات لحالتها العادية بعد الاسترجاع<br />
الاختيار With No Recovery يتركها في حالة Restoring ولا يمكن التعامل عليها وقد تحتاج هذا الاختيار اذا كان لديك مثلا باكب Full ثم ستقوم باسترجاع باكب Differential بعده , فتقوم باسترجاع ال Full مع اختيار With No Recovery ثم استرجاع ال Differential مع اختيار With Recovery<br />
ايضا يوجد اختيار ثالث يسمى With stand by وهذا يتيح جعل قاعدة البيانات في حالة Read Only بعد عمل ال Restore كما يتيح هذا الاختيار في حالة استرجاع Log Backup استرجاع الباكب بدون ال UnCommited Transactions مع اتاحة تخزين هذه ال Transactions في ملف Stand by file لاسترجاعها عند الحاجة<br />
<br />
<h2 style="text-align: right;">
مثال لاسترجاع قاعدة البيانات عن طريق SQL Script</h2>
<br /></div>
<pre class="brush: sql">RESTORE DATABASE [DatabaseName]
FROM DISK = N'C:\Backup2.bak' WITH
RECOVERY,Replace
--هنا يمكن اضافة الاختيارات التي تم ذكرها سابقا </pre>
في النهاية اتمنى ان يكون المقال مفيد لك عزيزي القاريء كما يمكنك قراءة
المقال الخاص بانواع النسخ الاحتياطية وطريقة عملها من <a href="https://galaldev.blogspot.com/2017/03/sql-server-Backup.html" target="_blank">هنــــا</a><br />
تم بحمد الله </div>
<script type="text/javascript">
SyntaxHighlighter.highlight();
</script>Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com1tag:blogger.com,1999:blog-31554071.post-17683400052623020562017-03-29T19:48:00.001+02:002018-03-26T19:00:25.559+02:00اتساق قواعد البياانات والامر DBCC CHECKDB بالعربي<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 dir="rtl" style="text-align: right;">
مقدمة</h2>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div dir="rtl" style="text-align: right;">
<a href="https://2.bp.blogspot.com/-O0V9KUQNZBc/WNvvOAD45SI/AAAAAAAAPic/EzefueBI-3QO2NbY3Z_Egl94EA3pboRLQCLcB/s1600/sql-corruption-issues.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="176" src="https://2.bp.blogspot.com/-O0V9KUQNZBc/WNvvOAD45SI/AAAAAAAAPic/EzefueBI-3QO2NbY3Z_Egl94EA3pboRLQCLcB/s200/sql-corruption-issues.png" width="200" /></a>في هذا المقال سوف نتعرف على مشاكل اتساق Consistency قواعد بيانات SQL Server وكيف تحدث وكيفية معالجتها وايضا كيفية استخدام الامر DBCC CHECKDB وما هو ال Emergency Mode.<br />
<br />
<a name='more'></a><br /><br />
<h2 style="text-align: right;">
ما معنى الاتساق Consistency </h2>
<div>
تخيل معي ان لديك جدولين يرتبطان ببعضهما عن طريق Foreign Key Constraint المفترض ان الجدول الابن لا يمكن باي حال من الاحوال ان يحتوي على قيمة في عمود ال Foreign Key غير متواجدة في الجدول الاب , اليس كذلك؟</div>
<div>
هذا هو معنى ال Consistency وهو ان كل البيانات المتواجدة في قاعدة البيانات متسقة مع بعضها وتحترم كل ال Rules و ال Constrains المتواجدة داخل قاعدة البيانات.</div>
<div>
<br /></div>
<div>
لكن في بعض الاحيان يحدث خلل داخل قاعدة البيانات يؤدي الى Consistency Error اي بمعنى اخر وفقا للمثال السابق قد تجد قيم ما في الجدول الابن غير متواجدة في الجدول الاب ولكن لماذا؟</div>
<div>
طبعا نعرف جميعا ان كل عمليات الكتابة داخل قاعدة البيانات في نهاية الامر يتم كتابتها داخل ملفات على ال Disk بمعنى ادق IO Operations فقد يحدث في بعض الاحيان خلل اثناء عملية الكتابة قد يكون ناتج عن مشاكل Hardware او مشاكل متعلقة بنظام التشغيل نفسه وقد واجهت مثل هذه المشاكل مع احد عملائي حيث كان يحدث عنده Consistency Error باستمرار بسبب انقطاع التيار الكهربائي في Server قاعدة البيانات ولم يكن مجهز ب UPS.</div>
<div>
فمثلا تخيل انك قمت بحذف سجل من الجدول الاب المفترض ان يقوم بمسح كل السجلات المرتبطة به في الجدول الابن ولكن نتيجة خلل اثناء الكتابة داخل ملفات قاعدة البيانات تم مسح الاب ولم يتم مسح الابناء اذا سيوجد بيانات غير صحيحة.</div>
<div>
<br /></div>
<h2 style="text-align: right;">
وسائل اكتشاف ال Consistency Errors</h2>
<h2 style="text-align: right;">
Page Verify option</h2>
<div>
الوسيلة الاولى هي عن طريق ال Page Verify option وهو عبارة عن Option داخل قاعدة البيانات له 3 اختيارات </div>
<div>
None وهذا الاختيار معناه ان هذه الخاصية غير مفعلة</div>
<div>
Checksum</div>
<div>
TORN_PAGE_DETECTION وهذا الاختيار ستقوم مايكروسوفت بالغاءه في الاصدارات القادمة ولذلك لن نتكلم عنه</div>
<div>
<br /></div>
<div>
<h3 style="text-align: right;">
<b>الاختيارChecksum</b></h3>
</div>
<div>
لفهم ما يفعله هذا الاختيار داخل ال SQL Server لابد من فهم ما هو ال Checksum عموما </div>
<div>
ال Checksum هو في الاصل وسيلة للتأكد من سلامة البيانات فتخيل معي ان لديك ملف Text وانت ترسله من جهازك الى جهاز اخر عبر الانترنت مثلا وتريد ان تتأكد من ان محتويات الملف الذي قمت بارساله لم تتغير خلال عملية النقل وان المستلم تلقى نفس الملف بدون تعديل</div>
<div>
احد وسائل التأكد هو ال Checksum او بمصطلح اخر ال Hashing ولكن كيف يتم؟</div>
<div>
عند ارسالك للملف فانت ترسل الملف + قيمة ال Checksum الخاصة به وهذه القيمة يتم انشائها عن طريق Function معينة اذا تم اعطائها الملف تعطي قيمة معينة ومن المستحيل (المفترض ان يكون مستحيل 😃 ) ان تعطي نفس القيمة الا مع نفس الملف</div>
<div>
وفي نفس الوقت يقوم المستلم باستلام الملف وقيمة ال Checksum الخاصة به وهنا يقوم بتشغيل نفس ال Function على الملف للتأكد ان القيمة التي ستنتج هي نفس قيمة ال Checksum المرسلة.</div>
<div>
<br /></div>
<div>
اي بيان داخل ال SQL Server يتم كتابته في صورة وحدات تسمى Pages داخل الملفات او بمعنى اخر تستطيع ان تعتبر ال Page هي اقل وحدة قياس للبيانات داخل الملفات و في حالة اختيار هذا ال Option يقوم ال SQL Server عند كتابة اي Page بكتابة ايضا ال Checksum الخاص بها وعند قراءة هذه ال Page يقوم ايضا بفحص اتساقها مع ال Checksumالمكتوب عليها فاذا وجد انهم غير متسقين يقوم باصدار ERROR يوضح انه يوجد خلل في ال Checksum وبذلك يستطيع مدير قاعدة البيانات التعامل مع هذا الخطأ.</div>
<div>
كما انه يوجد Option عند عمل Backup لقاعدة البيانات يمكنك من فحص ال Checksum لكل ال Pages التي لها Checksum اثناء عملية ال Backup.<br />
<br /></div>
<div>
<b>ملاحظة هامة:</b></div>
<div>
اذا كانت قاعدة البيانات على الوضع None وقمت بتفعيل ال Checksum هذا معناه انه عند كتابة او تعديل اي page سيتم انشاء ال Checksum الخاص بها بينما الpages التي لم يتم تعديلها ستبقى كما هي بدون checksum.</div>
<div>
<br /></div>
<div>
ولتفعيل هذا الاختيار يمكن عن طريق ال SQL Server Management Studio عن طريق كليك يمين على قاعدة البيانات ثم اختيار Properties ثم اختيار Options</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-bINua7BMi5Q/WNvbJm1gGrI/AAAAAAAAPiE/IYz5X214SWwp6g2Bhi83aridIKMJNs_-wCLcB/s1600/ScreenShot012.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="572" src="https://3.bp.blogspot.com/-bINua7BMi5Q/WNvbJm1gGrI/AAAAAAAAPiE/IYz5X214SWwp6g2Bhi83aridIKMJNs_-wCLcB/s640/ScreenShot012.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<h2 style="text-align: right;">
<b>جدول dbo.suspect_pages </b></h2>
</div>
<div>
<div>
اي Page يكتشف ال SQL Server ان بها Consistency Error يقوم بتخزين بيانات عنها في جدول dbo.suspect_pages داخل قاعدة بيانات ال MSDB ويمكن الاستعلام عنه باسخدام الQuery التالية</div>
<div style="direction: ltr;">
<pre class="brush: sql">SELECT DB_NAME(sp.database_id) [Database] ,
mf.name ,
sp.page_id ,
CASE sp.event_type
WHEN 1 THEN '823 or 824 or Torn Page'
WHEN 2 THEN 'Bad Checksum'
WHEN 3 THEN 'Torn Page'
WHEN 4 THEN 'Restored'
WHEN 5 THEN 'Repaired (DBCC)'
WHEN 7 THEN 'Deallocated (DBCC)'
END AS [Event] ,
sp.error_count ,
sp.last_update_date
FROM msdb.dbo.suspect_pages sp
INNER JOIN sys.master_files mf ON sp.database_id = mf.database_id
AND sp.file_id = mf.file_id;
</pre>
</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<h2 style="text-align: right;">
اكتشاف الاخطاء بالامر DBCC CHECKDB</h2>
<div>
في الحقيقة هذا الامر مهم جدا لاكتشاف وايضا علاج اخطاء ولاكتشاف الاخطاء يمكنك عمل ال Query التالية<br />
<br />
<div style="direction: ltr;">
<pre class="brush: sql">DBCC CHECKDB('DatabaseName')
</pre>
</div>
<br /></div>
<div>
وبهذا الامر يقوم ال SQL Server بفحص كل Page داخل قاعدة البيانات والتأكد من عدم وجود Consistency Error بها فاذا وجد خطأ يظهره باللون الاحمر واذا لم يجد خطأ يكتب معلومات عن ال Page التي يتم فحصها.<br />
<br />
مما سبق يتضح ان هذه العملية تكون مكلفة جدا حيث انها تفحص كل Page داخل قاعدة البيانات وبالتالي تسحب كل ال Resources الخاصة بال Server لذلك ينصح ان يتم عملها اثناء الفترات التي لا يوجد تعامل كثيف على قاعدة البيانات في ايام العطلات او ليلا وفي بعض الاحيان يقوم مديروا قواعد البيانات باخذ <a href="http://galaldev.blogspot.com.eg/2017/03/sql-server-Backup.html" target="_blank">نسخة احتياطية</a> واسترجاعها على Server اخر وعمل CheckDB لها على الServer الاخر بعيدا عن ال Production Server.<br />
<br />
كما لابد من ملاحظة ان هذا الامر لكي يعمل (في الوضع الافتراضي) يقوم بالتالي اولا يعمل <a href="http://galaldev.blogspot.com.eg/2017/02/database-snapshot.html" target="_blank">Snapshot</a> لقاعدة البيانات المراد فحصها ثم يقوم بالفحص على هذه ال <a href="http://galaldev.blogspot.com.eg/2017/02/database-snapshot.html" target="_blank">Snapshot</a> ولكن لماذا؟<br />
لسببين الاول ان يتم الفحص على اللحظة الزمنية التي تم تشغيل الامر فيها وبالتالي لا يتأثر باي ادخالات حالية والسبب الثاني حتى يخفف من تعارض ال <a href="http://galaldev.blogspot.com.eg/2017/02/sql-server-transactions.html" target="_blank">Transactions </a>للجداول التي يتم فحصها ولا يعمل لها Locking.<br />
<br />
ايضا يجب معرفة ان هذا الامر له Parameters كثيرة لتغير الوضع الافتراضي له فمثلا يوجد Parameter ياسم NO_INFOMSGS يقوم باخفاء كل رسائل المعلومات الصادرة من الامر وبالتالي يتم اظهار رسائل الاخطاء فقط وممكن معرفة كل ال Parameters المتاحة من <a href="https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql" target="_blank">هنا</a>.<br />
<br />
<h2 style="text-align: right;">
معالجة ال Consistency Errors</h2>
</div>
<div>
خط الدفاع الاول لهذه الاخطاء هو استرجاع البيانات من <a href="http://galaldev.blogspot.com.eg/2017/03/sql-server-Backup.html" target="_blank">نسخة احتياطية</a> سابقة ولذلك لابد من اخذ <a href="http://galaldev.blogspot.com.eg/2017/03/sql-server-Backup.html" target="_blank">نسخ احتياطية</a> من قواعد البيانات بصفة دورية لتجنب التعرض لفقدان البيانات.</div>
<div>
<br /></div>
<h2 style="text-align: right;">
باستخدام DBCC CHECKDB</h2>
<div>
في الحقيقة يمكن اصلاح Consistency Error بدون فقد اي بيانات عن طريق الامر التالي </div>
<div>
<br />
<div style="direction: ltr;">
<pre class="brush: sql">ALTER DATABASE DatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKDB (DatabaseName, REPAIR_REBUILD) ;
GO
ALTER DATABASE DatabaseName SET MULTI_USER ;
GO
</pre>
</div>
حيث ان الكود السابق يقوم بقطع اي اتصال مع قاعدة البيانات ثم عمل Repair لها ثم فتح امكانية الاتصال مع قاعدة البيانات مرة اخرى.<br />
ولكن للاسف ليست دائما الحياة وردية ويمكن اصلاح الاخطاء بدون فقد بيانات فاذا رجعت للمثال السابق في اول المقال الخاص بحذف بيانات من الجدول الاب ولم يتم حذف ابنائه في الجدول الابن فكيف يمكن لل SQL Server حل هذه المشكلة بدون اعادة حذف البيانات في جدول الابن التي بها مشكلة؟<br />
<br />
وبالتالي يتم استبدال الكود السابقة بالكود التالي<br />
<br />
<div style="direction: ltr;">
<pre class="brush: sql">ALTER DATABASE DatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
GO
DBCC CHECKDB (DatabaseName, REPAIR_ALLOW_DATA_LOSS) ;
GO
ALTER DATABASE DatabaseName SET MULTI_USER ;
GO
</pre>
</div>
<br />
ولكن قد ما هي المشاكل التي يمكن حلها بدون الحاجة الى فقدان البيانات ؟<br />
مثلا لو مشاكل خاصة بال Log File او خاصة ب <a href="http://galaldev.blogspot.com.eg/2015/11/sql-server-index.html" target="_blank">Non-Clustered Index</a> يمكن اعادة بنائه من جديد وهكذا.<br />
<br />
<b>ملاحظة هامة</b><br />
عند تشغيل امر CheckDB لفحص الاخطاء يقوم باعطائك معلومة عن الامكانية المتاحة لحل الاخطاء التي وجدها سواء بدون فقد بيانات او بفقد بيانات في اخر الرسائل التي يكتبها<br />
<h2 style="text-align: right;">
Emergency Mode</h2>
</div>
<div>
في بعض الاحيان يكون ال Consistency Error المتواجد ادى الى تعطل عمل ملف او اكثر من قاعدة البيانات بالكامل مما ادى الى دخول قاعدة البيانات في حالة لا يمكن الولوج اليها وهذه مشكلة كبيرة.</div>
<div>
ولحل هذه المشكلة خط الدفاع الاول هو استرجاع البيانات من <a href="http://galaldev.blogspot.com.eg/2017/03/sql-server-Backup.html" target="_blank">نسخة احتياطية</a> سابقة كما ذكرت من قبل ولكن اذا لم يكن هناك نسخة احتياطية لابد من وضع قاعدة البيانات على وضع ال Emergency Mode وعمل REPAIR_ALLOW_DATA_LOSS وهذا هو الحل الوحيد حيث لا يوجد لديك اي نسخة احتياطية.</div>
<div>
<br /></div>
<div>
ولتجربة ذلك على اي قاعدة بيانات لديك قم بايقاف ال SQL Server Service ثم قم بحذف ملف ال Log File ثم اعد تشغيل ال SQL Server وهنا ستجد قاعدة البيانات موجودة ولكن لا يمكن التعامل معها بعد ذلك قم بعمل الامر التالي لاصلاحها واعادة بناء ال Log File</div>
<div>
<br />
<div style="direction: ltr;">
<pre class="brush: sql">ALTER DATABASE DatabaseName SET EMERGENCY ;
GO
ALTER DATABASE DatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
GO
DBCC CHECKDB (DatabaseName, REPAIR_ALLOW_DATA_LOSS) ;
GO
ALTER DATABASE DatabaseName SET MULTI_USER ;
GO
</pre>
</div>
<br />
<br />
<h2 style="text-align: right;">
مراجع</h2>
<div>
كتاب Pro SQL Server Administration<br />
<br />
========================<br />
تم بحمد الله<br />
<br />
<br /></div>
</div>
</div>
</div>
<script type="text/javascript">
SyntaxHighlighter.highlight();
</script>Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com5tag:blogger.com,1999:blog-31554071.post-13079428671922667022017-03-12T01:07:00.000+02:002018-03-26T19:00:33.395+02:00شرح متقدم للنسخ الاحتياطية في قواعد بيانات ال SQL Server بالعربي<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="rtl" style="text-align: right;">
<a href="https://3.bp.blogspot.com/-KaY0lQl4H_A/Winm60W8QmI/AAAAAAAAR74/8GDrog5W5v8BIOrc1zNGptNEaJMMWeFewCLcBGAs/s1600/download.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="208" data-original-width="242" src="https://3.bp.blogspot.com/-KaY0lQl4H_A/Winm60W8QmI/AAAAAAAAR74/8GDrog5W5v8BIOrc1zNGptNEaJMMWeFewCLcBGAs/s1600/download.jpg" /></a>في هذا المقال سوف نتحدث عن انواع النسخ الاحتياطية المتاحة داخل ال Sql Server والية عملها .</div>
<div dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="text-align: right;">
<br />
في البداية قبل التعرف على انواع النسخ الاحتياطية المختلفة لابد من معرفة ما هي انواع ال Recovery Model لارتباطها باحد انواع النسخ الاحتياطية</div>
<h2 dir="rtl" style="text-align: right;">
<a name='more'></a>انواع ال Recovery Model</h2>
<div dir="rtl" style="text-align: right;">
قواعد بيانات ال SQL Server يتم تخزين بياناتها في نوعين ملفات اساسيين </div>
<div dir="rtl" style="text-align: right;">
Data File And Log File</div>
<div dir="rtl" style="text-align: right;">
<b>Primary Data File</b></div>
<div dir="rtl" style="text-align: right;">
هو الملف الذي تخزن فيه البيانات الفعلية ويكون بامتداد MDF او NDF</div>
<div dir="rtl" style="text-align: right;">
<b>Transaction LOG File</b></div>
<div dir="rtl" style="text-align: right;">
وهذا الملف له عدة وظائف ولكن اشهرها انه ملف مرحلي يتم فيه تخزين البيانات مؤقتا الى ان تنتقل الى ملف ال Data File ويكون بامتداد LDF ولكن لماذا لا يتم الكتابة مباشرة في ملف ال Data File؟</div>
<div dir="rtl" style="text-align: right;">
تخيل معي انك تقوم باعداد برنامج للقيام بادخال فاتورة مبيعات وهذه الفاتورة بياناتها على جدولين في قاعدة البيانات مثلا</div>
<div dir="rtl" style="text-align: right;">
(الفاتورة و اصناف الفاتورة) تخيل انه تم نجاح الادخال في الجدول الاول ولم ينجح في الثاني , سينتج عن ذلك وجود فواتير بدون اصناف مثلا</div>
<div dir="rtl" style="text-align: right;">
ولحل هذه المشكلة تجد اهمية استخدام ال Transaction LOG File حيث يتم كتابة البيانات فيه, فاذا نجحت كل العمليات , يتم نقلها الى ال Data File اما اذا حدث خطأ في اي مرحلة , يتم الغاء العملية كأن لم تكن.<br />
<br />
على حسب نوع ال Recovery Model يتم الاحتفاظ بالبيانات في ال Transaction LOG File او لا والانواع المتاحة هي<br />
<br />
<h3 style="text-align: right;">
Simple Recovery Model</h3>
في هذا النوع لا يتم الاحتفاظ باي بيانات في ال Transaction LOG File مما يؤدي الى ان حجم الملف يكون صغير جدا<br />
<h3 style="text-align: right;">
Full Recovery Model</h3>
في هذا النوع يتم الاحتفاظ دائما باي بيان يتم كتابته داخل ال Transaction LOG File وهذا يؤدي الى تضخم حجم الملف الى ان يقوم مدير قواعد البيانات بتفريغه<br />
<h3 style="text-align: right;">
Bulk Logged Recovery Model</h3>
وهذا النوع يتم الاحتفاظ فيه بكل البيانات التي يتم كتابتها في ال Transaction LOG File عدا العمليات الناتجة عن Bulk Operation يتم الاحتفاظ بالحد الادنى الممكن الاحتفاظ به داخل ال Log File وذلك لتقليل مساحته وهذه العمليات هي<br />
1. SELECT INTO<br />
2. BULK IMport operations including BULK INSERT and BCP<br />
3. INSERT INTO SELECT command using the OPENROWSET(BULK) function<br />
4. Partial updates to columns having large value data type<br />
5. Using WRITE clause in UPDATE statements<br />
6. Index operations e.g CREATE INDEX, ALTER INDEX REBUILD , DROP INDEX<br />
<div>
<br /></div>
<br />
<h2 style="text-align: right;">
انواع النسخ الاحتياطية</h2>
<h2 style="text-align: right;">
</h2>
<h2 style="text-align: right;">
Full Backup</h2>
في هذا النوع من النسخ الاحتياطية يتم اخذ نسخة كاملة من قاعدة البيانات وهذا اهم نوع من انواع النسخ الاحتياطية لان اي نوع من الانواع التالية يعتمد على وجود نسخة Full Backup وهذا النوع يمكن اخذه مع اي Recovery Model<br />
والمشكلة الوحيدة التي قد تواجه مديرين قواعد البيانات مع هذا النوع هو التأثير على اداء قاعدة البيانات اثناء اخذ النسخة الاحتياطية خصوصا لو قاعدة البيانات بحجم كبير.<br />
ملاحظة هامة: يمكن اخذ الBackup لقاعدة البيانات ككل او ل File Group معينة ويمكنك مراجعة المقال التالي لتوضيح المقصود <a href="https://galaldev.blogspot.com/2017/02/sql-server-filegroups.html">شرح SQL Server FileGroups بالعربي</a><br />
<h2 style="text-align: right;">
</h2>
<h2 style="text-align: right;">
Differential Backup</h2>
<div>
في هذا النوع يتم اخذ نسخة من كل البيانات الPages التي تمت من اخر نسخة Full Backup الى وقت اخذ النسخة ال Differential فقط ولذلك تكون مساحته صغيرة نوعا ما .</div>
<div>
ولعمل Restore لل Differential Backup لابد من عمل Restore لملف ال Full Backup الذي يعتمد عليه حيث انه لا يحتوي على كل قاعدة البيانات انما يحتوي على التغيرات فقط بين اخر نسخة Full والنسخة ال Differential.</div>
<div>
ويتخيل البعض انه عندما يأخذ نسخة Differential ثانية فانها تحتوي على التغيرات بين نسخة الDifferential الاولى و الثانية ولكن هذا خطأ حيث انها تحتوي على التغيرات بين اخر Full واخر Differential يتم اخذه ولذلك عند عمل Restore لا تحتاج الا اخر نسخة Differential ونسخة ال Full التي تعتمد عليها<br />
ويمكن اخذ هذا النوع مع اي نوع من ال Recovery Model</div>
<h2 style="text-align: right;">
</h2>
<h2 style="text-align: right;">
Log Backup</h2>
<div>
هذا النوع من ال Backup يتم اخذ نسخة احتياطية من ال Transaction Log File ولذلك فهو يعتمد على ان تكون قاعدة البيانات ب Recovery Model من نوع Full او بحد ادنى Bulk Logged وهذه الانواع التي تحتفظ بالبيانات في ال Transaction Log.</div>
<div>
فعند اخذ هذا ال Backup يتم تفريغ ملف ال Transaction Log مباشرة بعد اخذ ال Backup ولذلك عند اخذ Log Backup مرة اخرى تكون البيانات التي تمت من اخر Log Backup حتى ال Log Backup الحالي ولذلك في حالة الاحتياج الى عمل Restore لابد من ارجاع اخر ملف Full واخر ملف Differential وكل ملفات ال Log Backups التي تمت بعد ذلك.</div>
<div>
وفي حالة قواعد البيانات ذات الحجم الكبير يعتبر هذا النوع من ال Backups ذو اهمية عالية حيث انه اقل تأثيرا على اداء قاعدة البيانات لما يحتويه على بيانات قليلة من اخر Log Backup تم اخذه قبل ذلك.</div>
<div>
ومن مزايا هذا النوع انك ممكن تقوم بعمل Restore للبيانات حتى وقت معين بمعنى انك تريد عمل استرجاع مثلا للبيانات حتى الساعة الثانية ظهرا وليس للوقت الذي تم فيه الباكب.</div>
<div>
<b>ملاحظة:</b> تفريغ ملف ال Transaction Log File بعد اخذ ال Log Backup ليس معناه تقليل حجم الملف انما يتم تفريغ الملف من البيانات ويتم ترك مكانها فارغ متاح للكتابة عليه مرة اخرى ولكن لتقليل حجم الملف لابد من عمل Shrink لل Transaction Log File</div>
<div>
<br /></div>
<h2 style="text-align: right;">
التأكد من سلامة النسخة الاحتياطية</h2>
<div>
يوجد خطأ شائع يقوم به مديروا قوعد البيانات وهو انهم يقومون باخذ النسخة الاحتياطية دون التأكد من امكانية استرجاعها ففي بعض الاحيان قد يتلف ملف الباكب ويكون غير صالح للاسترجاع لذلك لابد من التأكد من سلامة الملف وبياناته </div>
<div>
يوجد خاصية لقاعدة البيانات لعمل فحص ملف الباكب وتسمى Restore Verify Only ولكن حتى هذه الخاصية لا تؤكد بنسبة مائة بالمائة بسلامة الملف وقابليته للاسترجاع لذلك الوسيلة الوحيدة للتأكد بنسبة مائة بالمائة هي عمل Restore.</div>
<div>
<br /></div>
<h2 style="text-align: right;">
طريقة اخذ النسخ الاحتياطية من ال Management Studio</h2>
<div>
كليك يمن على قاعدة البيانات ثم اختر Tasks ثم اختر Backup ثم انظر الشكل التالي</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-RgCxYs-ww8A/WMR50HBzBVI/AAAAAAAAPUs/pPav8sTGgq8Ly1FPvuwknJaR6nfsXWF7wCLcB/s1600/ScreenShot007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="556" src="https://1.bp.blogspot.com/-RgCxYs-ww8A/WMR50HBzBVI/AAAAAAAAPUs/pPav8sTGgq8Ly1FPvuwknJaR6nfsXWF7wCLcB/s640/ScreenShot007.jpg" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-d5t0Ar8Knt4/WMR52qkdQjI/AAAAAAAAPUw/_LKIC08OT_gKaqBGRnU9UKbJc0vRwRNyQCLcB/s1600/ScreenShot008.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="546" src="https://2.bp.blogspot.com/-d5t0Ar8Knt4/WMR52qkdQjI/AAAAAAAAPUw/_LKIC08OT_gKaqBGRnU9UKbJc0vRwRNyQCLcB/s640/ScreenShot008.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
ولعمل استرجاع Restore لقاعدة البيانات يمكنك زيارة المقال من <a href="https://galaldev.blogspot.com/2017/12/restore-sql-server.html" target="_blank">هنـــــا</a></div>
<div>
<br /></div>
<div>
<div dir="rtl" style="font-family: "times new roman";">
<div dir="rtl" style="text-align: right;">
<div dir="rtl" style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: right; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div style="margin: 0px;">
<div style="margin: 0px;">
--<br />
تم بحمد الله<br />
<div>
<br /></div>
</div>
</div>
</div>
</div>
</div>
<div dir="rtl" style="text-align: right;">
</div>
</div>
</div>
</div>
<script type="text/javascript">
SyntaxHighlighter.highlight();
</script>Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com4tag:blogger.com,1999:blog-31554071.post-8935806107343198492017-02-25T22:57:00.001+02:002018-03-26T19:00:42.490+02:00شرح ال Database Snapshot بالعربي<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 dir="rtl" style="text-align: right;">
مقدمة</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-ggus5J2HLY4/WLHtNiLuMxI/AAAAAAAAPPA/65Yq2Lrrv0sYVgBa4ZXCUtzyLGYa-c7wQCLcB/s1600/database-snapshot.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://3.bp.blogspot.com/-ggus5J2HLY4/WLHtNiLuMxI/AAAAAAAAPPA/65Yq2Lrrv0sYVgBa4ZXCUtzyLGYa-c7wQCLcB/s200/database-snapshot.png" width="200" /></a></div>
<div dir="rtl" style="text-align: right;">
ال Database snapshot من الخصائص الهامة لقواعد بيانات ال SQL Server والغير مشهورة حيث لا يعلمها الكثيرون ويخلط الكثير بينها وبين ال Backup.</div>
<div dir="rtl" style="text-align: right;">
في هذا المقال سوف اوضح ماهي ال Snapshot وما هي اهميتها وكيفية الاستفادة منها وايضا كيفية تنفيذها باستخدام ال Scripts.</div>
<div dir="rtl" style="text-align: right;">
<br />
<a name='more'></a><br /></div>
<h2 dir="rtl" style="text-align: right;">
ما هي ال Snapshot</h2>
<div dir="rtl" style="text-align: right;">
لفهم طبيعتها تخيل معي السيناريو التالي</div>
<div dir="rtl" style="text-align: right;">
لديك قاعدة بيانات بحجم 200 GB (وهذا يعتبر حجم متوسط لقواعد بيانات) وسوف يقوم احد المطورين بتشغيل اسكربت يقوم بتعديل مجموعة كبيرة من البيانات وتريد ان تؤمن قاعدة بياناتك بحيث يمكن الرجوع عما تم تنفيذه , فماذا ستفعل؟</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
اعتقد انك تفكر في اخذ Backup من قاعدة البيانات وعمل Restore له باسم اخر بحيث تستطيع كتابة Query للتراجع عن اي خطأ ينتج عن ذلك الScript!</div>
<div dir="rtl" style="text-align: right;">
ولكن ما الوقت الذي ستأخذه عملية ال Backup و ال Restore لقاعدة بيانات بمساحة 200 GB , ستأخذ وقت كبير جدا.</div>
<div dir="rtl" style="text-align: right;">
و ايضا تحتاج الى مساحة 200 GB على ال Disk متاحة.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
اذا فما الحل السريع الفعال؟</div>
<div dir="rtl" style="text-align: right;">
الاجابة هي ال <b>Snapshot</b> :)</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
فال Snapshot هي عبارة عن نسخة للقراءة فقط من قاعدة البيانات تستطيع من خلالها قراءة كل البيانات التي كانت داخل قاعدة البيانات لحظة انشاء ال Snapshot.</div>
<h2 dir="rtl" style="text-align: right;">
طريقة عملها</h2>
<div dir="rtl" style="text-align: right;">
ال Snapshot فعليا ليست نسخة جديدة من قاعدة البيانات ولكنها تعتمد على قاعدة البيانات الاساسية وتتبع اسلوب يسمى Copy on write (النسخ عند الكتابة).</div>
<div dir="rtl" style="text-align: right;">
فعند عمل Snapshot يقوم ال SQL Server بعمل ملف فارغ لل Snapshot يكون حجمه هو نفس حجم قاعدة البيانات وحجمه على ال Disk حوالي 2MB لانه فارغ من البيانات,</div>
<div dir="rtl" style="text-align: right;">
وعند التعديل في قاعدة البيانات الاساسية يتم نسخ البيانات الاصلية قبل التعديل (Pages) من قاعدة البيانات الاساسية الى ملف ال Snapshot,</div>
<div dir="rtl" style="text-align: right;">
وعند الاستعلام عن يقوم ال SQL Server بجلب البيانات من ال Snapshot ان كانت موجودة اما اذا لم يجدها فمعنى ذلك انها لم يتم تعديلها منذ وقت انشاء ال Snapshot ويتم جلبها من قاعدة البيانات الاساسية.</div>
<div dir="rtl" style="text-align: right;">
انظر الشكل التالي للتوضيح</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-dwLcWWxYN3w/WLHiu8VzCoI/AAAAAAAAPOc/QHFyZZIn7bg4kHSENxstauSCqRyc89ImgCLcB/s1600/ScreenShot005.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="514" src="https://1.bp.blogspot.com/-dwLcWWxYN3w/WLHiu8VzCoI/AAAAAAAAPOc/QHFyZZIn7bg4kHSENxstauSCqRyc89ImgCLcB/s640/ScreenShot005.jpg" width="640" /></a></div>
<div dir="rtl" style="text-align: right;">
فالاستعلام في الشكل السابق قام بجلب ال Page رقم 1:100 من ال Snapshot حيث تم تعديلها من قبل بينما قام بجلب ال Page رقم 1:101 من قاعدة البيانات الاساسية حيث لم يتم تعديلها.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
بعض خصائص ال Snapshot</h2>
<div dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="text-align: right;">
<span style="text-align: right;"> نظرا لطبيعة ال Snapshot فانها يتم انشائها بسرعه كبيرة في ثواني معدودة حيث انها في بداية انشائها لا تحتوي على اي بيانات.</span><br />
<span style="text-align: right;">وايضا ال Snapshot لا تغني عن الBackup حيث انها لا قيمة لها اذا كانت قاعدة البيانات الاساسية معطلة حيث ان اي Snapshot لكي تعمل لابد ان تكون قاعدة البيانات الماخوذة منها عاملة ايضا واذا حدث بقاعدة البيانات الاساسية عطل ما وتريد استرجاعها لا يمكن ذلك الا من ال Backup وليس ال Snapshot.</span><br />
<span style="text-align: right;">يمكن عمل Restore لقاعدة البيانات من ال Snapshot للرجوع الى قيمة البيانات وقت انشاء ال Snapshot ولكن لابد ان تكون قاعدة البيانات سليمة وليس بها اي مشاكل.</span><br />
<span style="text-align: right;">ال Snapshot تؤدى الى زيادة اعباء الكتابة على ال (Disk (IO نظرا لان اي بيانت يتم تعديله يتم نسخ قيمته قبل التعديل الى ال Snapshot.</span></div>
<div dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
امثلة لاستخدام ال Snapshot</h2>
<h3 dir="rtl" style="text-align: right;">
اغراض عمل تقارير عن بيانات قديمة</h3>
<div dir="rtl" style="text-align: right;">
فتقوم بعمل Snapshot على رأس السنة مثلا للاحتفاظ بالبيانات في بداية السنة وتجعل بعض التقارير تقرأ من هذه البيانات.</div>
<h3 dir="rtl" style="text-align: right;">
اغراض للوقاية من تنفيذ اسكربتات الخاطئة</h3>
<div dir="rtl" style="text-align: right;">
فكما في المثال في بداية المقال يمكنك عمل Snapshot قبل تنفيذ اي اسكربت يقوم بتعديل كمية كبيرة من البيانات حتى تستطيع ان تتراجع عن نتائجة في حالة حدوث خطأ ما.</div>
<h3 dir="rtl" style="text-align: right;">
اغراض قراءة البيانات من قاعدة بيانات ال Mirror</h3>
<div dir="rtl" style="text-align: right;">
فعند عمل Mirroring , قاعدة بيانات ال Mirror لا يمكن القراءة منها ولكن ممكن عمل Snapshot للقراءة منها.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
طريقة انشاء ال Snapshot</h2>
<div dir="rtl" style="text-align: right;">
انظر الScript التالي</div>
<span style="background-color: #fce5cd;">CREATE DATABASE <b>Snapshot_Name</b> ON</span><br />
<span style="background-color: #fce5cd;">( NAME = <b>DatabaseLogicalFileName</b> , FILENAME =</span><span style="background-color: #fce5cd;">'<b>SnapshotFilePath.ss</b>' )</span><br />
<span style="background-color: #fce5cd;">AS SNAPSHOT OF <b>DatabaseName</b>;</span><br />
<span style="background-color: #fce5cd;">GO</span><br />
<div dir="rtl" style="text-align: right;">
<b style="text-align: left;">Snapshot_Name اسم ال Snapshot</b></div>
<div dir="rtl" style="text-align: right;">
<b style="text-align: left;">DatabaseLogicalFileName </b><span style="text-align: left;">ال Logicalname الخاص بملف ال MDF الخاص بقاعدة البيانات</span></div>
<div dir="rtl" style="text-align: right;">
<b style="text-align: left;">SnapshotFilePath.ss </b><span style="text-align: left;">مسار ملف ال Snapshot ويكون بامتداد ss.</span></div>
<div dir="rtl" style="text-align: right;">
<b style="text-align: left;">DatabaseName</b><span style="text-align: left;"> اسم قاعدة البيانات التي تريد اخذ Snapshot لها.</span></div>
<div dir="rtl" style="text-align: right;">
<b style="text-align: left;"><br /></b></div>
<div dir="rtl" style="text-align: right;">
<span style="text-align: left;">بعد ذلك ستجدها ظهرت في ال Management studio انظر الشكل التالي</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-9xwibjKxLEY/WLHpquyrj3I/AAAAAAAAPOw/NJG3WCdEwo8ljIDArhVQp3MRmrpNq5ngACLcB/s1600/ScreenShot006.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-9xwibjKxLEY/WLHpquyrj3I/AAAAAAAAPOw/NJG3WCdEwo8ljIDArhVQp3MRmrpNq5ngACLcB/s1600/ScreenShot006.jpg" /></a></div>
<div dir="rtl" style="text-align: right;">
وبذلك يمكن فتح Connection عليها كانها قاعدة بيانات وعمل اي استعلامات للقراءة منها.</div>
<div dir="rtl" style="text-align: right;">
<b style="text-align: left;"><br /></b></div>
<h2 dir="rtl" style="text-align: right;">
ولعمل Restore لقاعدة البيانات من ال Snapshot</h2>
<div dir="rtl" style="text-align: right;">
انظر الاسكربت التالي</div>
<span style="background-color: #fce5cd;">RESTORE DATABASE <b>DatabaseName </b>from </span><br />
<span style="background-color: #fce5cd;">DATABASE_SNAPSHOT = '<b>Snapshot_Name</b> ';</span><br />
<span style="background-color: #fce5cd;"><br /></span>
<br />
<h2 dir="rtl" style="text-align: right;">
ملخص</h2>
<div dir="rtl" style="text-align: right;">
في هذا المقال تم توضيح طريقة عمل ال Snapshot وبعض امثلة لاستخدامها وكيفية انشائها داخل ال SQL Server اتمنى ان تجدوه مفيدا واذا اردت المزيد من القالات رجاء تصفح ارشيف المدونة ومتابعة المدونة بشكل مستمر للحصول على كل جديد.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<h2 dir="rtl" style="text-align: right;">
مراجع</h2>
<div dir="rtl" style="text-align: right;">
https://technet.microsoft.com/en-us/library/ms187054(v=sql.105).aspx</div>
<div dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: right; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<br />
<div dir="rtl" style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: right; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div dir="rtl" style="text-align: right;">
<div dir="rtl" style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: right; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div style="margin: 0px;">
<div style="margin: 0px;">
<a href="https://www.simple-talk.com/books/sql-books/sql-server-execution-plans,-second-edition,-by-grant-fritchey/" style="background-color: white; font-family: Verdana, Geneva, sans-serif; font-size: 13.2px; text-decoration: none;"><span style="color: black;">SQL Server Execution Plans, Second Edition, by Grant Fritchey</span></a></div>
</div>
</div>
</div>
</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
</div>
<script type="text/javascript">
SyntaxHighlighter.highlight();
</script>Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com1tag:blogger.com,1999:blog-31554071.post-83843757518810063492017-02-21T15:20:00.000+02:002018-03-26T19:00:49.684+02:00معلومات عن بعض خصائص و برامج ال SQL Server بالعربي<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 dir="rtl" style="text-align: right;">
<a href="https://4.bp.blogspot.com/--FCYgECB3FA/WKjMMGz5GtI/AAAAAAAAPNQ/CmKhmCgjhjQi0QE59pxfV3vR3huXVXIlwCLcB/s1600/backup-sql-server-ret.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="160" src="https://4.bp.blogspot.com/--FCYgECB3FA/WKjMMGz5GtI/AAAAAAAAPNQ/CmKhmCgjhjQi0QE59pxfV3vR3huXVXIlwCLcB/s200/backup-sql-server-ret.png" width="200" /></a>مقدمة</h2>
<div dir="rtl" style="text-align: right;">
هل قمت بتنصيب ال SQL Server في يوم ما ووجدت بعض الاختيارات التي لم تعرف معناها وما هي اهميتها؟</div>
<div dir="rtl" style="text-align: right;">
اكيد حدث ذلك ولو في القليل من الاختيارات ولم يتثنى لك الوقت لمعرفة هذه الخصائص او ال Features</div>
<div dir="rtl" style="text-align: right;">
في هذا المقال سوف نوضح بعض هذه ال Features</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
<a name='more'></a></h2>
<h2 dir="rtl" style="text-align: right;">
Database Engine Service</h2>
<div dir="rtl" style="text-align: right;">
هذه خدمة قاعدة البيانات العادية وهي النظام الاساسي لل SQL Server</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
Management Studio</h2>
<div dir="rtl" style="text-align: right;">
هذا البرنامج هو البرنامج الاساسي للتعامل مع ال SQL Server وانشاء قواعد البيانات وادرتها وكتابة الاستعلامات ومعظم ما يتعلق بال SQL Server.</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
SQL Server Replication</h2>
<div dir="rtl" style="text-align: right;">
هذه الميزة تتيح عند تفعيلها امكانية تكرار جدول او اكثر من قاعدة البيانات في قاعدة بيانات اخرى بمعنى اذا كنت تريد عمل تكرار للبيانات لجدول ما او مجموعة من الجداول في اكثر من قاعدة بيانات على اكثر من Server فيجب ان تختار هذه الخاصية.</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
Full Text Search</h2>
<div dir="rtl" style="text-align: right;">
هذه الخاصية تتيح لك عمل ما يسمى بال Full Text Index وبالتالي يمكن البحث داخل النصوص الكبيرة بطرق متقدمة جدا اكثر من طرق البحث العادية باستخدام ال Like واظهار نتائج افضل بكثير.</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
Analysis Service</h2>
<div dir="rtl" style="text-align: right;">
هذه الخاصية تتيح لك عمل Business Intelligence Solution</div>
<div dir="rtl" style="text-align: right;">
فهذه الخاصية تتيح لك عمل Cube للبيانات وهذا موضوع طويل ولكن باختصار ال Cube عبارة عن نموذج بيانات غير النموذج المعتاد (جداول و علاقات) انما ال Cube يكون عبارة وسيله لحفظ قيم ال Calcualtions بدلا من عمل استعلام لاستنتاجها</div>
<div dir="rtl" style="text-align: right;">
تخيل ان لديك قاعدة بيانات لمستشفى مثلا وتريد ان تعرف عدد المرضى الذين زاروا المستشفى في يوم معين فبالطريقة العادية تقوم بعمل استعلام يقوم بحساب عدد المرضى بينما اذا كان لديك Cube للبيانات لا تقوم بعمل استعلام يقوم بعد المرضى انما تكون محفوظة بال Cube فتجلبها مباشرة وهذا باختصار شديد.</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
Reporting Service</h2>
<div dir="rtl" style="text-align: right;">
هذه الخاصية تتيح لك عمل تقارير جاهزة للطباعة تقارير مثل تقارير عن الارباح الخسائر المبيعات واي نوع تقارير واستخدامها داخل البرامج التي يتم تطويرها.</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
Integration Service</h2>
<div dir="rtl" style="text-align: right;">
باختصار هذه الخاصية تتيح لك نقل البيانات من والى قواعد البيانات والملفات كالاExcel مثلا وانواع عديدة من مصادر البيانات المختلفة Datasources ,و التحكم بها يكون بسهولة وبادوات مرئية Visual Tools وهذه الادوات مجهزة للتعامل مع البيانات الكبيرة ومستخدمة دائما في نقل البيانات الى مستودعات البيانات Data Warehouse المستخدمة في ال Business Intelligence.</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
Client Tools SDK</h2>
<div dir="rtl" style="text-align: right;">
هذه SDK تتيح لك استخدام امكانية ال SQL Server Management Studio داخل ال .Net فمثلا يوجد داخل ال Management Studio امكانية لعمل Generate Script لكل او بعض الجداول فيمكنك بهذه الادوات عمل ذلك برمجيا داخل ال .Net . وذلك على سبيل المثال لا الحصر.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
SQL Server Configuration Manager</h2>
</div>
<div dir="rtl" style="text-align: right;">
هذا البرنامج للتحكم بال Windows Services الخاصة بال Sql Server وعمل Configuration لها كاتاحة الاتصال من خارج الServer واشياء اخرى كثيرة.</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
SqlCmd</h2>
<div dir="rtl" style="text-align: right;">
هذا البرنامح يعمل من ال Command Line لامكانية كتابة استعلامات داخل ال Sql Server من ال Command line بدون ال Managment Studio وفي الغالب تكون الحاجة لهذا البرنامج كبيرة اذا كان لديك ملف Script حجمة كبير جدا وتريد تنفيذه بدون فتحه (حيث ان الملفات الكبيرة حدا لا يمكن فتحها داخل ال Managment Studio).</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
SQL Server Profiler</h2>
<div dir="rtl" style="text-align: right;">
هذا البرنامج يتيح لك مراقبة ال SQL Server وعمل Log يتم كتابة فيه كل الاستعلامات التي تنفذ داخل ال SQL Server لمراقبتها ومتابعة ادائها وهو مفيد جدا لمديرين قواعد البيانات في حالة ان لديك قاعدة بيانات يتم الاتصال عليها من اكثر من برنامج وتريد مراقبة الاستعلامات التي تنفذها هذه البرامج.</div>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
</h2>
<h2 dir="rtl" style="text-align: right;">
Database Engine Tuning Adviser</h2>
<div dir="rtl" style="text-align: right;">
هذا البرنامج يقوم بعمل اقتراحات لك لتحسين اداء قاعدة البيانات عن طريق اقتراح عمل Indexes على الجداول المختلفة ويقوم بعمل الاسكربتات الخاصة بهذه ال Indexes المقترحة.</div>
<div dir="rtl" style="text-align: right;">
<br />
<h2 style="text-align: right;">
كلمة اخيرة</h2>
</div>
<div dir="rtl" style="text-align: right;">
القائمة السابقة هي بعض اهم البرامج والخصائص وليس كلها ولكنها تمثل اغلب الخصائص المستخدمة.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br />
<br /></div>
<div dir="rtl" style="text-align: right;">
-------------------------</div>
<div dir="rtl" style="text-align: right;">
تم بحمد الله</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
</div>
<script type="text/javascript">
SyntaxHighlighter.highlight();
</script>Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com2tag:blogger.com,1999:blog-31554071.post-26225520095475785212017-02-18T21:53:00.000+02:002018-03-26T17:56:19.184+02:00شرح ال SQL Server Transaction بالعربي<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="tr_bq" dir="rtl" style="text-align: right;">
<div class="tr_bq" dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
مقدمة</h2>
</div>
<div dir="rtl" style="text-align: right;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-bhzX_ib1d0w/WKip7II-fCI/AAAAAAAAPM8/4yql5i6lrqcC2IYXiiNBF5i2M58vFUwmgCLcB/s1600/acid.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="67" src="https://3.bp.blogspot.com/-bhzX_ib1d0w/WKip7II-fCI/AAAAAAAAPM8/4yql5i6lrqcC2IYXiiNBF5i2M58vFUwmgCLcB/s200/acid.png" width="200" /></a></div>
في هذا المقال سيتم شرح ما هي ال Transaction وانواع ال Isolation Levels الخاصة بها وكيف تؤثر على اداء وسلامة البيانات في قواعد البيانات مع توضيح ما هو ال Lock الذي يحدث ومشكلة ال Deadlock ومستويات العزل الخاصة بال Transactions.</div>
<div dir="rtl" style="text-align: right;">
<br />
<a name='more'></a><br /></div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
ما هو ال Transaction</h2>
</div>
<div dir="rtl" style="text-align: right;">
ال Transaction هو مجموعة من العمل المطلوب تنفيذه داخل قاعدة البيانات .</div>
<div dir="rtl" style="text-align: right;">
وبالطبع يمكنك عمل Transaction واحد وان تكتب بداخله اكثر من Query انظر المثال التالي<br />
<div dir="ltr" style="text-align: left;">
<pre class="brush: sql">BEGIN TRANSACTION;
DECLARE @ProductID INT = 1;
DECLARE @Quantity INT = 5;
INSERT OrderDetail
( ProductID, Quantity )
VALUES ( @ProductID, @Quantity );
UPDATE Product
SET Balance = Balance - @Quantity
WHERE ProductID = @ProductID;
IF @@ERROR = 0 -- لفحص وجود خطأ ام لا
COMMIT;
ELSE
ROLLBACK;
</pre>
</div>
<div dir="rtl" style="text-align: right;">
تعني ان كل ما تم تنفيذه داخل هذا ال Transaction صحيح وليس به مشكلة وبهذا الامر ان تخبر قاعدة البيانات ان تنفذ هذه التعديلات على ال Data Files بحيث اي استعلام في اي Transaction اخر يستطيع رؤية هذه التعديلات.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
Rollback</h2>
</div>
<div dir="rtl" style="text-align: right;">
تعني انك تريد التراجع فيما قمت بتنفيذه وكأنه لم يكن.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
والان قد يطرح في ذهنك سؤال لماذا اقوم بعمل Transaction فبدلا من ذلك اقوم بكتابة الاستعلامات مباشرة؟</div>
<div dir="rtl" style="text-align: right;">
كما ترى من المثال السابق انك تريد تسجيل عملية بيع في جدول الفواتير وفي نفس الوقت تقلل رصيد المنتج في جدول المنتجات فمثلا تخيل ان جدول المنتجات به Check Constraint انه لا يقبل رصيد بالسالب داخل عمود ال Balance وان في نفس الوقت عملية البيع هذه ستؤدي الى بيع كمية اكبر من الرصيد مما سيؤدي الى وجود رصيد سالب,</div>
<div dir="rtl" style="text-align: right;">
في هذه الحالة اذا لم يتم استخدام Transaction سيتم ادخال الفاتورة و التعديل في الرصيد سيعطي خطأ وسيظل كما هو مما يؤدي الى وجود بيانات خاطئة داخل قاعدة البيانات قد تكلف عميلك الكثير من الاموال.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
بينما عند استخدام ال Transaction ستستطيع التحكم في المشكلة السابقة فاذا تمت كل الجمل بدون مشاكل تقوم بتنفيذ الامر Commit وتنتقل البيانات الى ال Data Files اما اذا وجدت خطأ ما تقوم بعمل Rollback فيتم الغاء كافة التعديلات كأنها لم تكن.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
خصائص ال Transaction</h2>
</div>
<div dir="rtl" style="text-align: right;">
لل Transaction اربعة سمات اساسية تختصر في الكلمة التالية ACID</div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
<span class="fontstyle0">Atomic</span> </h2>
</div>
<div dir="rtl" style="text-align: right;">
تعني ان كل ما داخل ال Transaction يتم عمل Commit له او Rollback بالكامل</div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
<span class="fontstyle0">Consistent</span> </h2>
</div>
<div dir="rtl" style="text-align: right;">
تعني انه يحافظ على اتساق المعلومات داخل قاعدة البيانات فمثلا في المثال السابق ال Transaction لم يتخطى ال Constraint الذي يمنع الرصيد السالب<br />
<h2 style="text-align: right;">
<span class="fontstyle0">Durable</span> </h2>
تعني انه بمجرد ان يتم اكتمال ال Transaction كل التعديلات التي حدثت داخله تكون دائمة ومكتوبة داخل قاعدة البيانات.</div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
Isolation</h2>
</div>
<div dir="rtl" style="text-align: right;">
العزل و تعني ان كل ما يحدث داخل ال Transaction يكون في درجة من العزل عن ال Transactions الاخرى</div>
<div dir="rtl" style="text-align: right;">
وخاصية العزل في الحقيقة من اكثر الخواص التي تحتاج الى توضيح لكيفية عملها لان معظم اختياراتك في درجة العزل (Isolation level) تؤثر في سلامة البيانات وايضا في اداء قاعدة البيانات.</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
ولكن ما هي المشاكل التي يحاول العزل تجنبها؟</div>
<div dir="rtl" style="text-align: right;">
في الحقية هم 3 مشاكل رئيسية</div>
<div dir="rtl" style="text-align: right;">
<br />
<ul style="text-align: right;">
<li>Dirty Reads</li>
<li>Non-Repeatable Reads</li>
<li>Phantom Reads</li>
</ul>
</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
Dirty Reads</h2>
</div>
<div dir="rtl" style="text-align: right;">
تعني انه قد يقرأ ال Transaction بيانات تم اضافتها او تعديلها من قبل Transaction اخر ولكن لم يتم عمل Commit له بعد<br />
انظر الشكل التالي<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-jvKRIXbmnSs/WKg4M6HjUDI/AAAAAAAAPMU/fbx_H7pItqgIx8AeNthP-uKb3g4fEx_iwCLcB/s1600/ScreenShot001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-jvKRIXbmnSs/WKg4M6HjUDI/AAAAAAAAPMU/fbx_H7pItqgIx8AeNthP-uKb3g4fEx_iwCLcB/s1600/ScreenShot001.jpg" /></a></div>
<br /></div>
<div dir="rtl" style="text-align: right;">
</div>
<div dir="rtl" style="text-align: right;">
فال Transaction 1 قام بادخل سجل في الجدول وبينما ال Transaction 1 مازال قائم قام ال Transaction 2 بقراءة البيان من نفس الجدول فقرأه بدون اي مشاكل في حين ان ال Transaction 1 قام بعمل تراجع بعد ذلك,<br />
وهذا خطأ كبير يؤدي الى قراءة بيانات غير سليمة Dirty.<br />
<br />
<h2 style="text-align: right;">
Non-Repeatable Reads</h2>
تعني ان يقوم ال Transaction بقراءة بيان ما في البداية مثلا ويقوم ببعض الاجراءات الاخرى وفي ذلك الوقت يقوم Transaction اخر بتعديل هذا البيان وعمل Commit ثم بعد ذلك يقرأ ال Transaction الاول هذا البيان مرة اخرى فيجده بقيم جديدة<br />
انظر الشكل التالي<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-xV89AhJPsU8/WKg6DsUkLkI/AAAAAAAAPMg/5rDiK7kQPPs2dUsYQIlLNUw28tHrmAtUwCLcB/s1600/ScreenShot002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-xV89AhJPsU8/WKg6DsUkLkI/AAAAAAAAPMg/5rDiK7kQPPs2dUsYQIlLNUw28tHrmAtUwCLcB/s1600/ScreenShot002.jpg" /></a></div>
<br /></div>
<div dir="rtl" style="text-align: right;">
<h2 style="text-align: right;">
Phantom Reads</h2>
وتعني انه اذا قام ال Transaction 1 بقراءة كل بيانات جدول ما ثم قام باجراءات اخرى وفي نفس الوقت قام Transaction 2 باضافة بيانات الى هذا الجدول وعمل Commit ثم قام ال Transaction 1 بقراءة البيانات مرة اخرى يجد بيانات الجدول مضاف اليها السجلات الجديدة.<br />
انظر الشكل التالي<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-5K6ZFg2DkQ4/WKg7ChkMNUI/AAAAAAAAPMo/TdsuAPzRGvoPEUV157J57xI-XXSilTl3QCLcB/s1600/ScreenShot003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="220" src="https://2.bp.blogspot.com/-5K6ZFg2DkQ4/WKg7ChkMNUI/AAAAAAAAPMo/TdsuAPzRGvoPEUV157J57xI-XXSilTl3QCLcB/s640/ScreenShot003.jpg" width="640" /></a></div>
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
جميع ما سبق قد يؤدي الى حدوث مشاكل بقراءة بيانات خاطئة لم يتم اضافتها بالفعل وخاصية العزل Isolation المفترض ان تقوم بحل هذه المشاكل ولكن كيف؟<br />
<br /></div>
<div dir="rtl" style="text-align: right;">
لحل المشاكل السابقة يقوم ال SQL Server بعمل درجة من العزل لكل Transaction تسمى Isolation Level وتقسم الى فئتين<br />
فئة متشائمة Pessimistic وفئة متفائلة Optimistic.<br />
<br />
<h2 style="text-align: right;">
الفئة المتشائمة Pessimistic</h2>
هنا يقوم ال SQL Server بتحقيق العزل عن طريق عمل Lock (قفل) على البيانات ولل Lock مستويات عديده فهناك Lock على ال Table او على ال Page او على Range من ال Rows ومستويات اخرى.<br />
وايضا لل Lock انواع عديدة فهناك Lock يحدث عند قراءة البيانات وLock يحدث عند كتباة البيانات و Lock يحدث عند التعديل وانواع اخرى واهم نوعين هما<br />
<h2 style="text-align: right;">
Exclusive Lock</h2>
وهو الذي يحدث عند الكتابة على البيانات ليضمن عدم كتابة اكثر من Transaction على نفس البيانات في نفس اللحظة فبوجود ال Lock سينتظر احد ال Transactions حتى ينتهي الاخر وهكذا<br />
<h2 style="text-align: right;">
Shared Lock</h2>
وهو ال Lock الذي يحدث عند قراءة البيانات.<br />
<br />
في حالة حدوث Exclusive Lock لا يسمح ال SQL Server بعمل اي نوع Lock اخر على البيانات سواء Shared Lock او غيره.<br />
وفي نفس الوقت لا يمكن عمل Exclusive Lock الا على بيان لا يوجد عليه اي نوع Lock.<br />
<br />
والان هيا لنعرف انواع ال Isolation Levels المتشائمة وعلاقتها بال Lock<br />
<br />
<h2 style="text-align: right;">
1 - Read UnCommitted</h2>
في هذا النوع <b>لا يقوم</b> ال SQL Server بعمل اي نوع من ال Lock عند قراءة البيانات ويقوم فقط بعمل Lock عند الكتابة على البيانات فتخيل معي السيناريو التالي<br />
قمت بفتح Transaction ثم قمت باضافة و تعديل بعض البيانات ولم يتم عمل Commit بعد (في هذه الحالة سيوجد Exclusive Lock على البيانات)<br />
قام Transaction اخر بقراءة البيانات من الجدول الذي قمت بالتعديل فيه ولكنه ايضا لا يقوم بعمل Shared Lock , اذا سيقرأ البيانات التي لم يتم عمل Commit لها<br />
وهذه هي بالضبط مشكلة ال Dirty Reads<br />
اذا في هذا المستوى من العزل تتحقق الثلاث مشاكل الرئيسية التي من المفترض ان يحلها ال Transactions وهي<br />
<div dir="rtl" style="text-align: right;">
Dirty Reads</div>
<div dir="rtl" style="text-align: right;">
Non-Repeatable Reads</div>
<div dir="rtl" style="text-align: right;">
Phantom Reads<br />
<br />
<h2 style="text-align: right;">
2 - Read Committed</h2>
في هذا النوع يقوم ال SQL Server بعمل Lock على الكتابة و Shared Lock عند القراءة (جمل ال Select) ولكن يقوم بالغاء ال Lock بمجرد انتهاء جملة ال Select وليس عند نهاية ال Transaction<br />
وبالتالي تم حل مشكلة ال Dirty Reads و لكن مازالت مشكلة ال Non-Repeatable Reads و Phantom Reads تحدث<br />
وهذا النوع هو النوع الافتراضي لقاعدة البيانات.<br />
<br />
<h2 style="text-align: right;">
3 - Repeatable Reads</h2>
في هذا النوع يقوم ال SQL Server بعمل Lock على الكتابة و Shared Lock عند القراءة حتى نهاية ال Transaction.<br />
وبالتالي تم حل مشكلة ال Dirty Reads و Non-Repeatable Reads و لكن مازالت مشكلة ال Phantom Reads تحدث.<br />
<br />
<h2 style="text-align: right;">
4 - Serializable</h2>
في هذا النوع يقوم ال SQL Server بعمل Lock على الكتابة و Shared Lock عند القراءة حتى نهاية ال Transaction وهذا الLock يكون من مستوى Key Range اي انه يمنع ايضا اضافة اي Rows على مستوى ال Table.<br />
في هذا النوع لا يحدث اي مشكلة من الثلاث مشاكل الخاصة بال Transaction<br />
<br />
قد يتوارد الى ذهنك بعد قراءة ما سبق انك تختار النوع Serializable دائما وبذلك تكون بياناتك في امان تام ولكن للاسف هذا خطأ فالاختيار ليس بهذه السهولة حيث كلما زاد ال Lock تم حل المشاكل الثلاث ولكن سيؤدي الى بطيء في اداء قاعدة البيانات حيث كل استعلام ينتظر حتى يتم فتح ال Lock المعمول من قبل Transaction أخر وكلما كثر عدد المستخدمين كلما زادت المشاكل وايضا يوجد مشكلة اخرى تسمى Dead Lock تحدث بشدة في ال Serializable و اقل قليلا في Repeatable Reads واقل في Read Committed واليك توضيح هذه المشكلة.<br />
<h2 style="text-align: right;">
Deadlock</h2>
تخيل ان لديك Table 1 و Table 2<br />
ال Transaction 1 يقرا من Table 1 ويكتب في Table 2<br />
ال Transaction 2 يقرأ من Table 2 ويكتب في Table 1<br />
<br />
بدأ ال Transaction 1 اولا وقام بالقراءة من Table 1 وعمل Lock عليه<br />
في هذه اللحظة بدأ Transaction 2 وقرأ من Table 2 وعمل Lock عليه<br />
<br />
الان Transaction 1 ينتظر الى ان يتم فتح ال Lock على Table 2 الذي عمله Transaction 2<br />
و Transaction 2 ينتظر الى ان يتم فتح ال Lock على Table 1 الذي عمله Transaction 1<br />
<br />
وبالتالي سوف ينتظرون للابد وهذه هي مشكلة ال Deadlock<br />
ولكن يقوم ال SQL Server باختيار احدهم وانهائه ويسمى Deadlock Victim وهذا حتى لا تتعطل قاعدة البيانات الى الابد ولكن من يتم اختياره؟<br />
ممكن عند فتح Transaction اعطائه اولوية فاذا وجد ال SQL Server اولوية يختار الاكبر اما اذا لم يجد يختار ال Transaction الاقل كلفة.<br />
<br />
<h2 style="text-align: right;">
الفئة المتفائلة Optimistic</h2>
هنا يتم تحقيق العزل عن طريق عمل نسخ للسجلات Row Version بدلا من عمل Lock<br />
حيث عن التعديل او الكتابة في اي سجل يتم عمل نسخة منه في ال TempDB وبالتلي لا يتم عمل Lock له حتى نهاية ال Transaction وهناك احد مستويان<br />
<br />
<h2 style="text-align: right;">
1 - Read Committed Snapshot</h2>
وهو بالضبط مثل ال Read Committed العادي في الكتابة حيث يقوم بعمل Lock<br />
وعند القراءة بدلا من عمل Shared Lock يقرأ من اخر Version للسجل من ال TempDB في وقت جملة الاستعلام وبذلك يعالج مشكلة الDirty Reads<br />
ويحدث به مشكلة Non-Repeatable Reads و Phantom Reads الا انه يقل فيه ال Deadlock لانه لا يعمل Lock عند القراءة.<br />
<br />
<h2 style="text-align: right;">
2 - Snapshot Isolation Level </h2>
في هذا المستوى لا يقوم بعمل Lock في الكتابة او القراءة ولكنه يعتمد كليا على ال Version وعند قراءة اي بيانات داخل ال Transaction يقوم بقراءة قيمتها في لحظة بداية ال Transaction من ال Versions وبذلك يقوم بحل جميع المشاكل الخاصة بال Transaction كما ان يقلل بشكل كبير مشكلة ال Deadlock لانه يعتمد بشكل كلي على ال Row Version وليس ال Lock.<br />
<br />
ولكن مشكلة هذان المستويان هي ميزتهما في نفس الوقت حيث انهما يعتمدا على ال Row Version وبالتالي كل شيء يتم كتابته في ال TEMPDB وبالتالي ستحدث عمليات IO كتابة وقراءة كثيرة جدا.<br />
<br />
كيفية تحديد ال Isolation Level<br />
يتم تحديد ال Level قبل بداية ال Transaction انظر المثال التالي<br />
<div dir="ltr" style="text-align: left;">
<pre class="brush: sql">SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRANSACTION;
GO
SELECT *
FROM HumanResources.EmployeePayHistory;
GO
SELECT *
FROM HumanResources.Department;
GO
COMMIT TRANSACTION;
GO
</pre>
</div>
<div style="text-align: right;">
ولكن يجب ملاحظة التالي</div>
<div style="text-align: right;">
- الاختيارات المتاحة لل Isolation Level هي</div>
<br />
<ul style="text-align: right;">
<li>READ UNCOMMITTED </li>
<li>READ COMMITTED </li>
<li>REPEATABLE READ </li>
<li>SNAPSHOT </li>
<li>SERIALIZABLE </li>
</ul>
<br />
- قاعدة البيانات الافتراضي لها اذا لم تقم بتحديد ال Isolation Level هو Read Committed.<br />
- لتفعيل ال Read Committed Snapshot لابد من فتح الخاصية داخل قاعدة البيانات بالامر التالي<br />
<div dir="ltr" style="text-align: left;">
<pre class="brush: sql">ALTER DATABASE [DBNAME] SET READ_COMMITTED_SNAPSHOT ON;
</pre>
</div>
<div style="text-align: right;">
<span style="background-color: white;">وبذلك اي Isolation level من نوع </span>Read Committed سيتحول الى Read Committed Snapshot .</div>
<div style="text-align: right;">
<br /></div>
<div style="text-align: right;">
- لتفعيل امكانية اختيار المستوى SNAPSHOT لابد من فتحه في قاعدة البيانات بالامر التالي</div>
<div dir="ltr" style="text-align: left;">
<pre class="brush: sql">ALTER DATABASE [DBNAME] SET ALLOW_SNAPSHOT_ISOLATION ON;
</pre>
</div>
<h2 dir="rtl" style="text-align: right;">
مراجع </h2>
<br />
<div dir="rtl" style="text-align: right;">
</div>
<br />
<div dir="rtl" style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: right; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div style="margin: 0px;">
<a href="https://www.simple-talk.com/books/sql-books/sql-server-execution-plans,-second-edition,-by-grant-fritchey/" style="background-color: white; font-family: Verdana, Geneva, sans-serif; font-size: 13.2px; text-decoration: none;"><span style="color: black;">SQL Server Execution Plans, Second Edition, by Grant Fritchey</span></a></div>
</div>
</div>
</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
==============<br />
تم بحمد الله</div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<div dir="rtl" style="text-align: right;">
<br /></div>
<br />
<div dir="rtl" style="text-align: right;">
</div>
<br />
<div dir="rtl" style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: right; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div style="margin: 0px;">
<br /></div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
SyntaxHighlighter.highlight();
</script>Mohamed Galalhttp://www.blogger.com/profile/08222362076960873455noreply@blogger.com3