05-07-2020, 11:56 AM
السلام عليكم ورحمة الله
اردت ان اعرض تجربتي مع هذا النوع من قواعد البيانات ومع دلفي 10.4 حيث يقدم مجموعة من المكونات لاجل هذا الغرض
بداية وقبل ان نخوض في ذلك دعونا نتطرق الى بعض الاشياء ، هي من قواعد البيانات التي يطلقون عليها NoSQL اي لا تحتاج الى استعلامات
او بمعنى اخر لا تدعم الـ SQL المعروفة
فبدلا من
سوف تكتب
طبعا التعبير الاول افضل واسهل كثيرا ومفهوم اكثر فقصة NoSQL عيب وليست ميزة
وبالمقابل هي قواعد بيانات غير علائقية لنرى هذا السجل مثلا
في قواعد البيانات العلائقية كنت ستحتاج الى انشاء جدول اخر باسم Books لتضع فيع الكتب وصفحاتها اما هنا فمحشورة هذه البيانات بداخل نفس السجل في شكل مصفوفة كما بالشكل التالي:
عندما فكرت بهذا الاسلوب اعتقدت ان الامر سيكون اسهل من استخدام جمل استعلام لجلب جداول مترابطة ولكن المشكلة انني وجدت انك تحتاج الى بعض الجهد للتعامل مع هذه الـ Arrays في قرائتها وتعديلها واضافتها يوازي الجهد المبدول في التعامل مع الجداول العلائقية
ايضا في حقول الترقيم التلقائي نحن نبداء بالرقم 1 ثم 2 وهذه القاعدة تبداء وتستخدم رقم طويل مثل 5eff95673729661444dabdc1 مما يبدوا لي انه سوف ياخذ حجم اكبر من الذاكرة .
ايضا هنا لا يمكن التعويض عن القيمة برقم الفهرس مثل ان تكون لديك في جدول المؤهلات المؤهل العلمي دراسات عليا جامعية في علوم الكمبيوتر يمكننا التعويض عنها برقم التعريف في جدول اخر وليكن مثلا 5 حتى لا نكرر نفس البيانات اما بهذه القاعدة فيتكرر الاسم وهو ما يزيد في حجم الذاكرة ايضا .
على العموم في الدلفي يوجد مكون الاتصال FDConnection1 ومكون FDMongoQuery1 للاتصال بالـ Collection والتي هي تماثل السجلات
ويمكن ربط [size=small]FDMongoQuery1 [/size] بالمكون DataSource1
هناك طرق لانشاء قاعدة البيانات واضافة لها شكل الـ Collection المطلوب من داخل الدلفي لم ابحث فيه كثيرا ولكن استخدمت برنامج Studio 3T لاجل ذلك كما توجد العديد من البرامج للتعامل مع هذا النوع من قواعد البيانات .
من داخل هذا البرنامج يمكننا رؤية هذا التجميع للسجل كما بالشكل التالي :
![[صورة: attachment.php?aid=4278]](https://delphi4arab.net/forum/attachment.php?aid=4278)
1.jpg (الحجم : 44.4 ك ب / التحميلات : 92)
من داخل الدلفي كانت هناك بعض المكونات استطاعت ان تفهم التركيبة المعقدة وهناك مكونات لم تستطيع ان تفهم هذا
انظروا للشكل التالي :
![[صورة: attachment.php?aid=4279]](https://delphi4arab.net/forum/attachment.php?aid=4279)
2.jpg (الحجم : 134.05 ك ب / التحميلات : 90)
مكون الشبكة السفلي استطاع ان يفهم ويظهر المصفوفة Books بمجرد النقر عليها بينما العلوي لم يفعل
لدينا حقول تحت ال Record بالاسم address هي ليست مصفوفة وانما مجموعة من الحقول تحت اسم واحد مثل الـ Record تماما
نلاحظ ان المكون رتبها بحسب ما وجدها وما فهمها تماما اما المكون العلوي لم يستطع ذلط
وليس هذا وحسب المكون السفلي من شركة Stylecontrol تستطيع ان تغير في قيم هذه الحقول اما العلوي فلا يستطيع .
من ناحية السرعة اعتقد ان فيها سرعة كما يقولون .
هذه بداية وفي الشرح القادم سوف نستعرض المثال ونرفق مشروع كمثال .
اردت ان اعرض تجربتي مع هذا النوع من قواعد البيانات ومع دلفي 10.4 حيث يقدم مجموعة من المكونات لاجل هذا الغرض
بداية وقبل ان نخوض في ذلك دعونا نتطرق الى بعض الاشياء ، هي من قواعد البيانات التي يطلقون عليها NoSQL اي لا تحتاج الى استعلامات
او بمعنى اخر لا تدعم الـ SQL المعروفة
فبدلا من
كود :
Select * from school where gender=maleسوف تكتب
كود :
db.getCollection('school').find({gender: {$eq: "Male"}})طبعا التعبير الاول افضل واسهل كثيرا ومفهوم اكثر فقصة NoSQL عيب وليست ميزة
وبالمقابل هي قواعد بيانات غير علائقية لنرى هذا السجل مثلا
كود :
{
"_id" : ObjectId("5eff95673729661444dabdc1"),
"mname" : "ALI Ahmad",
"age" : 47.0,
"city" : "TRIBOLI",
"address" : {
"city" : "TRIBOLI",
"state" : "ST-34",
"active" : false
},
"books" : [
{
"title" : "ziro",
"pages" : 100.0
},
{
"title" : "trees",
"pages" : 200.0
},
{
"title" : "houses",
"pages" : 140.0
}
],
"photo" : BinData(0, "/9j/4AAQSkZJRgABAgEAAAAAAAD/7gAO.. 47105 more bytes")
}في قواعد البيانات العلائقية كنت ستحتاج الى انشاء جدول اخر باسم Books لتضع فيع الكتب وصفحاتها اما هنا فمحشورة هذه البيانات بداخل نفس السجل في شكل مصفوفة كما بالشكل التالي:
كود :
"books" : [
{
"title" : "ziro",
"pages" : 100.0
},
{
"title" : "trees",
"pages" : 200.0
},
{
"title" : "houses",
"pages" : 140.0
}
]عندما فكرت بهذا الاسلوب اعتقدت ان الامر سيكون اسهل من استخدام جمل استعلام لجلب جداول مترابطة ولكن المشكلة انني وجدت انك تحتاج الى بعض الجهد للتعامل مع هذه الـ Arrays في قرائتها وتعديلها واضافتها يوازي الجهد المبدول في التعامل مع الجداول العلائقية
ايضا في حقول الترقيم التلقائي نحن نبداء بالرقم 1 ثم 2 وهذه القاعدة تبداء وتستخدم رقم طويل مثل 5eff95673729661444dabdc1 مما يبدوا لي انه سوف ياخذ حجم اكبر من الذاكرة .
ايضا هنا لا يمكن التعويض عن القيمة برقم الفهرس مثل ان تكون لديك في جدول المؤهلات المؤهل العلمي دراسات عليا جامعية في علوم الكمبيوتر يمكننا التعويض عنها برقم التعريف في جدول اخر وليكن مثلا 5 حتى لا نكرر نفس البيانات اما بهذه القاعدة فيتكرر الاسم وهو ما يزيد في حجم الذاكرة ايضا .
على العموم في الدلفي يوجد مكون الاتصال FDConnection1 ومكون FDMongoQuery1 للاتصال بالـ Collection والتي هي تماثل السجلات
ويمكن ربط [size=small]FDMongoQuery1 [/size] بالمكون DataSource1
هناك طرق لانشاء قاعدة البيانات واضافة لها شكل الـ Collection المطلوب من داخل الدلفي لم ابحث فيه كثيرا ولكن استخدمت برنامج Studio 3T لاجل ذلك كما توجد العديد من البرامج للتعامل مع هذا النوع من قواعد البيانات .
من داخل هذا البرنامج يمكننا رؤية هذا التجميع للسجل كما بالشكل التالي :
1.jpg (الحجم : 44.4 ك ب / التحميلات : 92)
من داخل الدلفي كانت هناك بعض المكونات استطاعت ان تفهم التركيبة المعقدة وهناك مكونات لم تستطيع ان تفهم هذا
انظروا للشكل التالي :
2.jpg (الحجم : 134.05 ك ب / التحميلات : 90)
مكون الشبكة السفلي استطاع ان يفهم ويظهر المصفوفة Books بمجرد النقر عليها بينما العلوي لم يفعل
لدينا حقول تحت ال Record بالاسم address هي ليست مصفوفة وانما مجموعة من الحقول تحت اسم واحد مثل الـ Record تماما
نلاحظ ان المكون رتبها بحسب ما وجدها وما فهمها تماما اما المكون العلوي لم يستطع ذلط
وليس هذا وحسب المكون السفلي من شركة Stylecontrol تستطيع ان تغير في قيم هذه الحقول اما العلوي فلا يستطيع .
من ناحية السرعة اعتقد ان فيها سرعة كما يقولون .
هذه بداية وفي الشرح القادم سوف نستعرض المثال ونرفق مشروع كمثال .
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم


![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)
![[صورة: MongoDB.png]](https://github.com/grijjy/DelphiMongoDB/raw/master/MongoDB.png)
