
قاعدة بيانات رسومية منخفضة استهلاك الذاكرة مع دعم Bolt+TLS، وتشفير عند التخزين، ومتجهات مصممة لحالات استخدام النسخ المتماثل المحلي للرسوم البيانية.
الإصدار الحالي: v0.25.2 — جميع الإصدارات.
في سطر واحد: يقدّم Slater رسومًا بيانية لا تتسع في الذاكرة — مئات الملايين من العقد ومليارات الحواف في بضع مئات من ميغابايتات RAM — عبر بروتوكول Bolt القياسي، بحيث يعمل أي برنامج تشغيل neo4j دون تعديل، مع بحث متجهي أصلي على القرص بجوار الرسم البياني، ويقبل كتابات حية ودائمة دون التخلي عن ذلك. يتم تحديد الذاكرة المقيمة بميزانية ذاكرة تخزين مؤقت تختارها أنت، وليس بحجم الرسم البياني.
اختصارات
قاعدة بيانات الرسوم البيانية تخزّن البيانات كـأشياء (عقد) والعلاقات بينها (حواف)، مع اعتبار العلاقات مواطنين من الدرجة الأولى. هذا ما تريده عندما تكون أسئلتك حول الاتصالات بدلاً من الصفوف — "من يقع ضمن ثلاث قفزات من هذا الحساب؟"، "ما هي سلسلة التبعيات الكاملة وراء هذا البناء؟"، "أي الحسابات تشترك في جهاز وعنوان وبطاقة؟" — الاستعلامات التي تتحول إلى مستنقع من الانضمامات العودية في SQL لكنها تخرج بشكل طبيعي في رسم بياني.
الشكوى الأكثر شيوعًا حول قواعد بيانات الرسوم البيانية هي أنها لا تتوسع إلى ما يتجاوز ما يمكنك الاحتفاظ به في RAM. العديد منها (مثل neo4j وMemgraph وFalkorDB وغيرها) يُبقي الرسم البياني كاملاً مقيمًا: رسم بياني بحجم 40 GB يتطلب 40 GB من الذاكرة — لكل مثيل. تريد نسخة متماثلة لكل منطقة أو مستأجر أو pod؟ اضرب الفاتورة. وبعد حجم معين لن يتم تحميلها ببساطة: على سبيل المثال، رسم Wikidata البياني الذي يضم 90 مليون عقدة / 1.5 مليار حافة يحتاج إلى ~64–128 GiB مقيمًا، لذا لا يمكن لمحركات الذاكرة فتحه إطلاقًا.
Slater هو الرد. بدلاً من تحميل الرسم البياني في الذاكرة، يقوم بتجميعه مرة واحدة، دون اتصال: يحوّل slater-build بياناتك إلى صورة على القرص غير قابلة للتغيير وموجهة بالمحتوى، ثم يخدم أي عدد من خوادم Slater تلك الصورة عبر Bolt (بحيث تعمل برامج تشغيل neo4j الحالية لديك دون تعديل)، مع ترحيل الكتل عند الطلب والاحتفاظ فقط بميزانية ذاكرة تخزين مؤقت ثابتة مقيمة. هكذا يخدم نفس الرسم البياني ذو 90 مليون عقدة من بضع مئات من ميغابايتات RAM — يتم فصل حجم الرسم البياني عن فاتورة الذاكرة. رسم بياني بحجم 4 GB ورسم بياني بحجم 400 GB يكلفان نفس RAM للخدمة، لذا يمكنك نشر نسخ متماثلة للقراءة رخيصة وعديمة الحالة والسماح للمخزن، وليس الكومة، بحمل الرسم البياني.
هذا يجعله مناسبًا بشكل طبيعي للرسوم البيانية المعرفية خلف RAG، ورسوم التوصيات والهوية، ورسوم التبعيات — أي شيء كبير ومترابط تريد الاستعلام عنه بتكلفة منخفضة وبشكل متكرر. البحث المتجهي الأصلي على القرص يعيش بجوار الرسم البياني مباشرة، لذا فإن نفس المحرك هو طبقة الاسترجاع للتضمينات أيضًا.
لكن التجميع مرة واحدة لا يعني التجميد. تلك الصورة هي أساس، وليست حالة نهائية: طبقة كتابة اختيارية تقع فوقها، بحيث يمكن تصحيح رسم بياني حي وتوسيعه دون إعادة بناء أي شيء.
النواة غير قابلة للتغيير؛ الرسم البياني ليس كذلك. فعّل الطبقة القابلة للكتابة (delta.enabled) وستكتب عبر Bolt — صحّح خاصية واحدة، أضف عقدة، اسحب حافة — وستُسجَّل التغييرات بشكل دائم، دون إعادة بناء الصورة. ما يُبقيها رخيصة على جانب القراءة هو مكان عيش الكتابات.
تتراكم الكتابات في طبقة دمج سجل-منظم (LSM) فوق النواة غير القابلة للتغيير: سجل كتابة مسبق وجدول في الذاكرة، مع انسكاب إلى مقاطع دلتا غير قابلة للتغيير، تُطوى مرة أخرى في نواة جديدة بواسطة توحيد دوري. ما الذي يشتريه لك ذلك:
count(*)، والهوامش الخاصة بالتسميات وأنواع العلاقات — تبقى قراءات بيانات وصفية حتى مع وجود كتابات معلقة: تحتفظ الدلتا بعداداتها الخاصة، لذا فإن count(*) عبر نواة بحجم 91.6 مليون عقدة مع نصف مليون كتابة معلقة لا يزال يجيب في عشرات المللي ثانية دون لمس كتلة واحدة.SUCCESS فقط بعد fsync الذي يغطي الكتابة. جمّع كتاباتك وستكون رخيصة — كتابة-UNWIND تلتزم fsync واحدًا لكل دفعة بدلاً من كل صف.MERGE / MATCH … SET / DELETE (وCREATE / REMOVE، وحذف الفصل، وكتابات العلاقات) مفتاحية على خاصية هوية العقدة — أو عبارات ISO GQL المكافئة لتعديل البيانات (INSERT / SET / REMOVE / DELETE)، التي تنزل على نفس المسار. صحّح وأدرج وحدّث واسحب، عبر العقد والحواف، موجهة بالطريقة التي تُخاطب بها بياناتك بالفعل.مع إيقاف الطبقة — الافتراضي — يخدم Slater النواة غير القابلة للتغيير النقية ويرفض الكتابات. راجع الطبقة القابلة للكتابة للنموذج الكامل.
حول الاسم. سُمي Slater على اسم عميل CIA في Archer (مسلسل رائع) الذي يصر على استخدام اسم واحد فقط — "فقط… Slater" — وهو أحد شخصياتي المفضلة فيه. راجع صفحة الويكي للشخصية.
MERGE / SET / DELETE بمفاتيح الأعمال عبر العقد والحواف، ملتزمة جماعيًا ودائمة عبر fsync، مطوية مرة أخرى في نواة جديدة بواسطة التوحيد. القراءات لا تدفع ثمنها.current بشكل ذري، وسيلتقطه الخوادم. كل كتلة مُدققة المجموع الاختباري، لذا تُرفض الصورة نصف المنسوخة بدلاً من خدمتها.