ماهي قاعدة بيانات الـMongoDB

AbdullaScriptمنذ 7 سنوات

ماهي قاعدة بيانات الـMongoDB؟

في السابق كان الحديث حول قواعدة البيانات المعروفه و المتوارد بين اقطاب المبرمجين من مختلف الأصعدة ابتدا من web developers إلى الـsoftware developers على مختلف المنصات windows, OSX, Linux و جل الحديث كان يدور حول نوع واحد فقط وهو RDBMS Relational database management system مثل  MS SQL Server, IBM DB2, Oracle, MySQL, and Microsoft Access  التي تعتمد في حفظ البيانات داخل جداول ولكن في الآونة الأخيرة و بعد صدور عدد من JS Frameworks  و ارتفاع عدد مستخدمي لغة الجافاسكربت بدأت شركة 10GEN في العمل على قاعدة بيانات من نوع مختلف تماما عما سبق ذكرة وهي NoSQL تحت اسم MongoDB اي قاعدة بيانات لا توجد بها علاقة بين الجداول وتعتمد في حفظ البيانات كمستندات BOSN ويعد هذا النوع الأشهر بين عائلة الـNoSQL وهنا ننوه بأن جميع ما تعرفه عن الـSQL Databases قد يتغير فبالتاكيد لن يكون هناك كوريز بالطريقة التي اعتدت العمل عليها.

 

1- أمثله

وبما ان الكثير من المبرمجين لديه خلفية في الـMySQL سأقوم بمقارنة سريعة حول الأختلافات السطحية بين المونجو والـMySQL:

  1. اسم الـTable في الـMongoDB هو Collection
  2. اسم الـRow في الـMongoDB هو Document

تعتمد قواعد بيانات الـRDBMS على الجداول كالنحو التالي:

 

Active_record_pattern1_img1.gif

 

بينما قاعدة بيانات الـMongoDB تعتمد على BSON وهذا يعني Binary Encoding Of JSON Objects وتكون كالنحو التالي:


{
        "_id" : ObjectId("57fe832b13e6a51130a23d2a"),
        "ID" : 1,
        "username" : "abdulla",
        "email" : "[email protected]"
}
{
        "_id" : ObjectId("57fe832b13e6a51130a23d2b"),
        "ID" : 2,
        "username" : "omar",
        "email" : "[email protected]"
}
{
        "_id" : ObjectId("57fe832b13e6a51130a23d2c"),
        "ID" : 3,
        "username" : "mohammed",
        "email" : "[email protected]"
}

 

امثلة حول الفروقات في عمليات الـQueries مابين الـMongoDB و الـMySQL OR RDBMS ولنفترض بأن لدينا جدول و كولكشن يحتويان على عدد من الصفوف والدوكيومنتس فيهم معلومات حول مستخدمين

  • عرض جميع المستخدمين من هم دون السن الـ24

SELECT * FROM users WHERE age < 24

db.users.find({"age": { $lt: 24 }})

// $lt = less than

 

  • عرض جميع المستخدمين الذين  اعمارهم مابين الـ20 والـ30

SELECT * FROM `users` WHERE `age` BETWEEN 20 AND 30

db.users.find({ age: { $gt: 20, $lt: 30 }})

// $gt = greater than

 

  • عرض المستخدمين الذين اسمائهم تحتوي على حرف A في الاول او الاخير او المنتصف لايهم

SELECT * FROM `users` WHERE username LIKE %A%

db.users.find({username: /A/})

 

  • و في حالة الإضافة

INSERT INTO `users` (username,age,status) VALUES ('abdulla',25,'active')

db.users.insertOne({username: "abdulla", age: 25, status: "active"})

 

ولكن هناك فارق كبير في هذه الكويري و بما ان قاعدة بيانات الـMongoDB ليست Relational بالتالي ليس هناك Schema محدده عند الإضافه فتستطيع مثلا إضافة document بمتغير col,field ليس موجود في الـdocument السابق او التالي في نفس الـCollection وبهذا يقال للـMongoDB بأن اهم مميزات هذا النوع من قواعد البيانات بأنه Flexible او Dynamic Schema  ومثال على ذلك:


db.users.insert([
  {
  username: {
    fname: "abdulla",
    lname: "bahraini"
  },
  age: 25,
  status: "active"
},
{
  username: "mohammed",
  age: 19,
  status: "not active"  
}
])

 

2- لماذا التحول الى MongoDB ( وجهة نظر )

sql-vs-mongo-inserts.png

 

كما اسلفنا سابقا ومع صدور عدد من js frameworks وبالاخص Meanjs المعني ب expressjs , angularjs & nodejs بالاضافه الmongodb و توسع هذه الفريموركس بشكل ضخم و رهيب جدا ومنها النود التي اصبحت خطر داهم على لغة الphp مقارنة بالسرعة, الاداء الرهيب وتناغم المونجو مع هذه الفريموركس بشكل افضل سبب في توجه الكثير من المطورين الى المونجو.

 

ليس عند هذا الحد وحسب بل نظرا الى سرعة المونجو حسب الاحصائيات تبين اهمه الانتقال من قواعد البيانات الاعتيادية الى المونجو.

تجربة اضافه 10000 صف و دوكيومنت في MySQL و MongoDB .. نلاحظ الفرق في سرعة الاداء احتاج المونجو الى ثانتين لتنفيذ المهمه بينما الMySQL احتاج الى 3 دقائق تقريبا.

 

runningmonodbperf-zoom.png

runningsqlperf-zoom.png

 

3-التثبيت

لتثبيت الـMongoDB قم بالدخول على الرابط واختر ما يناسب نظام جهازك

اقتباس

 

بعد التثبيت إن كنت  من متسخدمي الوندوز انشأ مجلد في داخل الـC (في حال تم تثبيت المونجو في السي)

اقتباس

C:\data\db

 

أضف المتغير التالي في PATH Environment وتجده في المسار التالي

this pc >> proprieties >> Advanced System Settings >>  Advanced tab >> Environment Variables >> in System Variables find PATH then Click Edit

اقتباس

C:\Program Files\MongoDB\Server\3.2\bin

 

افتح الـCMD واكتب الكوماند التالي لتفعيل خدمه الـMongoDB في جهازك وستعمل على بورت 27017 بشكل افتراضي

اقتباس

mongod

 

ثم افتح CMD أخر واكتب الكوماند التالي للدخول على MongoDB SHELL

اقتباس

mongo

 

Screenshot (39).png

 

بالتالي ستكون داخل الـMongoDB SHELL وتستطيع التعامل معه من خلال الاوامر المباشرة وللإطلاع اكثر اكتب help

اقتباس

 

كلمات دليلية:
9
إعجاب
16868
مشاهدات
0
مشاركة
1
متابع
متميز
محتوى رهيب

التعليقات (1)

عبدالله زاهر:

رائعة جدا

لكن ممكن تعطينا فكرة عن اسعارها؟ وكيف تم عملية التسعير؟

وشكرا

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !