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

يتألف وضع Firestore في Native من مجموعتَين من العمليات، وهما عمليات Firestore الأساسية وعمليات Firestore Pipeline.

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

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

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

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

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

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

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

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

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

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

ميزات عمليات Firestore Pipeline

يستخدم إصدار Firestore Enterprise مع عمليات Pipeline محرّك طلبات بحث متقدّمًا يزيل العديد من القيود الحالية في إصدار 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()

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

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

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

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

التوافق مع ميزتَي "التعاون في الوقت الفعلي" و"العمل بلا إنترنت"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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