في قواعد البيانات نحتاج لـKey لنصل إلى Value اما اذا اردنا العكس فنحتاج لعمل بحث ببعض الValues لنصل للKey الصحيح. بعض الأنظمة لا يناسبها هذا حيث ترى ان الKeys التقليدية هي مجرد Hacks للتغلب على مشكلة عنونة البيانات و منها Git

(سلسلة عن تصميم البرمجيات غير التقليدية)

نظام Git هو لوحة لينوس تورفالدس الفنية الاخرى بالإضافة إلى نظام Linux الشهير. بنى النسخة الأولى منGit عام 2004 خلال 3 ايام بعد ان رفض بعض افراد فريقه الكبار استخدام BitKeeper. كان لينوس لا يحب الCVS فأخذه كقاعدة لما لا يجب فعله في Git. لذا ستجد بصمات لينكس في Git عند التعمق فيه.

مشكلة فريق لينكس كانت في التراخيص و كانوا يرون انBitKeeper يحدهم. لكن كانت فكرة لينوس الاهم هو جعله نظام موزع و Decentralized في شي اشبه بالBlockchain.  ممكن الان لاحظت التشابه من حيث ان لكل شخص نسخة من البيانات لديه ثم هناك تصويت إن صح التعبير عند عمل Merge و ستجد تشابهات اخرى.

نرجع للتصميم, Git ليس له قاعدة بيانات بالمعنى التقليدي بل هو مجلدات مبنية بطريقة معينة لها نظام تسمية خاص اعتماداً على Key متولد من بيانات الcommit نفسه بمعنى نه يقوم بعمل Hashing بدالة SHA-1 او SHA-256 و الناتج هو الKey. وكذا صار ممكن نعرف الKey مباشرة من المحتوى.

هذا النوع من الStorage حتى لا نقول Database يسمى  CAS و الC من Content و اللي يأتي عكسه الlocation-addrssable اللي يعتمد على Path فيه موقع المعلومة. نظم الCAS قديمة لكن ظهورها بصورة ناضجة كان عام 2003 و ممكن يكون Linus اطلع عليها و قرر يبني نظام بها.

لو دخلنا اعمق قليلاً بنلاقي انه تم اعتماد هيكلة بيانات Merkle tree او ماتسمى بالHash Tree اللي هي نفسها اللي بنيت عليها تقنية الBlockchain. في الجهة المقابلة نجد الDatabases تستخدم الB-Tree. لكن فيه قواعد بيانات NoSQL تستخدم الMerkle Tree مثل Cassandra و DynamoDB.

في الBlockchain الBlock نفسها مبنية كMerkle Tree و بعدين كل Block مربوطة او متسلسلة Chained مع الثانية. يعني كل Block تحتفظ بالID الخاص بالBlock اللي قبلها و هكذا.

في Git مع ان الوحدة الاساسية هي الMerkle Tree الا ان طريقة ادارتها مختلفة عن ماهي عليه في الNoSQL التي ذكرتها و في الBlockchain من حيث انها في Git يستخدم الacyclic graph وهو نوع من تقريباً 20 نوع من انواع الgraphs

في سلسلة قديمة تحثت عن الAnalysis Patterns و اللي تساعد في انك تفهم الStructure لأي بيانات في ارض الواقع

وكيفية تواصلها وارتباطها ببعضها و من هناك يمكنك تحديد نوع الGraph المناسب.

عالم التقنية لا يدور فقط حول الDatabases , هل تسائلت يوماً كيف تخزن الEmails ؟ لماذا الRegistries في ويندوز مخزنة بهذا الشكل؟ كيف بنيت قواعد البيانات الNoSQL من الKey-Value الى الDocument و الGraph و غيرها؟ هناك بالتأكيد عوالم اخرى مختلفة و لا تنحصر التقنية في الDatabases.

قال برنارد شو : “سامحه، فهو يعتقد أن عادات قبيلته هي قوانين الطبيعة”. للأسف هذا اعتقاد لدى كثير من المبرمجين الذين يرون ان ما يتعاملون معه من تقنيات هو ما يتعامل معه كل العالم. فيضل يدور في اطار ضيق حتى السأم.

معرفة هذه الاشياء التأسيسية الدقيقة هي التي تؤهل لصنع  “التقنيات” لا التطبيقات. الشيء الفارق بين مستهلك التقنية و بين منتجها. فبدل ان تكون عقولنا موجهه نحو الDatabase التقليدية او حتى الNoSQL كحل سحري وحيد في عقولنا لكل المشاكل سيكون لدينا مجموعة حلول تفصيلية انسب.

بقي تنويه عن اسم Merkle و الذي هو نسبه ل Ralph Merkle اللي اخترع ايضا تشفير الpublic-key و كان احد موظفي شركة Xerox Parc اللي هي مهد كثير من التقنيات اللي نراها الان. آخر قرآتي ان الرجل الان له ابحاث و ابتكارات في النانوتكنولوجي.

اختم ببيت قصيد للشاعر بدوي الجبل.

و تطير النسور في زحمة النجم .. و في عشه البغاثُ يطير