دليل سريع لـ NoSQL

نشره زايد في

ما هي تقنية NoSQL ؟ و لماذا نسمع كل يوم -كما يبدو- أن شركة ضخمة بدأت باستخدام قاعدة بيانات NoSQL ؟  في هذا الدليل الذي أعدته مجلة H الألمانية محاولة للإجابة على هذه الأسئلة.

أدى صعود حركة NoSQL إلى إعادة النقاش و الجدل في فضاء قواعد البيانات ، حيث أثيرت أسئلة حول موائمة النموذج العلائقي التقليدي لجميع المشاكل ليس فقط في الجانب النظري بل تعدى ذلك إلى الجانب العملي ، إن NoSQL لا تعني رفض SQL بنفسها ، بل أن بعض أنصار حركة NoSQL يقولون أنها لا ترفض SQL كما في "No SQL" ولكن تعني في الحقيقة " Not Only SQL" أي " ليس SQL فقط" ، إنها تعبر عن رغبة عميقة لاستكشاف نماذج قواعد البيانات التي تركت في الماضي - لعدة أسباب -  تقبع في الغموض.

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

الفرق مع حركة NoSQL أن الكثير من الإبداع أتى من تطورات عملية استفادت من قوة المصادر المفتوحة بدلا عن التأطير النظري ، و بالرغم من ذلك فإن NoSQL ليست حل سحريا لجميع احتياجات قواعد البيانات.

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

إذا نظرنا إلى أنواع NoSQL  سنجد أربعة سلالات رئيسية : خازنات الوثائق ، وخازنات مفتاح/ قيمة ، وقواعد بينات موجهة للأعمدة ، و خازنات الرسومات.

خازنات الوثائق Document stores و CouchDB

تحفظ خازنات الوثائق كل الوثائق مهما كان طولها و تسمح باسترجاعها بالاعتماد على محتويات الوثيقة ، فعلى سبيل المثال يمكن أن تحوي الوثيقة على هذا النص:
"الاسم الأول" : "والاس"
"العنوان" : "شارع 62 الكنيغر الغرب"
"الاهتمام" : ["الجبن" ، "المفرقعات" ، هبوط القمر ""]

بإمكاننا أن نسترجع هذه الوثيقة عن طريقة استعلام في قاعدة البيانات عن الاسم الأول "والاس" ،  كما تلاحظ أن هذه الوثيقة يحوي على معلومات غير مهيكلة و يمكن أن تتفاوت المستندات فيما تحوي من حقول ، و تندرج قواعد بيانات XML  في هذا الصنف حيث أنها قواعد بيانات موجهة للوثائق تحوي على بيانات شبه منظمة ، تعتبر قاعدة بيانات CouchDB أحد الأمثلة على للقواعد الموجهة للوثائق تقوم بحفض الوثائق على نفس النسق المعروض في الأعلى . لتستعلم في CouchDB تحتاج إلى تعريف دالة بسيطة تقوم بجلب الحقول و تعرضها على شكل قائمة مرتبة تسمح بتصفيتها أو تقيمها.

يتم تخزين النتائج نفسها كوثائق CouchDB في نفس الخادم ، و يتم توليد النتائج عن دخول أو عند الطلب ، حيث أن الفكرة هي تقليل الحمل على الخوادم بجعل النتائج جاهزة للتسليم ، و تستطيع CouchDB التوسع عن طريق النسخ التماثلي لقواعد البيانات على خوادم CouchDB بكفاءة ، و يعمل النسخ التماثلي أيضا مع العقد المترابطة بشكل غير دائم ،   فعلى سبيل المثال تستخدمه خدمة Ubuntu One  قاعدة بيانات CouchDB لمزامنة بين أجهزة الحواسيب المستخدمين مع سحابة التخزين الخاصة بها ، كذلك ستخدمها هيئة الإذاعة البريطانية BBC كقاعدة بيانات NoSQL داخلية لتقديم خدمة الحفظ لخدمات الويب الخاصة بها.

لتقرأ المزيد عن CouchDB اطلع على كتاب CouchDB أو زر موقعها.

قاعدة بيانات الرسومية و Neo4J

أحد الأشياء الأكثر استهلاكا للموارد و مسببة للمشاكل في قواعد بيانات SQL  هو حفظ معلومات العلاقات بين الأشياء ، إن تصفح العلاقات يتطلب عدة استعلامات ، تركز قواعد البيانات رسومية التوجيه على تمثيل الرسم في قاعدة البيانات ، و تعتبر Neo4J  أحد الأمثلة على قواعد البيانات رسومية التوجيه ، فبدلا عن أن تنشئ سجلات تقوم بإنشاء عقد ثم تقوم بإسناد العلاقات فيما بينها ، على سبيل المثال هذه قطعة الصغيرة من شفرة جافا :


Node firstNode = graphDb.createNode();
Node secondNode = graphDb.createNode();
Relationship relationship = firstNode.createRelationshipTo( secondNode,               MyRelationshipTypes.OWNS );

تقوم بإنشاء عقدتين ، ثم تسند علاقة تملك OWNS (معرفة في مكان آخر كسجل بسيط) ، و تحفظ البيانات المتعلقة بهذه العقدة و العلاقة كخصائص لكلا منها :


firstNode.setProperty("name","Wallace");
secondNode.setProperty("name","Grommit");
relationship.setProperty("licence","dog");



هذه الشفرة تحدد أن العقدة الأولى ( Wallace ) تملك ( بالإضافة إلى dog  و licence )  العقدة الثانية (Grommit ) ، من خلال هذه النموذج البسيط يمكننا إنشاء رسمة للعلاقات قابلة للتتبع بسهولة .

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

خازنات المفتاح/قيمة و Redis

تعبر قواعد بيانات المفتاح/قيمة أبسط من سابقاتها ، حيث كل مفتاح وصف يشير إلى قيمة و التي بدورها قد تكون سلسلة حروف عشوائية ، و يتم تضمين خازنات المفتاح/قيمة في التطبيقات منذ زمن بعيد ، و يعتبر فرسان اليونكس مثل dbm و gdbm و Berkley DB من قواعد البيانات ذات التوجه المفتاح/قيمة ، التغير الذي حصل في حركة NoSQL في مجال قواعد بيانات المفتاح/قيمة هل جلعها قواعد البيانات خدمات قائمة بذاتها و يمكن الوصول إليها عبر تقنيات الويب مثل REST.

يوجد نوعين من خازنات المفتاح/قيمة ، النوع الأول هو خازنات في الذاكرة in-memory حيث تحفظ البيانات في الذاكرة من أجل الأداء ، و النوع الثاني هو في القرص in-disk  حيث تحفظ بياناتها مباشرة في القرص الصلب ، تكون الأنواع التي تحفظ في الذاكرة مفيدة لآليات الذاكرة المخبأة الموزعة بينما الأنواع الذي تحفظ في القرص الصلب تكون أفضل لحفظ البيانات.

تعتبر Redis مثال على قاعدة بيانات المفتاح/قيمة من نوع التخزين في القرص الصلب ، وبها إمكانيات تتعدى حفظ قيمة سلسلة محارف إلى حفظ قوائم و مجموعات و مجموعات مفروزة أيضا ، تقوم Redis بحفظ كل مجموعة بيانات في الذاكرة إلى القرص الصلب باستعمال طريقة واحد من اثنتين من المحافظة على الأداء الكلي ، و لكل نوع من البيانات المدعومة من قبل Redis مجموعة أوامر مخصصة و يمكن الوصول إليها عن طريق واجهات برمجية تشمل عدة لغات برمجية ، و تستخدم Redis في Yard و Github و Craigslist لتلبية احتياجاتهم التخزينية ، للمزيد عن Redis زر موقعها.

قواعد البيانات موجهة للأعمدة و Cassandra

تهتم قواعد SQL التقليدية بالصفوف فكل صف يمثل سجل من الحقول ، هذا العرض مريح للطبيعة البشرية حيث أنها تشابهة بسهولة كيفية التي نتبعها لتسجيل الأشياء على سبيل المثال فهرس البطاقات ،افترض أن لديك فهرس بطاقات في كل بطاقة يعرض اسم الشخص مع جملة مبيعاته ؛ لتحصل على المجموع الكلي للمبيعات فيجب عليك أن تمر على جميع البطاقات واحدة تلو الأخرى و في كل مرة تضيف مبيعات البطاقة التالية على مجموع البطاقات السابقة ، يمكن تضبط قواعد بيانات SQL لتعمل بشكل جيدة في هذا المثال ، و لكن مع زيادة حجم البيانات سوف تستغرق وقت أطول ، و الآن افترض أنه عندما كنت تكتب أرقام مبيعات كل شخص في بطاقته كنت تضيفها إلى قائمة خاصة بأرقام المبيعات ، هكذا ستصبح عملية إحصاء جميع المبيعات مجرد جمع الأرقام الموجودة في القائمة وحسب ، و هذا أسرع بكثير و هو جوهر قواعد البيانات الموجهة بالأعمدة ، حيث أنها تحفظ بياناتها بطريقة يمكن تجميعها بسرعة و بأقل نشاط في الدخل و الخرج I/O .

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

خذ على سبيل المثال قاعدة بيانات أباتشي Cassandra و التي هي عبارة عن خليط من التوجه للأعمدة و خازنات المفتاح/قيمة حيث توفر قاعدة بينات لامركزية و موزعة بشكل Eventual consistency ، و قد طورت في البداية عن طريق فيس بوك ، و الآن أصبحت كمشروع تحت مظلة أباتشي و يستخدمها digg و تويتر و Reddit و غيرها من المواقع ،  تحوي Cassandra على أعمدة لاسم و قيمة و ختم الوقت ، و يمكن تجميع هذه الأعمدة تحت ColumnFamily التي تماثل جدول في قاعدة البيانات العلائقية ، و يمكن أيضا أن توسم الأعمدة كـ SuperColumn بحيث يمكن استرجاعها بترتيب ختم الوقت بدلا عن ترتيب المفتاح.

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

إذا ما هي قاعدة بيانات NoSQL ؟

كما يمكنك أن ترى من الأمثلة الأربعة الماضية ، فإن قواعد البيانات NoSQL تركز على أنواع معينة من المشاكل ، فمن كونها مرنة جدا في حفظ البيانات (خازنات الوثائق ) إلى استهداف حالات استخدام مثل العلاقات (قواعد بيانات الرسومية) و تجميع البيانات (قواعد بيانات الموجهة للأعمدة) أو فقط تبسيط فكرة قاعدة البيانات لتكون شيء مثل حفظ قيمة (خازنات المفتاح/قيمة).

ما زال أمام نموذج قواعد البيانات العلائقية المعتمدة على SQL  سنوات طويلة قبل أن تزاح من تطبيقات حفظ البيانات ، و لكن بسبب نموذج المفتوح المصدر لتطوير قواعد بيانات NoSQL و بسبب نشرها المتكرر في خدمات منتجة ستوفر بديل سريع التحسن أو مكمل لقرينتها المعتمدة على SQL ، ستظل قواعد بيانات SQL محافظة على مزاياها من ناحية تقديم معاملات تحت مفهوم ACID ( الذرية ،التناسق ، العزل ،الدوام) ، و قدرات علائقية مما يجعلها أفضل خيار للعديد من استخدامات الأعمال ، كذلك لم تتوقف تقنية قواعد بيانات SQL ؛ فعلى سبيل المثال Ingres تضع تقنية VectorWise في قاعدة بياناتها ليعطيها قدرات لمنافسة خازنات الأعمدة في مجال تحيل البيانات.

تمثل قواعد بيانات NoSQL قوة مثيرة و جديدة في أعمال تخزين البيانات و استرجاعها ؛ بتطبيق تقنيات طالما تجاهلت بسبب أنها لم تتناسب مع كيفية التي تدار بها الأشياء بواسطة SQL ، نحن الآن ننتقل إلى وقت تختلط فيه الأشياء في عالم تخزين البيانات و استرجاعها.

هذه المقالة ترجمة لـ The H speed guide to NoSQL بواسطة  Dj Walker-Morgan

Comments