almessadi.
العودة إلى الفهرس

BRIN و GIN مهمان لأنهما يُحسّنان أحمال عمل مختلفة تمامًا_

يساعد BRIN في مجموعات البيانات الكبيرة المرتبة طبيعيًا، بينما يساعد GIN في المستندات، والمصفوفات، وعمليات البحث. معرفة الفرق توفر أموالًا حقيقية وزمن استجابة حقيقي.

تاريخ النشر5 أكتوبر 2024
وقت القراءة6 min read

تصبح عملية الفهرسة في PostgreSQL أسهل بكثير عندما تتوقف عن التفكير بكلمات “فهرس أو لا فهرس” وتبدأ في التفكير من حيث شكل أحمال العمل.

BRIN و GIN هما مثال جيد لأنهما يحلان مشاكل تقريبًا متناقضة.

متى يساعد BRIN

BRIN مفيد جدًا للجداول الكبيرة حيث تكون القيم مرتبطة طبيعيًا بترتيب الصفوف الفيزيائية، مثل:

  • الطوابع الزمنية في جداول الأحداث التي تُضاف فقط
  • معرفات تزيد بشكل أحادي
  • بيانات السلاسل الزمنية

يخزن ملخصات خفيفة لمدى الكتل بدلاً من فهرسة كل صف بشكل فردي. ولهذا السبب يمكن أن يكون صغيرًا مقارنة بشجرة B.

متى يساعد GIN

GIN مفيد عندما تحتاج إلى البحث داخل القيم المركبة:

  • jsonb
  • المصفوفات
  • المستندات النصية الكاملة

يقوم بفهرسة العناصر المحتواة بدلاً من معاملة القيمة بالكامل ككتلة غير شفافة.

مثال عملي

لجدول أحداث كبير:

CREATE INDEX events_created_at_brin_idx
ON events
USING BRIN (created_at);

لعمود jsonb:

CREATE INDEX users_preferences_gin_idx
ON users
USING GIN (preferences);

هذان كلاهما “فهارس”، لكنهما يحسنان أنواعًا مختلفة جدًا من الاستعلامات.

المقايضات

BRIN مضغوط ورخيص، ولكنه يعتمد على خصائص الترتيب. GIN قوي، لكنه عادة ما يكون أكبر وأكثر تكلفة للصيانة عند الكتابة.

لهذا السبب فإن السؤال الصحيح ليس “أي واحدة أسرع؟” بل “أي واحدة تتناسب مع نمط الوصول؟”

قراءة إضافية