إن خمسة مستودعات مختلفة للبيانات، كل منها يجيب على سؤال يجيب عليه الآخرون بشكل سيئ: SQL الموزعة لبيانات الأعمال المعاملاتية، وعمود واسع لقياسات الكتابة العالية، ومستودع في الذاكرة للحالة العابرة، وتخزين كائن للملفات، وقاعدة بيانات متجهية للبحث الدلالي. والاختيار الصحيح هو أغلب هندسة البيانات، وهو يتم دائما تقريبا بالقصور الذاتي.
| الإجراء | القيمة | المصدر | المقيسة |
|---|---|---|---|
| مستودعات بيانات منفصلة في الإنتاج | 5 (YugabyteDB, ScyllaDB, Redis/Valkey, MinIO, Qdrant) | kubectl get statefulsets,deployments --all-namespaces | |
| الطوبولوجيا الموزعة للغة SQL | yb-master and yb-tserver as separate stateful sets | kubectl get statefulsets -n kamo | |
| ملفات ترحيل SQL تحت مراقبة النسخ | 90 | find . -name '*.sql' across all service repositories | |
| إكمال عمليات نقل قواعد البيانات إلى محركات الإنتاج | 1 (CockroachDB to YugabyteDB, live data) | service configuration history; port 26257 retired in favour of 5433 |
ما المبنى الذي علمنا
الإجابة الافتراضية على سؤال أين تذهب البيانات هي أياً كان آخر مشروع استخدمته. وهكذا ينتهي الأمر بعملية تجارية إلى تشغيل تجميعات تحليلية ضد قاعدة بيانات تأخذ طلبات عملائها، أو الاحتفاظ بثلاثين جيجابايت من الملفات المرفوعة في صفوف الجداول. لقد اخترنا كل متجر ضد عبء العمل، ولقد هاجرنا عندما أخطأنا ـ كانت المنصة تعمل سابقاً على محرك توزيع SQL مختلف ثم انتقلنا عنها، وهو أمر صعب حقاً في التعامل مع بيانات الإنتاج ويستحق أكثر من أي قدر من المناقشة المعمارية كخبرة.
إن لغة SQL الموزعة ليست بديلاً سريعاً لقاعدة بيانات ذات عقدة واحدة، والطرق التي تختلف بها هي الطرق التي تؤثر على النتائج. فالصفقة ترى لقطة واحدة طوال حياتها حتى في وضع القراءة-التعهد، لذا فإن القراءة الثانية من صف داخل صف واحد داخل صف واحد لا ترى معاملة كتابة أخرى تم التعهد بها فيما بينها ـ فالشفرة التي كانت صحيحة على عقدة واحدة هي هنا خطأ هادئ. وتظهر تنازع القراءة والكتابة كأخطاء قابلة للمحاولة من جديد على الصفقات التي لم تكتب أي شيء قط. وهذه ليست حالات هامشية غريبة؛ إنها مشاكل كبرى، ولهذا السبب نحن حذرون بشأن ما نعد به فيما يتصل بالعمل على البيانات.
إن تخزين الكائن يحمل كل ملف يتم تحميله، مع إزالة الازدواجية حسب المحتوى، وهذا له درسه الخاص: فالتحميل الفاشل قد يترك صفاً يقوم النظام في محاولة لاحقة بإزالة الازدواجية عليه، فينتج ملفاً يعتقد النظام أنه موجود ولا يستطيع خدمة أي شيء. وقد وجدنا هذا في الإنتاج. والآن نقوم بالتحقق من هذا في أي نظام نبنيه لإزالة الازدواجية من أي شيء.
بنيت بـ
- YugabyteDB
- ScyllaDB
- Redis
- Valkey
- MinIO
- Qdrant
- PostgreSQL wire protocol
- Hibernate
أخبرنا ماذا تحاول أن تفعل
إن محادثة قصيرة تكفي عادة لمعرفة ما إذا كنا الشخص المناسب. وإذا لم نكن، فسوف نقول ذلك ونشير إليك إلى مكان أفضل.
