نظرة عامة على Firestore في "الوضع الأصلي"

يتألف Firestore في "الوضع الأصلي" من مجموعتَين من العمليات: عمليات Firestore الأساسية وعمليات مسار Firestore.

توفّر عمليات Firestore الأساسية الوظائف القياسية لإنشاء المستندات وقراءتها وتعديلها وحذفها، بالإضافة إلى دعم مدمج لطلبات الاستماع في الوقت الفعلي واستمرار البيانات بلا إنترنت. يتمثل أحد الاختلافات التشغيلية المميّزة في هذا الإصدار في أنّ الفهارس اختيارية ولا يتم إنشاؤها تلقائيًا للحقول الفردية. في حين يسمح ذلك بتنفيذ طلبات البحث بدون إعداد الفهرس مسبقًا، ستؤدي طلبات البحث غير المفهرسة إلى إجراء عملية فحص تلقائية للمجموعة بأكملها. يمكن أن يؤدي ذلك إلى زيادة وقت الاستجابة والتكاليف مع نمو مجموعة البيانات.

عمليات مسار Firestore هي ميزة أساسية في إصدار Firestore Enterprise، وهي تستند إلى محرّك طلبات بحث متقدّم لتوسيع نطاق طلبات البحث الممكنة بشكلٍ كبير. تستخدم عمليات المسار بنية طلب بحث مرنة وطريقة فهرسة مميّزة تكون فيها الفهارس اختيارية ولا يتم إنشاؤها تلقائيًا، ما يتيح عمليات استرداد البيانات المتقدّمة للتطبيقات.

ميزات عمليات Firestore الأساسية

تسمح العمليات الأساسية بإجراء العمليات القياسية لإنشاء المستندات وقراءتها وتعديلها وحذفها وطلبات الاستماع في الوقت الفعلي. ومع ذلك، عند استخدام هذه العمليات في إصدار Enterprise، يتغيّر السلوك الأساسي بشكلٍ كبير في ما يتعلق بالفهرسة والفوترة مقارنةً بالإصدار Standard.

الوظائف والاستمرارية

تحتفظ العمليات الأساسية ببنية ربط الطرق المألوفة (على سبيل المثال، .where() و.orderBy()) المستخدَمة في الإصدار Standard. تتيح هذه العمليات طلبات الاستماع في الوقت الفعلي واستمرار البيانات بلا إنترنت لعملاء الأجهزة الجوّالة والويب. يُنصح باستخدام هذه العمليات لأحمال العمل المعاملاتية القياسية وعمليات البحث البسيطة ونقل الرمز البرمجي للتطبيق الحالي.

الفهرسة المخصّصة

على عكس الإصدار Standard، لا تنشئ العمليات الأساسية في إصدار Enterprise فهارس للحقول الفردية تلقائيًا. الفهارس اختيارية وليست مطلوبة لتنفيذ طلب بحث. إذا كان هناك فهرس معيّن غير متوفّر، يُجري طلب البحث عملية فحص كاملة للمجموعة. في حين أنّ طلبات البحث غير المفهرسة تسمح بإنشاء نماذج أولية بسرعة، قد يكون أداؤها أبطأ وتكلّف أكثر مع نمو مجموعة البيانات. على المطوّرين إنشاء الفهارس يدويًا لتحسين أداء طلبات البحث وتقليل استهلاك وحدات القراءة.

نموذج الفوترة (استنادًا إلى الوحدات)

يتم تحصيل رسوم وحدات القراءة على شكل شرائح بحجم 4 كيلوبايت بدلاً من تحصيلها لكل مستند. سيؤدي طلب بحث غير مفهرس يفحص مجموعة كبيرة إلى استهلاك وحدات القراءة استنادًا إلى إجمالي البايتات التي تم فحصها في جميع المستندات. يتم تحصيل رسوم وحدات الكتابة على شكل شرائح بحجم 1 كيلوبايت. تؤدي كتابة مستند إلى استهلاك وحدات للبيانات بالإضافة إلى وحدات إضافية لكل إدخال فهرس يتم تعديله. على عكس الإصدار Standard الذي يفرض الفهرسة التلقائية للحقول الفردية، يمكنك الآن اختيار حقول معيّنة لفهرستها من أجل تحسين تكاليف الكتابة والأداء.

ميزات عمليات مسار Firestore

يستخدم إصدار Firestore Enterprise مع عمليات المسار محرّك طلبات بحث متقدّمًا يزيل العديد من القيود الحالية في إصدار Firestore Standard. توفّر عمليات المسار مئات من ميزات طلبات البحث الإضافية. تتضمّن عمليات المسار الإمكانات التالية:

بنية قابلة للإنشاء تستند إلى المراحل

يتم إنشاء طلبات بحث المسار من خلال تحديد سلسلة من المراحل المتسلسلة التي يتم تنفيذها بالترتيب. يسمح ذلك بإجراء عمليات معقّدة، مثل الفلترة استنادًا إلى نتيجة عملية تجميع، وهو ما لم يكن ممكنًا من قبل.

يعرض المثال التالي طلب بحث مسار يعثر على عدد معرّفات المنتجات الفريدة التي تم عرضها في الشهر الماضي:

guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
  return
}
let snapshot = try await db.pipeline()
  .collection("productViews")
  .where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
  .aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
  .execute()

الإمكانات الموسّعة

يقدّم طلب بحث المسار عددًا كبيرًا من الإمكانات الجديدة، بما في ذلك:

  • عمليات التجميع: تتيح هذه العمليات استخدام دوال تجميع جديدة (مثل sum(...) وmin(...) وcount_distinct(...)) مع حقول التجميع العشوائية.
  • عمليات الربط العلائقية: يمكنك إجراء عمليات ربط من جهة الخادم بين المجموعات والمجموعات الفرعية باستخدام طلبات البحث الفرعية المرتبطة.
  • الفلترة المعقّدة: تتيح هذه العمليات استخدام مئات من الدوال الإضافية للتعبير عن عبارات where(...) المعقّدة بشكلٍ عشوائي، بما في ذلك regex_match(...) وadd(...) وstr_contains(...)، وكل ذلك بدون متطلبات فهرسة صارمة.
  • عمليات القراءة الجزئية / عمليات الإسقاط: يمكنك استرداد مجموعات فرعية ديناميكية من المستندات باستخدام select(...) وremove_fields(...) والعديد من مراحل معالجة المستندات الأخرى.

لمزيد من المعلومات عن هذه الإمكانات، يُرجى الاطّلاع على مقالة طلب البيانات باستخدام عمليات المسار.

الدعم في الوقت الفعلي وبلا إنترنت

لاستخدام ميزتَي "في الوقت الفعلي" و"بلا إنترنت"، يمكن للمطوّرين استخدام عمليات Firestore الأساسية في إصدار Firestore Enterprise.

تكامل العملاء والأدوات

يتضمّن إصدار Enterprise ميزات متخصّصة للتفاعل مع طلبات بحث المسار وإدارتها:

  • شرح طلب البحث وإنشاء ملفه الشخصي: يمكنك استخدام نتائج "شرح طلب البحث" لفهم عدد وحدات القراءة أو الكتابة التي يستهلكها طلب البحث وتحليل تنفيذه.
  • إحصاءات طلبات البحث: يتيح إصدار Enterprise ميزة "إحصاءات طلبات البحث" التي تساعدك في تحديد المواضع التي يمكن فيها إنشاء الفهارس لتحسين الأداء والتكلفة من خلال توفير إمكانية الاطّلاع على أهم طلبات البحث التي يتم تنفيذها على قاعدة بياناتك وخصائص أدائها.
  • أنواع الفهارس الجديدة: يمكنك إنشاء فهارس متخصّصة لإصدار Enterprise، بما في ذلك أنواع الفهارس مثل الفهارس غير الكثيفة والفهارس الكثيفة والفهارس الفريدة. يتيح هذا الإصدار أيضًا إنشاء فهارس البحث المتّجهي وتعديلها لقواعد بيانات Enterprise.

الاختلافات بين إصدار Firestore Standard وإصدار Firestore Enterprise

يكمن الاختلاف التشغيلي الرئيسي بين العمليات الأساسية وعمليات المسار في إدارة الفهرسة، ما يؤثر بشكلٍ مباشر في الأداء والتكلفة.

إصدار Standard - العمليات الأساسية إصدار Enterprise - العمليات الأساسية وعمليات المسار
متطلبات الفهرسة الفهارس مطلوبة لطلبات البحث.

يتم إنشاء فهارس للحقول الفردية تلقائيًا، بينما تعتمد طلبات البحث الأكثر تعقيدًا على الفهارس المركّبة أو فهارس مجموعة المجموعة التي يجب إعدادها يدويًا.

الفهارس غير مطلوبة، وبالتالي فهي اختيارية لطلبات البحث.

يمكنك تحديد الفهارس حسب الحاجة. يتيح إصدار Enterprise أيضًا نطاقًا أوسع من أنواع الفهارس، بما في ذلك الفهارس غير الكثيفة/الكثيفة والفهارس الفريدة.

الحقول المفهرسة يتم تلقائيًا إلحاق حقل إضافي __name__ بالحقول المفهرسة إذا لم يكن موجودًا من قبل. __name__ لا يتم إلحاقه تلقائيًا بالحقول المفهرسة. عليك تحديد __name__ بشكلٍ صريح في الحقول المفهرسة إذا كان مهمًا لتطبيقك.
تسوية ترتيب الفرز يتم تسوية عبارة الترتيب حسب في طلب البحث من خلال إلحاق حقول عدم المساواة وحقل __name__ في النهاية (إذا لم يكن موجودًا من قبل). يضمن ذلك ترتيبًا فريدًا ومحددًا للنتائج بغض النظر عن الحقول الأخرى في عبارة الترتيب حسب. لا يتم تسوية ترتيب الفرز. لا يضمن ترتيب الفرز، مثل sort a ASC، سوى فرز النتائج حسب الحقل a. Cloud Firestore سيستخدم فهارسك الحالية لعرض النتائج بالترتيب الأكثر فعالية ممكنًا. لذلك، إذا لم يكن a فريدًا في مجموعة النتائج، قد يختلف ترتيب النتائج من طلب بحث إلى آخر استنادًا إلى إعداد الفهرس واستراتيجيات التنفيذ وما إلى ذلك. لضمان ترتيب فريد ومحدد للنتائج، عليك إضافة حقل فريد، مثل __name__، إلى ترتيب الفرز.
الأداء طلبات البحث المفهرسة: يتناسب الأداء والتكلفة مع حجم مجموعة النتائج.

طلبات البحث غير المفهرسة: يتناسب الأداء والتكلفة مع حجم مجموعة البيانات.

طلبات البحث المفهرسة: يتناسب الأداء والتكلفة مع حجم مجموعة النتائج.

ننصحك باستخدام أداتَي "شرح طلب البحث" و"إحصاءات طلبات البحث" لإنشاء الفهارس وتحسين أداء طلبات البحث وتكلفتها.

تأثير تكلفة التخزين تتحمّل تكاليف إضافية للتخزين من الفهارس التلقائية والفهارس المركّبة. يمكنك توفير تكاليف التخزين لأنّه لا يتم إنشاء الفهارس تلقائيًا لكل حقل.
أساس التكلفة يتم تحصيل الرسوم لكل عملية قراءة وكتابة وحذف مستند. يتم تحصيل الرسوم لكل وحدة قراءة (شرائح بحجم 4 كيلوبايت) ووحدة كتابة (شرائح بحجم 1 كيلوبايت). تؤدي كتابة إدخالات الفهرس إلى استهلاك وحدات الكتابة.

تعلَّف على الأسعار الجديدة مع بعض الـ أمثلة.

قواعد الأمان تحمي قواعد الأمان المجموعات من خلال التحقّق من أذونات القراءة والكتابة. تحمي قواعد الأمان المجموعات من خلال التحقّق من أذونات القراءة والكتابة. تعلَّف على كيفية تصميم بياناتك لدعم طلبات بحث المسار في دليل نموذج البيانات.