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

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

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

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

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

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

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

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

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

على عكس إصدار Standard، لا تنشئ عمليات 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()

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

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

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

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

التوافق مع وضع الاتصال بالإنترنت وبلا إنترنت

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

Client and Tooling Integration

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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