سنخبرك في المقال الثاني عن ثلاثة أمور أخرى:
وسيخصص المقال الثالث للاستنتاجات.
ملاحظة: سيركز هذا فقط على التقنية الأساسية ، وسيتم تجاهل ميزات مثل ميزات المؤسسة في الغالب (عند الاقتضاء).
TileD ب
TileDB هي قاعدة بيانات مبنية على مصفوفات متعددة الأبعاد . يتيح لك تبسيط العمل باستخدام أنواع البيانات التي لا تتناسب تمامًا مع أنظمة إدارة قواعد البيانات الارتباطية الحالية (RDBMS) ، على سبيل المثال ، المصفوفات الكثيفة والمتفرقة ، وإطارات البيانات . تم تصميم TileDB خصيصا لحالات الاستخدام مثل علم الجينوم و البيانات الجغرافية .
الميزات البارزة
- خلفيات بيانات قابلة للتبديل مع دعم Amazon S3 و MinIO والمزيد.
- تكامل التخزين لـ HDFS و PrestoDB و Apache Spark و Dask والمزيد.
- ارتباطات اللغة لـ C / C ++ و Python و R و Java و Go .
ما أعجبني بشكل خاص
نحن نحب قواعد البيانات "المتخصصة للغاية" هذه ، والتي تم شحذها لمجموعة محددة من أنواع البيانات والمهام. إن أنظمة RDBMS التقليدية ، بالطبع ، جيدة في تنوعها النسبي لتغطية مجموعة واسعة للغاية من حالات الاستخدام (لا تمزح). لكن في بعض الأحيان توجد حالات متطرفة عندما تكون في المرحلة الأخيرة (أ) قدرات الأنظمة "التقليدية" غير كافية ، و (ب) المهمة مهمة جدًا لعملك.
نتوقع ظهور أنظمة أخرى مماثلة مع نمو التخصص في حالات استخدام قاعدة البيانات وظهور مجالات موضوع جديدة. بالطبع ، لن يذهب نظام RDBMS القديم الجيد إلى أي مكان ، لكني أود أن أرى كيف تتطور TileDB والأنظمة المماثلة الأخرى وتوسع حدود ما هو ممكن. نأمل أن تكون هناك قواعد بيانات "قابلة للتسلل" وغير متجانسة للغاية والتي سيكون لها واجهة لربط المكونات الإضافية بحيث يمكنك العمل مع أنواع البيانات الخاصة جدًا بحالات استخدام محددة. ولكن أكثر عن ذلك لاحقا.
أسئلة للمشروع
- ? TileDB , , , ? .
- - ? , «TileDB -». ?
Materialize
يتم تسويق Materialize على أنها "أول قاعدة بيانات SQL متدفقة حقيقية" وربما لا يكون هذا من قبيل المبالغة! إنها أساسًا قاعدة بيانات علائقية "متوافقة مع الأسلاك" مع PostgreSQL ، ولكن مع اختلاف واحد مهم: فهي تقدم آراء واقعية متجددة في الوقت الفعلي.
هناك تعريف مادياليز لـ " تخزين التدفق " ، والذي يبدو أنه يعمل من أجله .
في Postgres القياسي ، على سبيل المثال ، يجب عليك تحديث العروض المادية يدويًا:
CREATE MATERIALIZED VIEW my_view (/* ... */);
REFRESH MATERIALIZED VIEW my_view;
/* The underlying tables change */
REFRESH MATERIALIZED VIEW my_view;
/* More stuff happens */
REFRESH MATERIALIZED VIEW my_view;
يمكن القيام بذلك بأي تردد ، على سبيل المثال ، باستخدام برنامج نصي أو مهمة جدولة. ما لم نشهده بعد (على الرغم من أننا نريد دائمًا رؤيته حقًا) هو قاعدة بيانات تدعم أصلاً التحديثات المتزايدة لوجهات النظر الفعلية. نعم ، في الواقع: يتتبع التجسيد التغييرات في مصادر البيانات التي تحددها ويحدّث طرق العرض بناءً على التغييرات في تلك المصادر.
حتى لو لم تربح شركة Materialize السوق أو بقيت في السوق لفترة كافية ، يجب أن تستمر القدرات التي توفرها ، ومن شبه المؤكد أنه سيتم تكرارها في قواعد البيانات الأخرى.
الميزات البارزة
- , ( Postgres), JSON, CSV , Kafka Kinesis, .
- : «» (timely dataflow) «» (differential dataflow). , . Materialize, , , Materialize — « », , .
- Materialize «» Postgres, psql Postgres.
تجسيد لديه القدرة على استبدال الكثير. الشيء الأكثر وضوحًا: يسمح لك النظام باستخدام كل ترسانة العمليات المتاحة لتحديث وجهات نظرك المادية تدريجياً. لكن هذا ليس فوزًا كبيرًا.
الأهم من ذلك بالنسبة لنا هو أن Materialize تسمح لنا بجعل تلك الأجزاء غير النشطة من مكدس البيانات المخصصة لتتبع التغييرات في مصادر البيانات. يمكن القيام بذلك محليًا :
CREATE SOURCE click_events
FROM KAFKA BROKER 'localhost:9092' TOPIC 'click_events'
FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY 'http://localhost:8081';
قاعدة البيانات الخاصة بك الآن "تعرف" عن مصدر البيانات الذي يمكن أن تستخدمه لبناء آراء واقعية محدثة تلقائيًا. يبدو لي هذا "التسلسل" الأصلي أكثر سحريًا من التحديث التلقائي لوجهات النظر. إذا قمت بتشغيل ، على سبيل المثال ، وظائف بدون خادم ، أو مهام Heron ، أو خطوط أنابيب بيانات Flink ، والتي تتعقب فقط ، وتضيف عامل تشغيل هناك
INSERT
، فإن Materialize ستتيح لك ببساطة تجريد هذا الجزء من المكدس.
أسئلة للمشروع
- لماذا قاعدة بيانات منفصلة وليس امتداد Postgres ؟ نحن على يقين من أن هناك أسبابًا معمارية جيدة لعدم عمل الامتداد على هذا النحو هنا ، لكني أود أن أعرف السبب.
- ما مدى سهولة إنشاء ملحقات لمصادر البيانات الأخرى؟ كيف يمكن للمرء أن يكتب ، على سبيل المثال ، امتدادا لـ Apache Pulsar ؟ هل هناك خطط لفتح واجهات برمجة التطبيقات للمطورين لهذا الغرض؟
بريزما
تعد Prisma قاعدة بيانات أقل من كونها مجموعة من الأدوات لاستخراج قاعدة البيانات الخاصة بك قدر الإمكان . النظام متوافق حاليًا مع PostgreSQL و MySQL و SQLite على جانب قاعدة البيانات ، ومع JavaScript و TypeScript من حيث اللغة (مع احتمال دعم قواعد البيانات واللغات الأخرى في المستقبل). توصف بأنها "طبقة البيانات للتطبيقات الحديثة" ، وهذا صحيح بشكل عام.
"الطريقة الذهبية" لاستخدام Prisma هي شيء من هذا القبيل:
- حدد أنواع البيانات الخاصة بك على مستوى التطبيق باستخدام مخطط SDL الخاص بـ Prisma.
- بناءً على المخطط الذي تم إنشاؤه ، قم بإنشاء رمز اصطلاحي للغاية للغة التي تختارها.
- كن مشغولاً في بناء واجهات برمجة تطبيقات REST وواجهات برمجة تطبيقات GraphQL وأي شيء آخر تريد إنشاءه.
نحن نتفهم شكوك بعض الأشخاص حول أدوات مثل Prisma. هناك مجموعة كبيرة من المطورين الذين يعارضون تجريد قاعدة البيانات. لا يحتاجون إلى DSLs و GUIs الذكية. إنهم يريدون كتابة لغة SQL بسيطة وإنشاء جميع رموز تفاعل قاعدة البيانات يدويًا. نحن نتفهم الرغبة في الحفاظ على هذه الدرجة من التحكم ، لكننا لا نزال نوصي بقضاء 20 إلى 30 دقيقة في تجربة Prisma. نعتقد أنه يقوم بعمل جيد جدًا لإيجاد حل وسط بين القوة الغاشمة و SQL الخام.
الميزات البارزة
- Prisma SDL , . .
- Prisma Migrate ( , SQL). , A , .
- Prisma Studio — , Prisma.
يسمح لك مخطط Prisma DSL ليس فقط بتحديد أنواع البيانات المطلوبة للتطبيق الخاص بك ، ولكن أيضًا تحديد منشئ الكود الذي تريد استخدامه ، بالإضافة إلى معلومات الاتصال لقاعدة البيانات التي تتصل بها.
وبالإضافة إلى ذلك، يتم توفير أنواع المذكورة (تتضمن التعدادات)، والشروح مريحة مثل
@id
، @relation
و @default
. تذكرنا بـ DSL لترحيل قواعد البيانات من ActiveRecord و Ecto ، بالإضافة إلى IDLs مثل تلك المستخدمة في Protocol Buffers و Thrift .
أحب أن أرى تكيفًا لمخططات SDL الخاصة بـ Prisma أو شيء مشابه لمعيار مستقل عن اللغة (مناسب للمكتبات الخاصة باللغة). يفترض الوضع الراهن أن كل لغة برمجة تعيد اختراع العجلة. نعتقد أنه سيكون من المفيد وجود طريقة مستقلة عن اللغة لتحديد الأنواع التي تحدد التفاعل بين التطبيق وقاعدة البيانات.
بالمناسبة ، شكر خاص لـ Prisma على التوثيق الممتاز. من المؤكد أننا نعتبر هذا فرقًا مهمًا ، وإذا لم تندرج وثائقك ضمن قسم "أكثر ما أعجبني" في منشور مدونة ، فعليك استثمار المزيد من الموارد في إنشاء أوراق بيضاء.
أسئلة للمشروع
هل ستكون Prisma مفيدة أيضًا في اللغات التي استخدمت بالفعل على نطاق واسع التعيينات العلائقية للكائنات (ORMs)؟ في حالة استخدام ActiveRecord لـ Ruby أو Ecto لـ Elixir ، ما هو الحافز للتبديل؟