, 13 tweets, 3 min read
مصطلح الSQL و NoSQL هي تصنيفات للتسهيل لكن من وجهة نظر المختص فهي ACID و BASE أو Relational و Non Relational. هذه السلسلة سنتكلم اولاً عن الSQL Database او قواعد البيانات التي تجتمع فيها اربع خواص يرمز لها بالحروف ACID. لكن هنا تختلف قليلاً عن الACID المعروفة ( سلسلة )
الإختلاف هنا يعود إلى ان المقارنة بين قاعدة بيانات SQL مثل MySQL و NoSQL مثل Cassandra مثلاً لا يصح. لأن فكرة الNoSQL الأساسية هي ان تكون موزعة على اكثر من سيرفر, لذا يجب أن تكون المقارنة مع قاعدة بيانات SQL موزعة مثل MemSQL او ClustrixDB و Amazon Aurora و غيرها.
مبدئياً استحضر في في عقلك احد قواعد البيانات الSQL المشهورة مثل MySQL او Oracle او MSSQL و تخيل عملية معينة مثل عملية سحب نقدي من جهاز الصراف الآلي الATM لنرى من خلالها كيف جمعت و طبقت قواعد البيانات تلك خواص ACID الأربعة فيها.
سنتجاهل عملية التأكد من هوية الشخص و نركز على عملية السحب. و هي عملية يصعب تنفيذها من خلال جملة SQL واحدة , حيث نحتاج جملة SQL للتأكد من ان الشخص لديه الرصيد الكافي ثم لنضيف بيانات عملية السحب ثم نخصم المبلغ المسحوب من الرصيد, هذه العمليات الثلاث مجتمعة تسمى Transaction.
الACID كما سبق مجموعة خواص او شروط يجب ان تتوافر عند تنفيذ أي Transaction و هي اختصار لـ
Atomicity, Consistency, Isolation and Durability
كلمة Transaction تعني مجموعة جمل SQL إما ان تتنفذ و تنجح جميعها و إما تفشل جميعاً. فإذا لم يكن هناك رصيد كافي تفشل , واذا لم يستطع النظام خصم المبلغ تفشل و إذا نجح في الإثنتين و فشل في الثالثة فقط فالعلمية جميعها تفشل. إذا ضمنت لنا قاعدة البيانات ذلك فهي حققت خاصية الـ Atomicity.
لنفترض الان أن الحقل الخاص بحفظ المبلغ هو من نوع Decimal لكن عند قيام قاعدة البيانات بحفظ السجل دخلت بالخطأ قيمة 100$ مع علامة $ بسبب خطأ برمجي. طبعاً سترفض قاعدة البيانات تلك القيمة لأننا وضعنا مسبقاً "قيد Rule" و هو نوع الحقل. هذا السلوك (الرفض) هو الConsistency ( العادي )
هناك احياناً خلط بين مفهوم الConsistency و الIntegrity . الConsistency يتعلق دائماً ببناء قاعدة البيانات او الSchema و صيغة البيانات مثل كيف عرفنا نوع الحقل وهل هو Nullable او لا او لايقبل التكرار. بينما الIntegrity تتعلق بالعلاقات مثل وجود قيمة FK بدون مرجع لها PK. لكن لحظة !!!
عند الحديث عن الDistributed Databases فمعنى الConsistency يختلف عندما تكون قاعدة البيانات موزعة على اكثر من سيرفر حيث يكون المعنى هنا ان أي معلومة ( بيانات سجل معين) يجب أن تتطابق تماماً في جميع السيرفرات في لحظة قرائتها او تعديلها.
تخيل ان شخصاً عند جهاز الصراف الآلي لديه رصيد 1000 دولار وحاول سحب كل المبلغ في نفس الوقت من جهاز الصراف و من تطبيق البنك في جهازه الهاتفي و جاء الطلبين في نفس الوقت فهل يمكنه سحب 2000 دولار ؟ طبعاً ستمنعه قاعدة البيانات الSQL لوجود خاصية الIsolation
الIsolation تعني ان كل عملية يتم تنفيذها يجب ان تكون بمعزل عن اي عملية اخرى و يتم ذلك بعمل Lock (قفل) للسجلات المستخدمة من اي Transaction و لا يتم فتح القفل إلا بعد أن ينهي الTransaction الأول عمله تماماً. بعدها فقط يمكن تنفيذ Transaction اخر.
نعرف ان جهاز الصراف الآلي بعيد عن البنك و ايضاً قد يتم الخصم من حساب لك في دولة اخرى و قد تصادف مشكلة اتصال. هل تأكيد جهاز الصراف بانه تم السحب تم على مبدأ الثقة مثلاً أم تم خصم المبلغ فعلياً من قاعدة بيانات بنكك الدولي ؟ الإجابة انه تم الخصم فعلاً و هذا ما يسمى بالDurability.
هكذا نكون انتهينا باختصار من ACID . لا يلزم أن يكون مثال الصراف مطابق للواقع. في السلسلة القادمة سنتناول الBASE و هي خصائص قواعد البيانات من نوع NoSQL. و سنرى إن كان يمكن عمل نظام بنكي بها ام لا. ايضاً سنرى مبدأ الCAP و كيف تتشاركه كلا النوعين من قواعد البيانات. و دمتم بخير.
Missing some Tweet in this thread? You can try to force a refresh.

Enjoying this thread?

Keep Current with Ahmed Aljaberi

Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!