لوحة التحكم
الصفحة الرئيسية
admin's Blog
الوصف:

12 Oct, 2008
يتم نشر هذه المقالات المترجمة بالاتفاق والتعاون مع موقع Gerry McGovern By Gerry McGovern الكلمات هي اللبنات الأساسية لبناء كل موقع. وبالتالي فإن الكلمات هي لبنات بناء الحضارة الحديثة. في الآونة الأخيرة اُتهم باراك اوباما ،مرشح الرئاسة الأمريكية، بأنه يتحدث كثيرا بدون اي إجراءات واضحة، اي انه يجري الكثير من الكلام والقليل من المضمون. فأجاب : “لا تقولوا لي [...]

Read Full Article

12 Oct, 2008
يتم نشر هذه المقالات المترجمة بالاتفاق والتعاون مع موقع Gerry McGovern By Gerry McGovern طريقة الإعلان التقليدية أصبحت غير مجدية لأنها تستهلك الوقت في زمن أصبح فيه الوقت هو اثمن المصادر وأغلاها. الإعلانات التقليدية تعمل بشكل جيد في البيئة التي تعاني من ضعف في الاقتصاد ووفرة بالوقت. لكنها تعمل بكفاءة اقل في البيئة الغنية التي تعاني قلة في [...]

Read Full Article

12 Oct, 2008
قبل قليل قمت بتنزيل وتشغيل متصفح جوجل الجديد (جوجل كروم) Google Chrome ، والذي يعتبر أحدث ضربات جوجل وأول دخول لها عالم المتصفحات ، بعد أن كان هذا المجال حكرا على متصفح مايكروسوفت (الإكسبلورر) ومتصفح فاير فوكس . مع الأخذ بعين الاعتبار أن متصفح فاير فوكس بدأ يجذب شريحة كبيرة إليه في الفترة الأخيرة وزادت [...]

Read Full Article

09 Aug, 2008

  

السلام عليكم ورحمة الله وبركاته ...

 وقعت بالصدفة قبل فترة على موقع VistaDB و الحقيقة فوجئت لما وجدت داخله ...

أولاً: ما هو VistaDB ؟

VistaDB هي قاعدة بيانات SQL ... مصممة خصيصاً لمطوري بيئة الدوت نت NET. تعمل على الـ Microsoft .NET Framework و على Compact Framework الخاصة بالأجهزة الكفية و على Mono على لينكس.

 

 

ثانياًُ: ماذا يميز VistaDB ؟

طبعاً من تعريف VistaDB السابق، نجد انها لم تقدم شيء جديد!! و لكن VistaDB هي قاعدة بيانات خفيفة جداً صغيرة الحجم (أقل من 1 ميقا). و هي ملف DLL واحد فقط. أي ان محرك قواعد البيانات ليس EXE و لكنه ملف DLL واحد فقط تستطيع إدراجه في مشروعك و هو كما قلت أقل من وحد ميقا.

و ما يميز VistaDB أيضاً هو ان قواعد البيانات الخاصة بها هي أيضاً ملف واحد و لا يوجد Log file و Data file و لكن يوجد ملف واحد امتداده VDB3. و تستطيع عمل نسخة إحتياطية لقاعدة بيانات بأمر XCopy أو نسخ الملف الموجود فقط و تستطيع استرجاع قاعدة البيانات بلصق الملف فقط.

VistaDB تستطيع تحمل حجم 4 تيرابايت لكل قاعدة بيانات. و 65,535 جدول لكل قاعدة بيانات و 65,535 عمود لكل جدول و 65,535 Index لكل جدول أيضاً.

تدعم VistaDB النسخة الثالثة SQL-99 و لمزيد من المعلومات عن ذلك يمكنك زيارة الموقع هنا.

كما أن VistaDB تدعم Unicode و ذلك لكتابة باللغة العربية على سبيل المثال.

تستطيع التعامل مع VistaDB عن طريق T-SQL بنفس الطريقة مع MS SQL Server 2005 و تستطيع استخدام CLR باستخدام السي# أو VB.net.

يوجد منها نسخة Exress مجانية و لمزيد من المعلومات عنها تفضل هنا.

كما أن VistaDB مطورة بالكامل باستخدام #C.

و توجد عدد من الأدوات للتطوير باستخدام VistaDB مثل Data Migration Wizard و ذلك لنقل بياناتك من MS Access أو MS SQL Server إلى VistaDB .

كما يوجد Data Builder و التي تعطيك شاشات للتعامل مع قواعد بيانات داخل VistaDB حيث تستطيع إنشاء أو تعديل او حذف جدول كما تستطيع انشاء indexes, triggers, constraints, columns. و تسطيع عمل database encryption من خلالها.

كما انه لا يوجد حد لعدد CPU أو RAM الذي يدعمها.

 

ثالثاً: كيف تعمل VistaDB ؟

كما قلت سابقاً، محرك قواعد بيانات VistaDB هو ملف DLL واحد فقط، و قاعدة البيانات هي عبارة عن ملف VDB3 واحد. و باستخدام اداة مثل ILMerge تستطيع ان تضمن ملف DLL داخل ملف EXE الخاص ببرنامج.

و الشكل أدناه يبين آلية عمل VistaDB و  البرنامج الذي تبنيه. كما يبين الشكل ان VistaDB ستكون جزءً من البرنامج أو الموقع الذي تبنيه.

 

 

 

و عند ذلك لا داعي أن نحمل محرك قواعد البيانات مثلاً MS SQL Server 2005 في جهاز العميل الذي يستخدم الموقع أو البرنامج. كما أنه عند البحث عن مستضيف موقعك الشخصي لن تقلق إذا كان يدعم MS SQL Server أم لا فكل ما تحتاجه هو NET. فقط لكي تعمل VistaDB .

 

اتمنى أن يكون طرحي مفيداً و موفقاً و سوف اختبر المنتج و أبدي لكم رأيي فيه متى ما سمحت الفرصة.

 

 ولمزيد من المعلومات يمكنكم زيارة الموقع الرسمي http://www.vistadb.net/

 

مع تحياتي ,,, طلال الحضبي.

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

السلام عليكم ورحمة الله وبركاته ...

أخواني أقدم لكم اليوم برنامج (الموسوعة القرآنية)  للجوال بالرسم العثماني + بحث + تفسير الطبري  و تفسير المنتخب ( لعلماء الأزهر ) + أسـباب النزول (للنيسابوري) +  تلاوة.خاص لنوكيا الجيل الثالث ( مثل N95 , N73 , N82 , N81 .......إلخ )

 

مزايا البرنامج:

- النص الكامل للقرآن الكريم و بالرسم العثماني الكامل

- تغيير لون خلفية الشاشة بالضغط على رقم 4  او  رقم 5 لتغيير لون الحركات اما اسود او احمر

-بضغط على الزر الايسر العلوي في الجوال ننتقل الى التفسير

- ويمكنك الانتقال الى التفسير الاخر  بضغط على الزر الايسر العلوي اثناء تواجدك في صفحة التفسير كما في الصوره التاليه

 

-كما يمكنك البحث في القرآن بجذر الكلمة

 

تحميل البرنامج
عند تحميل البرنامج تجد اربع ملفات
ثبت البرنامج الرئيسي  ( القرآن )  ( على ذاكرة الهاتف )
ثم ثبت باقي الملفات  لايهم الترتيب ( على ذاكرة البطاقة)

 

ملاحظه مهمه :
عن التثبيت بيطلع لك رساله تقول ان الشهاده منتهية

لتخطي الرساله  رجع تاريخ جوالك لعام 2007 وبعد ماتخلص مثبت البرنامج رجع التاريخ الى وضعه الاول
طريقة ترجيع التاريخ
الأدوات ثم  الضبط  ثم  عام ثم التاريخ و الوقت

تثبيت البرنامج من هنا

almwsw3h.zip (1.88 mb)

 

مع تحياتي ... طلال.

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

 

السلام عليكم ورحمة الله وبركاته ...

كما هو في العنوان، نريد ان نبح عن جملة "String" في جدول معين، و لكن المشكلة هي أننا نريد البحث في جميع حقول هذا الجدول و ليس في حقل واحد ... لكي نجعل البحث عام بشكل أكبر ...

الحل هو استخدام الكود التالي، و هو ينشئ Stored Procedure داخل قاعدة البيانات Master باسم sp_FindStringInTable و تقوم هذه الدالة بالبحث عن جمله داخل جدول...

الدالة sp_FindStringInTable تأخذ ثلاثة متغيرات للبحث ... هي:

stringToFind و هي الجملة المراد البحث عنها ...

schema و هي الschema المراد البحث داخلها ...

table و هو الجدول المراد البحث داخله ...

سنقوم كما قلت بانشاء هذه الدالة داخل قاعدة البيانات Master لكي يمكن استخدامها في اي قاعدة بيانات تكون موجودة لديك ...

USE master
GO

CREATE PROCEDURE sp_FindStringInTable @stringToFind VARCHAR(100), @schema sysname, @table sysname
AS

DECLARE @sqlCommand VARCHAR(8000)
DECLARE @where VARCHAR(8000)
DECLARE @columnName sysname
DECLARE @cursor VARCHAR(8000)

BEGIN TRY
   SET @sqlCommand = 'SELECT * FROM ' + @schema + '.' + @table + ' WHERE'
   SET @where = ''

   SET @cursor = 'DECLARE col_cursor CURSOR FOR SELECT COLUMN_NAME
   FROM ' + DB_NAME() + '.INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_SCHEMA = ''' + @schema + '''
   AND TABLE_NAME = ''' + @table + '''
   AND DATA_TYPE IN (''char'',''nchar'',''ntext'',''nvarchar'',''text'',''varchar'')'

   EXEC (@cursor)

   OPEN col_cursor  
   FETCH NEXT FROM col_cursor INTO @columnName  

   WHILE @@FETCH_STATUS = 0  
   BEGIN  
       IF @where <> ''
           SET @where = @where + ' OR'

       SET @where = @where + ' ' + @columnName + ' LIKE ''' + @stringToFind + ''''
       FETCH NEXT FROM col_cursor INTO @columnName  
   END  

   CLOSE col_cursor  
   DEALLOCATE col_cursor

   SET @sqlCommand = @sqlCommand + @where
   --PRINT @sqlCommand
   EXEC (@sqlCommand)
END TRY
BEGIN CATCH
   PRINT 'There was an error'
   IF CURSOR_STATUS('variable', 'col_cursor') <> -3
   BEGIN
       CLOSE col_cursor  
       DEALLOCATE col_cursor
   END
END CATCH

الآن هذا الكو قام بانشاء الدالة sp_FindStringInTable .

و لكي نستخدمها من الممك ان نستخدم هذا الكود:

USE AdventureWorks
GO
EXEC sp_FindStringInTable '%land%', 'Person', 'Contact'

و لاحظ أننا استخدمنا علامة % و من الممكن أن نستخدم * أيضاً لتحديد البحث بشكل أكبر ...

 

أتمنىأن تكون هذه الدالة مفيدة ...

نصيحة شخصية: لا تستخدم هذا الأسلوب في البحث إلا في الضرورة القصوى، حاول أن تستخدم بحث محدد في حقول و جداول محددة و ذلك لرفع كفائة الإستعلام Query الذي تكتبه.

إن كنت تريد البحث باللغة العربية استبدل varchar بـ nvarchar.

 

طلال الحضبي.

المصدر: MSSQLTips.com

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

السلام عليكم ورحمة الله وبركاته ...

 اليوم سوف اتكلم عن مفهوم Membership و Role Management في بيئة ASP.NET...

كثير من الأحيان نحتاج في برامجنا إلى تحديد مستخدمين للنظام(Members)، و هاؤلاء المستخدمين سوف تكون لهم مجموعة من المهام (Roles) و كل مجموعة منهم سوف تكون لهم خصائص و صلاحيات معينة.

على سبيل المثال، يوجد لدينا نظام إدارة مكتب عقاري، سوف تكون هناك صفحات للمستخدم العادي لكي يبحث عن العروض و تفاصيلها و سوف تكون هناك صفحات أيضاً لمسؤول النظام لكي يعمل على إدارة النظام من خلاله "إضافة عروض" على سبيل المثال.

لابد أن نتأكد في برنامجنا من أن المستخدم العادي للنظام لا يستطيع الوصول إلى صفحات إدارة النظام.

هناك طريقتين لعمل ذلك: الأولى هي أن نقوم بهذه المهمة برمجياً و هي معرضه للأخطاء طبعاً. و الأخرى هي استخدام   ASP.NET Membership &  Roles.

في سبيل استخدام هذه الخصائص لابد لك من وسيلة تخزن فيها اسماء المستخدمين و معلوماتهم، و بالتأكيد سوف نستخدم MS SLQ Server.

في البداية، دعونا نقوم بانشاء قاعدة بيانات باسم MyNewDB "طبعاً لابد من استخدام اسم افضل، و انا استخدمت هذه الاسم لدواعي العرض فقط" كما في الصورة:

الآن لدينا قاعدة بيانات فارغة و نريد من ASP.NET بملئ هذه القاعدة بالجداول المطلوبه، و ذلك عن طريق الأداة aspnet_regsql تستطيع الوصول إليها عن طريق:

 Start ثم All programs  ثم  Microsoft Visual Studio 2005 ثم Visual Studio Tools ثم Visual Studio 2005 Command Prompt. كما في الصورة:

اضغط على الصورة لتكبيرها

 

الان سوف تفتح نافذة اكتب فيها aspnet_regsql كما في الصورة:

اضغط على الصورة لتكبيرها

 

الآن سوف تفتح إداة تكون الجداول كما في الصورة:

اضغط على الصورة لتكبيرها

 

اضغط next ثم اختر الخيار الأول للإضافة كما في الصورة:

اضغط على الصورة لتكبيرها

 

و بعد ذلك اضغط على next ثم ثم باختيار اسم سيرفر قواعد البيانات "إذا كانت قواعد البيانات في نفس الجهاز اكتب localhost" و اختر اسم قاعدة البيانات الفارغة التي قمنا بانشائها كما في الصورة:

اضغط على الصورة لتكبيرها

 

و هنا انا استخدمت توثيق  Windows و بالامكان استخدام توثيق SQL إذا رغبت.

بعد ذلك اضغط على next و في النافذة الأخيرة اضغط على Finish كما في الصورة:

اضغط على الصورة لتكبيرها

 

الآن لو تفحصت قاعدة البينات التي انشئتها سوف تجد جداول Tables و View و Stored Procedures قد تم انشائها و كل ذلك للتعامل مع Roles و الـ Members في ASP.NET. كما في الصورة:

 

اضغط على الصورة لتكبيرها

 

في التدوينة القادمة إن شاء الله سوف أتكلم عن استخدام تعريف الـ Roles و Memebership في ASP.NET.

 

بالتوفيق...

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

بسم الله الرحمن الرحيم ...

السلام عليكم ورحمة الله وبركاته ...

 تطرقنا في الدوينة الماضية إلى الدرس الأول: إنشاء قاعدة بيانات Membership و Role في ASP.NET و اليوم سوف نتطرق إن شاء الله إلى كيفية تعريف الـ Roles و Members في ASP.NET.

في البداية يفترض أنك قمت بانشاء قاعدة البيانات التي سوف نستخدمها كما فعلنا في الدرس السابق الدرس الأول: إنشاء قاعدة بيانات Membership و Role في ASP.NET.

الآن افتح الفجول ستديو 2005 أو 2008 أيهما تشاء ... أنا سوف استخدم النسخة 2005.

الآن انشئ موقع ويب جديد كما في الصورة:

 

اختر اسم الموقع و لغة البرمجة التي سوف تستخدمها، أنا سوف اختار اسم "MyMembershipSite" و سوف اختار لغة سي# في هذا الدرس كما في الصورة:

 

اضغط على الصورة لتكبيرها

 

ثم اضغط على OK ثم اختر View ثم Solution Explorer إذا لم يكن ظاهراً لديك.

بعد ذلك، بزر الفأرة الأيمن اضغط على الـ Solution ثم Add New Item كما في الصورة:

 

ثم من النافذة اختر Web Configration File ثم Add و لا تغير شيء كما في الصورة:

 

اضغط على الصورة لتكبيرها

 

الآن نحتاج أن نضيف ConnectionString إلى قاعدة البيانات التي انشئناها في الدرس الأول.

نضيف الكود التالي داخل Web.Config:

<add name="MyNewDBConnectionString" connectionString="Data Source=[Server];Initial Catalog=MyNewDB;Integrated Security=True" />

و استبدل [server] باسم الجهاز الذي يوجد فيه قاعدة البيانات. و هذا الكود يخبر ASP.NET بأن قاعدة بياناتنا موجودة في الجهاز [server] و سوف نستخدم قاعدة البيانات التي اسمها MyNewDB و سوف نستخدم توثيق وندوز.

و بعد ذلك في System.Web اكتب الكود التالي:

<membership defaultProvider="CustomizedProvider">
    <providers>
 <add name="CustomizedProvider"
       type="System.Web.Security.SqlMembershipProvider"
      connectionStringName="MyNewDBConnectionString"
      applicationName="MyMembershipSite"
      minRequiredPasswordLength="5"
      minRequiredNonalphanumericCharacters="0" />
    </providers>
</membership>


<roleManager enabled="true" defaultProvider="CustomizedRoleProvider">
        <providers>
          <add name="CustomizedRoleProvider"
               type="System.Web.Security.SqlRoleProvider"
               connectionStringName="MyNewDBConnectionString" />
        </providers>
</roleManager>

و هذا الكود يخبر ASP.NET بأننا سوف نستخدم مزود للـ Membership و الذي هو SqlMembership (اي يخزن و يقرأ من SQL) و أخبرناه عن طريق الـ ConnectionString بمكان قاعدة البيانات.  و كذلك الحال بالنسة للـ RoleManager.

و لاحظ أننا كتبنا اسم التطبيق و هذا مهم للغاية لكي لا يحدث لك مشاكل أثناء نشر Deploy الموقع. و لاحظ اننا حددنا بعض القيود و الشروط على كلمة السر، فجعلنا أنه لابد لمستخدمي النظام من استخدام كلمة سر بطول خمسة حروف على الأقل و من الممكن أن تغيرها إلى ما تشاء.

الآن شكل Web.config كالتالي:

 و من الممكن تحميل ملف Web.Config من الرابط في الاسفل و ذلك للتأكد من الخصائص لديك ...

Web.config (2.53 kb)

 

بعد ذلك اضغط على رز ASP.NET Configration كما هو موجود في المربع الاحمر في الصورة أدناه أو اذهب إلى WebSite ثم ASP.NET Configration .

الآن سوف تفتح لك نافذة Internet Explorer مثل هذه:

 

اضغط على الصورة لتكبيرها

 

الآن اذهب إلى الTab العلوي Security كما في الصورة:

 

الآن التوثيق المستخدم في النظام (و ليس قاعدة البيانات) هو وندوز، و نريد ان نغيره إلى Form و يمكننا ذلك عن طريق تعديل Web.Config مباشرة أو الذهاب إلى Select Authentication Type كما في الصورة:

 

ثم اختر الاختيار الأول From the Internet كما في الصورة:

و عندما يتم التغيير و عندما تذهب إلى ملف Web.Config سوف تجد رسالة تشبه هذه:

 

اضغط على الصورة لتكبيرها

 

و هي تفيد بأنه تم تغيير في ملف web.config، ببساطة اضغط على Yes to All. و هذا لأن ASP.NET Web Admin Tool قام بعمل تغيير على web.config عندما غيرنا توثيق ASP.NET إلى Form بدلاً من Windows.

 

و الآن من المفترض أن يكون الشكل كالتالي:

 

اضغط على الصورة لتكبيرها

 

ثم بعد ذلك لنقوم بإنشاء عدد 2 Role و احدة للـ Admin و الأخرى Users. و ذلك عن طريق الضغط على Create or Manage Roles.

ثم ادخل اسم Role و اضغط على Add كما في الصورة:

و بنفس الطريقة اضف Role اخرى باسم UserRole.

و الآن لدينا 2 Role و 0 User.

و على سبيل التجربة اضف عدد 3 مستخدمين عن طريق الرابط Create User. و اجعل واحد باسم Admin في AdminRole و الآخر User في الـ UserRole و الثالث AnyUser و لا تجعله ضمن أي Role كما في الصورة:

اضغط على الصورة لتكبيرها

 

و بعد اضافة الثلاثة مستخدمين سيكون الشكل كالتالي:

 

و في النهاية لو ذهبت إلى قاعدة البيانات عن طريق الـ MS Sql Server Managment Studio  و ذهب إلى قاعدة البيانات MyNewDB و ذهبت إلى الجدول aspnet_Users على سبيل المثال سوف تجد المستخدمين اللذين أضفتهم و كذلك الجدول aspnet_Roles.

 

في الدرس القادم سوف ندخل بشكل أعمق في ASP.NET و استخدام الـ Login Controls و سوف نرى أيضاً كيف يمكننا تحديد صلاحيات على مستوى الصفحة و على مستوى المجلد أيضاً.

 

مع تحياتي ... طلال الحضبي.

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

السلام عليكم ورحمة الله وبركاته ...

 

في بعض الأحيان تحدث مشكلة في تقرير معين في MS SQL Reporting Services، و لكن عرض التقرير بالطبع سيكون خارج السيرفر الذي يستضيف التقرير. لذلك إن كان هناك خطأ ما لن نتمكن من عرضه بسبب أن التقرير يعرض عن بعد Remotly.

و لتفعيل إظهار الأخطاء عن بعد يمكن اتباع الطريقة التالية:

افتح برنامج الـ Notepad و اكتب السكريبت التالي:

Public Sub Main()
  Dim P As New [Property]()
  P.Name = "EnableRemoteErrors"
  P.Value = True
  Dim Properties(0) As [Property]
  Properties(0) = P
  Try
    rs.SetSystemProperties(Properties)
    Console.WriteLine("Remote errors enabled.")
  Catch SE As SoapException
    Console.WriteLine(SE.Detail.OuterXml)
  End Try
End Sub

و احفظ الملف بالامتداد rss باسم EnableRemoteErrors.rss على سبيل المثال.

اذهب إلى Start ثم Run ثم اكتب cmd و سوف يظهر لك محرر الأوامر Console اذهب إلى مكان الملف الذي انشأته.

و الآن اكتب الأمر

rs -i EnableRemoteErrors.rss -s http://servername/ReportServer 

و استبدل servername باسم السيرفر الذي يستضيف التقرير و استبدل ReportServer بالـ Virtual Path الخاص بالتقارير.

 

طبعاً في النهاية عدل الكود أعلاه و استبدل P.Value = True بـ P.Value = False

لأنك لا تريد أن تدع الـ RemoteError ظاهرة للجميع كإحتياط أمني Cool

 

مع تحياتي ... طلال الحضبي.

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

SQL Execution Plan

السلام عليكم ورحمة الله وبركاته ...

ما يميز لغة SQL عن لغات البرمجة الإعتيادية هو أن لغات البرمجة الإعتيادية مثل C, C#, Java, VB.net هو انه لابد للمبرمج أن يخبر البرنامج عن طريق الكود كيف سيعمل البرنامج!
فمثلاً لو كان لدينا ملف يوجد به بيانات و أردنا أن نبحث داخل هذه البيانات لابد من أخبار لغة البرمجة ما الذي يجب عمله بالتحديد، أي كتابة خوارزمية خطوة بخطوة لتنفيذ البحث و لن يتخذ البرنامج قراراً بدون أن برمجه ليتخذ هذا القرار.
و لكن في SQL لو أردنا البحث داخل جدول كل ما علينا عمله هو كتابة Select...From...Where و محرك قواعد البيانات سواء كان Oracle أو SQL Server سيتولى مهمة كيفية البحث بالتحديد عن المبرمج. أي أننا سنقول له "ابحث" و قاعدة البينات ستتولى طريقة البحث بما تراه مناسباً.

و لكي يقوم محرك قواعد البيانات بالبحث، توجد هناك عدة خطوات تدور خلف الكواليس لهذه الآلية، و الهدف من هذه الآليات هو أن تقدم لك البيانات بأسرع و أفضل طريقة ممكنة.

ملاحظة: يستطيع محرك قواعد البيانات البحث بعدة طرق، و لكن توجد طرق أفضل غيرها للبحث و سيحرص محرك قواعد البيانات أن يعطيك أفضل نتيجة ممكنة.

و هذه الخطوات تتم عند إرسال أي استعلام Query لمحرك قواعد البيانات مراراً و تكراراً.

و يمكن تقسيم هذه الخطوات إلى خطوتين أسايتين هما:
1. خطوات تتم في المحرك العلائقي Relational Engine.
2. حطوات تتم في محرك التخزين Storage Engine.

في المحرك العلائقي، يتم تحليل Parse جملة الإستعلام Query ثم تمرر إلى محسن الاستعلام Query Optimizer و الذي يقوم بتوليد خطة التنفيذ Execution Plan الخاصة الجملة.
ثم يتم تمرير "خطة التنفيذ Execution Plan" إلى محرك التخزين Storage Engine على هيئة 0 و 1 (Binary Format). عند ذلك يقوم محرك التخزين Storage Engine باستخدام هذه الخطة للوصول إلى البيانات الأصلية أو تحديثها. و داخل محرك التخزين Storage Engine توجد العمليات مثل قفل الصف Row Lock و استخدام Index و ما إلى ذلك.

تحليل الاستعلام Query Optimizer:
عند ارسال جملة الاستعلام، فأول خطوة سوف تتم هي ارسالها إلى محلل الإستعلام، و يتم التأكد من صحة طريقة كتابة الجملة. و محلل الاستعلام يستقبل جملة الإستعلام كمدخل Input و سيولد شجرة التحليل Parser Tree كمخرج Output. و هذه الشجرة تمثل الخطوات المنطقية Logical Steps لكي يتم تنفيذ جملة الاستعلام.
بعد ذلك ترسل شجرة التحليل إلى عملية الجبرية Algebra Procces و التي تقوم بدورها بتوصيل Resolve جميع اسماء الجداول و الحقول إلى الاسماء المكتوبة في جملة الاستعلام. كما يقوم هذا المحرك "Algebra Procces" بتأكد من أنواع الحقول المكتوبة في الجملة بالتي توجد في جدول الأصلي مثل Int, Varchar و ما إلى ذلك.
و العملية الجبرية مهمة للغاية حيث أننا في جملة الاستعلام من الممكن ان نستخدم aliases و synonyms و التي لا توجد في قاعدة البيانات، كما أنه من الممكن أن توجد اسماء غير موجودة أصلاً في قاعدة البيانات و هي ليست aliases  أو synonyms.
و عند الانتهاء من العملية الجبرية Algebra Procces يتم اخراج شجرة Query Processor tree و التي تمرر إلى محسن الاستعلام Query Optimizer.

محسن الاستعلام Query Optimizer:
محسن الاستعلام هو عبارة عن برنامج موجود داخل محرك قواعد البيانات و الذي يقوم بإخبار محرك قواعد البيانات بكيفية العمل.
و باستخدام شجرة Query Processor tree و التي تم اصدارها من قبل محلل الاستعلام و باستخدام بعض الإحصائيات statistics التي يقوم محرك قواعد البيانات بجمعها، يتم اصدار خطة التنفيذ التي يرى محرك قواعد البينات أنها الأنسب.
يقوم محسن الاستعلام بتحديد إمكانية الوصول إلى البيانات عن طريق Inedx؟ ماهو نوع الـ Jion الذي سيستخدم؟ و يتم تحديد هذه الأمور بناء على تحديد كلفة Cost خطة العمل execution Plan التي سيتم اصدارها و التي تعتمد على حجم استخدام المعالج CPU و على كلفة القراءة و الوصول إلى المعلومات I/O و كم هي سرعة الوصول.
سيقوم محسن الاستعلام باصدار عدة خطط تنفيذ، و بعد ذلك سيقوم بالمقارنة بينها بناء على المعطيات أعلاه، و سيتم اختيار أقل هذه الخطط كلفة على محرك قواعد البيانات و الذي يستخدم الموارد بأقل قدر ممكن. (الموارد: CPU, I/O).
و في بعض الأحيان سوف يختار المحرك أي خطة إذا اعتقد أن المقارنة فيما بينها سوف تأخذ وقت أكبر من وقت المقارنة فيما بينها.
"إذا كانت خطة التنفذ لاستعلام معين موجودة في الـ Cache من قبل لن يتم تنفيذ كل هذه الخطوات من جديد."

في النهاية عندما يقوم محسن الاستعلام باختيار خطة التنفيذ سوف يقوم بحفظها في الـ cache لكي يتم الاستفادة منها مستقبلاً.

منفذ الاستعلام Query Execution:
بعد اصدار خطة التنفيذ، سيتم ارسالها إلى منفذ الاستعلام، و سيتم الدخول إلى محرك النخزين Storage Engine و الذي سيتم التنفيذ فعلاً داخله.
بعد ذلك سوف تعاد نتيجة الاستعلام إليك.

كل هذه الخطوات سيتم نفيذها عندما ترسل جملة استعلام Query Statment إلى محرك قواعد البيانات لديك.


في القريب إن شاء الله سوف أتطرق إلى حطة التنفيذ Execution Plans و كيف تستطيع قرائتها و كيف من الممكن ان تستفيد من هذه الخطة في سبيل تحسين جملة الاستعلام التي نكتبها.


مع تحياتي ... طلال.

 

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

اخر عملائنا

tarig1.com
rgccampaign.net
laj-sa.com
vaacs2009.com
almsamm.com
teoor.net
عدد المواقع المستضافة :
عملاء الاستضافة :
عملاء الريسلر :