عن المشروع
Opteryx Core هو محرك تنفيذ SQL الذي يعمل خلف opteryx.app، ويُنشر كنسخة معدلة من Opteryx بواجهة برمجة تطبيقات أصغر وأكثر تحديدًا وتكوينًا مصممًا حول أعباء عمل الخدمة المستضافة. وهو مصمم للاستعلامات التحليلية السريعة ذات القراءة المكثفة على البيانات العمودية: يتعامل مع تحليل SQL والتخطيط ودفع المسندات وتقليص الإسقاط والتنفيذ، بحيث يمكن الاستعلام عن مجموعات البيانات من Python دون إعداد مستودع بيانات منفصل.
البنية
تخطيط الاستعلام مكتوب بلغة Python؛ تنفيذ الاستعلام أصلي. بمجرد أن ينتج المخطط خطة مادية، يقوم المحرك بتشغيلها في كود مُجمّع من البداية إلى النهاية — المسح والمشغلات والجدولة والإرسال — ولا يوجد PyArrow أو NumPy في أي مكان في المحرك. تُرجع النتائج كـ"مُورسيلات" Draken، وهي دفعات من الأعمدة تُبث أثناء إنتاج المحرك لها، بحيث لا يتعين على نتيجة كبيرة أن تتسع في الذاكرة دفعة واحدة. يكشف المُورسيل عن num_rows وcolumn_names وcolumn(name).to_pylist()؛ بعد قراءة الدفق حتى النهاية، يُبلغ session.rowcount عن عدد الصفوف المُسلَّمة.
البدء
المتطلبات هي Python 3.11 أو أحدث، وأدوات C/C++ للبناء المحلي من المصدر، وRust/Cargo لامتداد Rust. ثبّت باستخدام pip install opteryx-core واستورده كـopteryx. مثال محلي بسيط يسجل مساحة عمل مع DiskConnector ويستعلم عن أسماء مجموعات البيانات المفصولة بنقاط والتي تُحل بالنسبة إلى دليل العمل الحالي، على سبيل المثال data.planets تُحل إلى ./data/planets، مع اكتشاف التنسيق من امتدادات الملفات. يتوفر أيضًا سطر أوامر عبر python -m opteryx للاستعلام دون كتابة Python.
الاستخدامات المقصودة
يسرد المشروع تشغيل طبقة التنفيذ المستخدمة بواسطة opteryx.app، وتشغيل SQL التحليلي ضد ملفات Parquet وCSV وJSONL و.skene المحلية، ودمج محرك استعلام داخل تطبيقات Python والبرامج النصية وأجهزة الكمبيوتر المحمولة والخدمات، والعمل على الأجزاء الداخلية للمحرك مثل التخطيط والتنفيذ الأصلي وأداء تنسيق الملفات، واستخدام محرك الملفات أو تنسيق .skene بمفردهما عبر حزم rugo وlibskene.
تخطيط المستودع والتوزيعات
يحتوي المستودع على محرك SQL (opteryx/)، والركيزة المتجهة العمودية الأصلية والمُورسيلات (draken/)، ومحرك الملفات لقراءة وكتابة Parquet وCSV وJSONL (rugo/)، وتنسيق ملف .skene العمودي مع قارئ وكاتب ومواصفات معيارية بلغة C++ (skene/)، ومصادر امتداد الحوسبة في Rust وC++ (src/)، ولقطات الكتالوج المُولَّدة (reference/)، والاختبارات وبيانات الاختبار والوثائق وسكربتات التطوير والتبعيات المضمنة وآليات البناء المشتركة في build_common.py.
شجرة مصدر واحدة تنتج ثلاث حزم، بمصدر واحد في build_common.py بحيث لا يمكن أن تنحرف: opteryx-core (المستوردة كـopteryx) تجمع محرك SQL الكامل مع draken وrugo وskene؛ rugo يوفر محرك الملفات بالإضافة إلى draken لقراءة وكتابة الملفات دون محرك SQL؛ libskene (المستوردة كـskene) توفر قارئ وكاتب .skene بالإضافة إلى draken. لا يُنشر draken بشكل منفصل. rugo وskene متوازيان ولا يعتمد أي منهما على الآخر. تُبنى الحزم في CI، وليس محليًا؛ يستخدم التطوير المحلي أهداف Makefile مثل make dev-install وmake compile وmake c وmake q وmake test وmake dt وmake check.
تنسيقات الملفات
تُقرأ مجموعات البيانات حسب الامتداد ومجموعة البيانات بتنسيق واحد طوال الوقت؛ الدليل الذي يخلط التنسيقات هو خطأ وليس قراءة بأفضل جهد. Parquet هو الافتراضي للبيانات المخزنة والتبادل، ويُقرأ عبر rugo، وكذلك CSV وJSONL/NDJSON. تنسيق .skene أصلي لـdraken: يخزن مجموعة صفوف أو أكثر من متجهات draken دون فقدان، بما في ذلك التحسينات التي يتجاهلها Parquet — عمود IPv4 يُعاد كـUINT32 مُحسَّن بوصف منطقي IPV4، ويتم استعادة الترميز القاموسي وتلميحات التخطيط بدلاً من إعادة اشتقاقها. وهو عمدًا غير قابل للنقل ولا يُوعد بقارئ خارجي، لذا يبقى Parquet الخيار للتبادل. يمكن أيضًا تسمية ملفات Parquet وCSV وJSONL مباشرة باستخدام دوال الجدول read_parquet() وread_csv() وread_jsonl()؛ لا يوجد read_skene().
تكامل الكتالوج
يُوصف Opteryx Core بأنه يعمل بشكل أفضل عند دمجه مع مكتبة opteryx_catalog، وهو النموذج المقصود لمجموعات البيانات المسماة والجداول المدعومة بالكتالوج والتجربة العامة المستخدمة في opteryx.app. يحدد التكوين موصلًا افتراضيًا مع كتالوج ومشروع Firestore وقاعدة بيانات ودلو GCS، وبعد ذلك يمكن الاستعلام عن مجموعات البيانات المدعومة بالكتالوج بأسماء مفصولة بنقاط مثل public.space.planets. بالنسبة للبيانات المحلية، تكون مساحات العمل المسجلة مثل testdata أو scratch أو data نموذجية.
التموضع والمساهمة
يقدم المشروع نفسه كمحرك تحليلي مدمج وليس منصة كاملة للمستخدم النهائي: لتجربة مستضافة وميزات خدمة متعددة المستأجرين، يُنصح بـopteryx.app، بينما توفر هذه الحزمة المحرك الأساسي مباشرة. تُرحب المساهمات في شكل استخدام على مجموعات بيانات شخصية، وتقارير أخطاء عندما تسيء الاستعلامات أو المخططات أو الأداء التصرف، وطلبات سحب للإصلاحات أو الاختبارات أو الوثائق أو الأداء، وحالات إعادة إنتاج مشتركة واستعلامات فاشلة وملفات Parquet حالات حافة. المشروع مرخص بموجب Apache-2.0، مع وثائق على docs.opteryx.app.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.