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

يتكوّن Firestore في "الوضع الأصلي" من مجموعتَين من العمليات: عمليات Firestore Core وعمليات Firestore Pipeline.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

يمكنك الاطّلاع على الأسعار الجديدة من خلال بعض الأمثلة.

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