يتكوّن Firestore في "الوضع الأصلي" من مجموعتَين من العمليات: عمليات Firestore الأساسية وعمليات مسار Firestore.
توفّر عمليات Firestore Core وظائف المستندات الأساسية، مثل الإنشاء والقراءة والتعديل والحذف (CRUD)، بالإضافة إلى دعم مدمج لطلبات الاستماع في الوقت الفعلي والاحتفاظ بالبيانات بلا إنترنت. يتمثل الاختلاف التشغيلي المميز في هذا الإصدار في أن الفهارس اختيارية ولا يتم إنشاؤها تلقائيًا للحقول الفردية. على الرغم من أنّ ذلك يسمح بتنفيذ طلبات البحث بدون ضبط الفهرس مسبقًا، فإنّ طلبات البحث غير المفهرَسة ستؤدي تلقائيًا إلى فحص المجموعة بأكملها. يمكن أن يؤدي ذلك إلى زيادة وقت الاستجابة والتكاليف مع نمو مجموعة البيانات.
تُعدّ عمليات "مسارات Firestore" ميزة أساسية في إصدار Firestore Enterprise، وهي تستند إلى محرّك طلبات بحث متقدّم لتوسيع نطاق طلبات البحث الممكنة بشكل كبير. تستخدم عمليات المسارات بنية مرنة لطلبات البحث وطريقة فهرسة مميزة حيث تكون الفهارس اختيارية ولا يتم إنشاؤها تلقائيًا، مما يتيح عمليات استرداد البيانات المتقدمة للتطبيقات.
ميزات عمليات Firestore الأساسية
تتيح العمليات الأساسية تنفيذ عمليات الإنشاء والقراءة والتعديل والحذف الأساسية وطلبات البحث عن البيانات في الوقت الفعلي. ومع ذلك، عند استخدام هذه العمليات في إصدار Enterprise، يتغير السلوك الأساسي المتعلق بالفهرسة والفوترة بشكل كبير مقارنةً بالإصدار Standard.
الوظائف والاستمرارية
تحتفظ العمليات الأساسية ببنية تسلسل الطرق المألوفة (على سبيل المثال، .where() و.orderBy()) المستخدَمة في الإصدار العادي. وتتيح هذه العمليات طلبات الاستماع في الوقت الفعلي والاحتفاظ بالبيانات بلا إنترنت لعملاء الأجهزة الجوّالة والويب. ننصحك باستخدام هذه العمليات لأعباء العمل العادية المتعلقة بالمعاملات وعمليات البحث البسيطة ونقل الرموز البرمجية للتطبيقات الحالية.
الفهرسة المخصّصة
على عكس الإصدار العادي، لا تؤدي عمليات Core في إصدار Enterprise إلى إنشاء فهارس أحادية الحقل تلقائيًا. تُعد الفهارس اختيارية وليست مطلوبة لتنفيذ طلب بحث. إذا لم يتوفّر فهرس معيّن، ينفّذ طلب البحث عملية فحص كاملة للمجموعة. وعلى الرغم من أنّ طلبات البحث غير المفهرَسة تتيح إنشاء النماذج الأولية بسرعة، قد يكون أداؤها أبطأ وتكلفتها أعلى مع نمو مجموعة البيانات. على المطوّرين إنشاء الفهارس يدويًا لتحسين أداء طلبات البحث وتقليل استهلاك وحدات القراءة.
نموذج الفوترة (المستند إلى الوحدات)
يتم تحصيل رسوم وحدات القراءة في شرائح بحجم 4 كيلوبايت بدلاً من عدد المستندات. سيستهلك طلب البحث غير المفهرَس الذي يفحص مجموعة كبيرة وحدات قراءة استنادًا إلى إجمالي وحدات البايت التي تم فحصها في جميع المستندات. يتم تحصيل رسوم وحدات الكتابة في شرائح تبلغ 1 كيلوبايت. تستهلك كتابة مستند وحدات للبيانات بالإضافة إلى وحدات إضافية لكل إدخال فهرس يتم تحديثه. على عكس الإصدار العادي الذي يفرض الفهرسة التلقائية للحقول الفردية، يمكنك الآن اختيار حقول معيّنة لفهرستها من أجل تحسين تكاليف الكتابة والأداء.
ميزات عمليات Firestore Pipeline
يستخدم إصدار 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 وإدارتها:
- توضيح طلبات البحث وتحليلها: يمكنك استخدام نتائج ميزة "توضيح طلب البحث" لفهم عدد وحدات القراءة أو الكتابة التي يستهلكها طلب البحث وتحليل تنفيذه.
- إحصاءات طلبات البحث: يتيح إصدار 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 في دليل نموذج البيانات. |