المعلوماتية > عام

الوجه الواعد لقواعد البيانات NoSQL

نعيش الآن في العام 2015 حيث أصبح كل شيء تقريباً متصلٌ بالإنترنت! السيارات التي نقودها، والساعات التي نرتديها، وأجهزتنا الطبية المنزلية الصغيرة، وثلاجاتنا، وأجهزة التبريد، وبالطبع الأجهزة الذكية والحواسيب المحمولة. كل ذلك و بالإضافةِ إلى الإنتاج البشري من مقاطع فيديو وصور وما إلى هنالك، ينتجُ كميةً كبيرة من البيانات تتعدى الترليونات من الجيجابايت يومياً، حيث نحتاج لحفظ هذه البيانات في قواعد بيانات مصممة لها تدار من قبل برامج إدارة قواعد البيانات التي تعمل كوسيط بين المستخدم النهائي (أنا وأنت) أو البرامج والتطبيقات وبين قواعد البيانات المختلفة.

منذ نشأة قواعد البيانات أصبحت ركناً أساسياً من أي برنامج أو موقع إلكتروني -كبر حجمه أم صغر-. فقد كان لما يُطلق عليه "قواعد البيانات العلاقاتية" Relational Databases الانتشار الأوسع، وأصبحت برامج إدارتها (RDBMS) متواجدة في كل جزء إلكتروني من عالمنا الافتراضي. ولكن مع تزايد عدد مستخدمي الإنترنت، وتزايد عدد الأجهزة المتصلة بالإنترنت، أصبحت كمية البيانات التي تحتاج إلى تخزين، واسترجاع، ونقل، واستنساخ...إلخ كبيرة جداً ما أظهر ضعف قواعد البيانات العلاقاتية في التعامل مع هذه الكمية من البيانات والمخزنة على عدد كبير من الخوادم. وهنا ظهرت الحاجة إلى قواعد بيانات نستطيع تخزينها على مجموعة كبيرة من الخوادم (Clusters) ممتدة على نطاق جغرافي واسع، وتستوعب بيانات بأحجام كبيرة جداً.

حركة NoSQL ونشأة المصطلح:

استخدم «كارلو ستروتزي» مصطلحَ NoSQL في عام 1998 في تسمية قواعد البيانات العلاقاتية مفتوحة المصدر التي برمجها، والتي لم تحتوِ واجهة SQL كنظيراتها، وقد اقترح السيد ستروتزي قائلاً: "لأن الحركة الداعمة لقواعد بيانات NoSQL في الوقت الحالي تطرفت بحيث أصبحت لاعلاقاتية، يجب علينا تغيير المصطلح إلى NoRel ليصبح أكثر ملاءمة"، وبـNoRel يقصد Non Relational.

تمت إعادةُ استخدام هذا المصطلح في عام 2009 من قبل «إريك إيفانز» في محاولة للإشارة وإطلاق تسمية على قواعد البيانات المتزايدة العدد حيث تتميز بكونها متوزعة (Distributed)، ومفتوحة المصدر، ولاعلاقاتية، وعادة مايتم ترجمة هذا المصطلح إلى Not only SQL.

إذاً ماهو تعريف NoSQL وماهي فائدتها للمطورين؟

NoSQL هي قواعد بيانات تتيحُ تخزينَ واسترجاع البيانات بعد نمذجتها(قولبتها) بتقنيات تختلفُ عن تلك المستخدمة في قولبة البيانات في قواعد البيانات العلاقاتية. ويميلُ المطورون إلى استخدام هذا النوع من قواعد البيانات لما تقدمه من بساطة في التصميم، وقابلية التوسع أفقياً، وزيادة في التحكم على حساب الجاهزية.

يتزايد استخدام NoSQL بشكل كبير في تطبيقات البيانات الكبيرة Big Data وتطبيقات الزمن الحقيقي(Real-Time Applications). ويأتي الحديث عن هذه التقنية للتخلص من التكلفة الكبيرة لقواعد البيانات العلائقية وبطئها الشديد واستخدام تقنيات أرخص وأكثر فعالية في إدارة البيانات. كما تشير مجلة ComputerWorld في تقرير عن هذا الموضوع إلى ميل الشركات الناشئة المتخصصة في مجال Web 2.0 إلى الاستعاضة عن استخدام Oracle بـMySQL أيضاً وإنشاء Datastore خاصة بها متأثرة بقواعد بيانات Dynamo لأمازون و BigTable لجوجل.

تتميز قواعد بيانات NoSQL بالعديد من الميزات:

- بساطة التكلفة وسهولة التنفيذ.

- تتيح إمكانية تجزئة البيانات واستنساخها. أي أكثر فاعلية في التوزيع.

- لاتستخدمُ المخططات الجامدة (Schemaless)، فهي أكثر مرونة في تحديد أنواع البيانات في قاعدة البيانات.

- إمكانية التوسع أفقياً، مما يعني سرعة معالجة كميات كبيرة من البيانات وإمكانية التعامل مع بيانات بحجم كبير ( Web-Scale Data).

- سرعة نقل بيانات أعلى من نظيراتها لكن على حساب الدقة في بعض الحالات.

- إن قواعد بيانات NoSQL مصممة بطريقة تجعل من توسعتها وإضافة كتل جديدة أمراً سهلاً ورخيص التكلفة ودون الحاجة إلى تجزئة البيانات (Sharding).

- تتبع لمفهوم CAP وليس ACID كما في قواعد البيانات العلاقاتية، لذلك هناك عدد من التقارير والأخبار عن شبكات التواصل الاجتماعي مثل «فيسبوك» تفيدُ أنها بدأت بالتخلي عن قواعد بياناتها الحالية للتوجه نحو NoSQL، وذلك لأن مفهوم CAP يفي بمتطلباتها ولكن ذلك لاينطبق على البنوك مثلاً. (و يمكن مراجعة المصادر للمزيد من المعلومات حول المفهومين)

لكن بجانب ميزاتها فإنه يجب الحذر عند استخدام قواعد بيانات كهذه، خصوصاً كيفية التعامل مع كل ما قد ينشأ من تضارب البيانات (Inconsistency)، فهنا يجب على المبرمج ومصمم قواعد البيانات التعامل مع الحالات حسب منطق الأعمال. فلنقُل مثلاً أن قاعدة البيانات لدينا هي لموقع حجوزات فندقية على الشبكة العنكبوتية، ولدينا مستخدمَين قد قاما بالتحقق من خلو الغرفة نفسها الفندقية بفارق زمني ضئيل، ثم قام أحدهما بحجز الغرفة الفندقية قبل الآخر، هنا يلعب منطق العمل دوراً كبيراً في التعامل مع هكذا حالات، فيمكن السماح لكليهما بحجز الغرفة الفندقية نفسها وخلال الفترة الزمنية نفسها، ومن ثم الاتصال بالعميل الذي حجز متأخراً أو إرسال بريد إلكتروني اليه. يختارُ والعديد من رؤساء الأعمال هذا الخيار، حيث أنه مفضل على أن يظهر للعميل الذي حجز متأخراً رسالة خطأ عند الحجز أو رسالة تدعوه للمحاولة مرة أخرى.

حسناً، وماهي أنواع/أقسام قواعد البيانات هذه؟

ظهرت العديد من المناهج والمقاربات لتقسيم قواعد بيانات NoSQL لكن يمكن الاتفاق على تقسيمها مبدئياً إلى الأقسام التالية:

- مفتاح وقيمة (Key-Value NoSQL Database) مثل Dynamo

- عمود (Column NoSQL Database) مثل Cassandra

- مستند (Document NoSQL Database) مثلApache CouchDB، MongoDB

- رسم بياني أو غراف (Graph NoSQL Database) مثل Neo4J

- متعددة الأنماط (Multi-Model NoSQL Database) مثل DoundationDB

تبدو قواعد البيانات هذه واعدة جدا لكن ماذا بشأن قيودها؟أليسَ لها أي جوانب سلبية؟

بالتأكيد هناك العديد من الأمور، فبدايةً قواعد البيانات هذه ماتزال في طور النشوء ولم تصل إلى مرحلة النضج بعد. كما أن كل الشركات التي تعمل على تطويرها ما زالت شركاتٍ متوسطة الحجم وليس لها السمعة الكبيرة كما Oracle و IBM، لذلك تجد من الأسهل لأي شركة أن تدير قواعد بياناتها باستخدام منتجات الشركات الكبرى ذات المصداقية العالية مقارنة بهذه الشركات الناشئة. كما يجب علينا ألا نتغاضى عن سهولة كتابة الأكواد لـSQL في وقت نحتاج به إلى الكثير من الخبرة البرمجية لكتابة كود NoSQL.

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

المصادر: هنا

هنا

هنا

هنا

هنا