يتألف 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 كيلوبايت). تستهلك كتابة إدخالات الفهرس وحدات كتابة.
مزيد من المعلومات عن الأسعار الجديدة مع بعض الـ أمثلة. |
| قواعد الأمان | تحمي قواعد الأمان المجموعات من خلال التحقّق من أذونات القراءة والكتابة. | تحمي قواعد الأمان المجموعات من خلال التحقّق من أذونات القراءة والكتابة. تعلَّف على كيفية تصميم بياناتك لدعم طلبات بحث مسار البيانات في دليل نموذج البيانات. |