KamoCRM

طبقة بيانات موزعة، اختيرت عن قصد

SQL الموزعة، العمود الواسع، التخزين المؤقت، تخزين اﻷشياء والمتجهات - كل منها لسبب

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

كل رقم هنا يسمّي من أين أتى ومتى تمّ قياسه.
الإجراءالقيمةالمصدرالمقيسة
مستودعات بيانات منفصلة في الإنتاج5 (YugabyteDB, ScyllaDB, Redis/Valkey, MinIO, Qdrant)kubectl get statefulsets,deployments --all-namespaces
الطوبولوجيا الموزعة للغة SQLyb-master and yb-tserver as separate stateful setskubectl get statefulsets -n kamo
ملفات ترحيل SQL تحت مراقبة النسخ90find . -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

ماذا يؤهلنا هذا؟

Data engineering and migrationMoving data between systems without losing any of itCustom web applicationsThe system your business actually runs on, built properlyPlatform and DevOps engineeringKubernetes, pipelines and the deployment safety nobody notices until it is missing

أخبرنا ماذا تحاول أن تفعل

إن محادثة قصيرة تكفي عادة لمعرفة ما إذا كنا الشخص المناسب. وإذا لم نكن، فسوف نقول ذلك ونشير إليك إلى مكان أفضل.

بدء محادثةأنا أستخدم KamoCRM بالفعلكيف نقتبس