الفهارس هي عامل مهم في أداء قاعدة البيانات. يشبه إلى حد كبير فهرس الكتاب الذي يقوم بتعيين الموضوعات في كتاب إلى أرقام الصفحات ، يقوم فهرس قاعدة البيانات بتعيين العناصر الموجودة في قاعدة البيانات إلى مواقعها في قاعدة البيانات. عند إرسال استعلام إلى قاعدة بيانات ، يمكن لقاعدة البيانات استخدام فهرس للبحث بسرعة عن مواقع العناصر التي طلبتها.
تصف هذه الصفحة نوعين من الفهارس التي يستخدمها Cloud Firestore ، فهارس الحقل الفردي والفهارس المركبة .
فهرس خلف كل استعلام
في حالة عدم وجود فهرس لاستعلام ما ، تقوم معظم قواعد البيانات بالزحف عبر محتوياتها عنصرًا تلو الآخر ، وهي عملية بطيئة تتباطأ أكثر مع نمو قاعدة البيانات. يضمن Cloud Firestore أداءً عاليًا للاستعلام باستخدام الفهارس لجميع الاستعلامات. نتيجة لذلك ، يعتمد أداء الاستعلام على حجم مجموعة النتائج وليس على عدد العناصر في قاعدة البيانات.
إدارة فهرس أقل ، تطوير تطبيقات أكثر
يتضمن Cloud Firestore ميزات تقلل مقدار الوقت الذي تحتاجه لقضاء إدارة الفهارس. يتم إنشاء الفهارس المطلوبة لمعظم الاستعلامات الأساسية تلقائيًا بالنيابة عنك. أثناء استخدامك لتطبيقك واختباره ، يساعدك Cloud Firestore في تحديد وإنشاء فهارس إضافية يتطلبها تطبيقك.
أنواع الفهرس
يستخدم Cloud Firestore نوعين من الفهارس: أحادي الحقل ومركب . إلى جانب عدد الحقول المفهرسة ، تختلف الفهارس أحادية الحقل والمركبة في كيفية إدارتك لها.
فهارس ذات مجال واحد
يخزن الفهرس أحادي الحقل مخططًا تم فرزهًا لجميع المستندات في مجموعة تحتوي على حقل معين. يسجل كل إدخال في فهرس أحادي الحقل قيمة المستند لحقل معين وموقع المستند في قاعدة البيانات. يستخدم Cloud Firestore هذه الفهارس لإجراء العديد من الاستعلامات الأساسية. يمكنك إدارة فهارس الحقل الفردي عن طريق تكوين إعدادات الفهرسة التلقائية وإعفاءات الفهرس لقاعدة البيانات الخاصة بك.
الفهرسة التلقائية
بشكل افتراضي ، يحتفظ Cloud Firestore تلقائيًا بفهارس الحقل الفردي لكل حقل في المستند وكل حقل فرعي في الخريطة. يستخدم Cloud Firestore الإعدادات الافتراضية التالية لفهارس الحقل الفردي:
لكل حقل غير مصفوف وغير خريطة ، تحدد Cloud Firestore فهرسين أحاديي المجال لنطاق المجموعة ، أحدهما في الوضع التصاعدي والآخر في الوضع التنازلي.
لكل حقل خريطة ، يُنشئ Cloud Firestore ما يلي:
- فهرس تصاعدي واحد لنطاق المجموعة لكل حقل فرعي غير مصفوف وليس خريطة.
- فهرس تنازلي واحد لنطاق المجموعة لكل حقل فرعي غير مصفوف وليس خريطة.
- يحتوي صفيف نطاق مجموعة واحد على فهرس لكل حقل فرعي للصفيف.
- يقوم Cloud Firestore بفهرسة كل حقل فرعي للخريطة بشكل متكرر.
لكل حقل مصفوفة في مستند ، ينشئ Cloud Firestore فهرسًا يحتوي على مصفوفة نطاق المجموعة ويحافظ عليه.
لا يتم الاحتفاظ بالفهارس ذات المجال الفردي بنطاق مجموعة المجموعة افتراضيًا.
إعفاءات مؤشر الحقل الواحد
يمكنك استثناء حقل من إعدادات الفهرسة التلقائية الخاصة بك عن طريق إنشاء استثناء فهرس ذو حقل واحد. يتجاوز استثناء الفهرسة إعدادات الفهرس التلقائي لقاعدة البيانات. يمكن للإعفاء أن يمكّن فهرسًا أحادي الحقل يمكن أن تقوم إعدادات الفهرسة التلقائية الخاصة بك بتعطيله أو تعطيله ، بخلاف ذلك ، فهرس أحادي الحقل يمكن للفهرسة التلقائية تمكينه. للحالات التي يمكن أن تكون فيها الاستثناءات مفيدة ، راجع أفضل ممارسات الفهرسة .
إذا قمت بإنشاء استثناء فهرس أحادي الحقل لحقل خريطة ، فإن الحقول الفرعية للخريطة ترث تلك الإعدادات. ومع ذلك ، يمكنك تحديد استثناءات الفهرس أحادي الحقل لحقول فرعية محددة. إذا قمت بحذف استثناء لحقل فرعي ، فسيرث الحقل الفرعي إعدادات الإعفاء الخاصة به ، إذا كانت موجودة ، أو الإعدادات على مستوى قاعدة البيانات في حالة عدم وجود استثناءات أصل.
لإنشاء استثناءات الفهرس أحادي الحقل وإدارتها ، راجع إدارة الفهارس في Cloud Firestore .
فهارس مركبة
يخزن الفهرس المركب مخططًا تم فرزهًا لجميع المستندات في مجموعة ، بناءً على قائمة مرتبة من الحقول للفهرسة.
يستخدم Cloud Firestore فهارس مركبة لدعم الاستعلامات التي لا تدعمها بالفعل فهارس الحقل الفردي.
لا يُنشئ Cloud Firestore تلقائيًا فهارس مركبة كما يفعل لفهارس الحقل الفردي بسبب العدد الكبير من مجموعات الحقول الممكنة. بدلاً من ذلك ، يساعدك Cloud Firestore في تحديد وإنشاء الفهارس المركبة المطلوبة أثناء إنشاء تطبيقك.
إذا حاولت إجراء الاستعلام أعلاه دون إنشاء الفهرس المطلوب أولاً ، فستُرجع Cloud Firestore رسالة خطأ تحتوي على ارتباط يمكنك اتباعه لإنشاء الفهرس المفقود. يحدث هذا في أي وقت تحاول فيه استعلامًا لا يدعمه فهرس. يمكنك أيضًا تحديد الفهارس المركبة وإدارتها يدويًا باستخدام وحدة التحكم أو باستخدام Firebase CLI . لمعرفة المزيد حول إنشاء الفهارس المركبة وإدارتها ، راجع إدارة الفهارس .
أوضاع الفهرس ونطاقات الاستعلام
يمكنك تكوين الفهارس ذات الحقل الواحد والفهارس المركبة بشكل مختلف ، لكن كلاهما يتطلب تكوين أوضاع الفهرس ونطاقات الاستعلام لفهارسك.
أوضاع الفهرس
عندما تحدد فهرسًا ، فإنك تحدد وضع الفهرس لكل حقل مفهرس. يدعم وضع فهرس كل حقل عبارات استعلام محددة في هذا الحقل. يمكنك الاختيار من بين أوضاع الفهرس التالية:
وضع الفهرس | وصف |
---|---|
تصاعدي | == < <= >= > != in not-in |
تنازلي | >= == <= < > != in not-in |
المصفوفة ‑ تحتوي على | يدعم array-contains و array-contains-any عبارات استعلام في الحقل. |
نطاقات الاستعلام
يتم تحديد نطاق كل فهرس إلى مجموعة أو مجموعة مجموعة. يُعرف هذا بنطاق استعلام الفهرس:
- نطاق المجموعة
- ينشئ Cloud Firestore فهارس بنطاق تجميع افتراضيًا. تدعم هذه الفهارس الاستعلامات التي ترجع نتائج من مجموعة واحدة.
- نطاق مجموعة المجموعة
- تتضمن مجموعة المجموعات جميع المجموعات التي لها نفس معرف المجموعة. لتشغيل استعلام مجموعة المجموعة الذي يقوم بإرجاع نتائج مُصفاة أو مرتبة من مجموعة مجموعة ، يجب عليك إنشاء فهرس مناظر بنطاق مجموعة المجموعة.
الترتيب الافتراضي وحقل __name__
بالإضافة إلى فرز المستندات حسب أوضاع الفهرس المحددة لكل حقل (تصاعديًا أو تنازليًا) ، تطبق الفهارس الفرز النهائي حسب الحقل __name__
لكل مستند. يتم تعيين قيمة الحقل __name__
على مسار المستند الكامل. هذا يعني أنه يتم فرز المستندات الموجودة في مجموعة النتائج التي لها نفس قيم الحقل حسب مسار المستند.
بشكل افتراضي ، يتم فرز الحقل __name__
في نفس اتجاه آخر حقل تم فرزه في تعريف الفهرس. على سبيل المثال:
مجموعة | الحقول المفهرسة | نطاق الاستعلام |
---|---|---|
مدن | __name__ | name ، مجموعة |
مدن | الحالة __name__ | ، مجموعة |
مدن | __name__ | country، Population، مجموعة |
لفرز النتائج حسب الاتجاه غير الافتراضي __name__
، تحتاج إلى إنشاء هذا الفهرس.
مثال على الفهرسة
من خلال إنشاء فهارس ذات حقل واحد تلقائيًا ، يتيح Cloud Firestore لتطبيقك دعم استعلامات قاعدة البيانات الأساسية بسرعة. تسمح لك الفهارس أحادية الحقل بإجراء استعلامات بسيطة استنادًا إلى قيم الحقول والمقارنات <
، <=
، ==
، >=
، >
، in
. بالنسبة لحقول المصفوفة ، تسمح لك بتنفيذ array-contains
على array-contains-any
استعلامات.
للتوضيح ، افحص الأمثلة التالية من وجهة نظر إنشاء الفهرس. يُنشئ المقتطف التالي بعض مستندات city
في مجموعة cities
ويعين حقول name
state
country
ورأس capital
population
tags
لكل مستند:
الويب
var citiesRef = db.collection("cities"); citiesRef.doc("SF").set({ name: "San Francisco", state: "CA", country: "USA", capital: false, population: 860000, regions: ["west_coast", "norcal"] }); citiesRef.doc("LA").set({ name: "Los Angeles", state: "CA", country: "USA", capital: false, population: 3900000, regions: ["west_coast", "socal"] }); citiesRef.doc("DC").set({ name: "Washington, D.C.", state: null, country: "USA", capital: true, population: 680000, regions: ["east_coast"] }); citiesRef.doc("TOK").set({ name: "Tokyo", state: null, country: "Japan", capital: true, population: 9000000, regions: ["kanto", "honshu"] }); citiesRef.doc("BJ").set({ name: "Beijing", state: null, country: "China", capital: true, population: 21500000, regions: ["jingjinji", "hebei"] });
بافتراض إعدادات الفهرسة التلقائية الافتراضية ، يقوم Cloud Firestore بتحديث فهرس واحد تصاعدي أحادي الحقل لكل حقل غير مصفوف ، وفهرس واحد تنازلي أحادي الحقل لكل حقل غير مصفوفة ، ويحتوي صفيف واحد على فهرس حقل واحد لحقل الصفيف. يمثل كل صف في الجدول التالي مدخلاً في فهرس حقل واحد:
مجموعة | حقل مفهرس | نطاق الاستعلام |
---|---|---|
مدن | اسم | مجموعة |
مدن | دولة | مجموعة |
مدن | دولة | مجموعة |
مدن | رأس المال | مجموعة |
مدن | السكان | مجموعة |
مدن | اسم | مجموعة |
مدن | دولة | مجموعة |
مدن | دولة | مجموعة |
مدن | رأس المال | مجموعة |
مدن | مجموعة | |
مدن | array-contains مناطق | مجموعة |
الاستعلامات التي تدعمها فهارس ذات حقل واحد
باستخدام هذه الفهارس أحادية الحقل التي تم إنشاؤها تلقائيًا ، يمكنك تشغيل استعلامات بسيطة مثل ما يلي:
الويب
const stateQuery = citiesRef.where("state", "==", "CA"); const populationQuery = citiesRef.where("population", "<", 100000); const nameQuery = citiesRef.where("name", ">=", "San Francisco");
يمكنك أيضًا إنشاء in
استعلامات المساواة ( ==
):
الويب
citiesRef.where('country', 'in', ["USA", "Japan", "China"]) // Compound equality queries citiesRef.where("state", "==", "CO").where("name", "==", "Denver") citiesRef.where("country", "==", "USA") .where("capital", "==", false) .where("state", "==", "CA") .where("population", "==", 860000)
إذا كنت بحاجة إلى تشغيل استعلام مركب يستخدم مقارنة نطاق ( <
أو <=
>
أو >=
) أو إذا كنت بحاجة إلى الفرز حسب حقل مختلف ، فيجب عليك إنشاء فهرس مركب لهذا الاستعلام.
يسمح لك array-contains
مصفوفة بالاستعلام عن حقل مصفوفة regions
:
الويب
citiesRef.where("regions", "array-contains", "west_coast") // array-contains-any and array-contains use the same indexes citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
الاستعلامات التي تدعمها الفهارس المركبة
يستخدم Cloud Firestore الفهارس المركبة لدعم الاستعلامات المركبة التي لا تدعمها بالفعل فهارس الحقل الفردي. على سبيل المثال ، قد تحتاج إلى فهرس مركب لطلبات البحث التالية:
الويب
citiesRef.where("country", "==", "USA").orderBy("population", "asc") citiesRef.where("country", "==", "USA").where("population", "<", 3800000) citiesRef.where("country", "==", "USA").where("population", ">", 690000) // in and == clauses use the same index citiesRef.where("country", "in", ["USA", "Japan", "China"]) .where("population", ">", 690000)
تتطلب هذه الاستعلامات الفهرس المركب أدناه. نظرًا لأن الاستعلام يستخدم المساواة ( ==
أو in
) لحقل country
، يمكنك استخدام وضع الفهرس التصاعدي أو التنازلي لهذا الحقل. بشكل افتراضي ، تطبق عبارات عدم المساواة ترتيب فرز تصاعديًا استنادًا إلى الحقل في عبارة عدم المساواة.
مجموعة | الحقول المفهرسة | نطاق الاستعلام |
---|---|---|
مدن | (أو ) البلد ، السكان | مجموعة |
لتشغيل نفس الاستعلامات ولكن بترتيب فرز تنازلي ، تحتاج إلى فهرس مركب إضافي في الاتجاه التنازلي population
:
الويب
citiesRef.where("country", "==", "USA").orderBy("population", "desc") citiesRef.where("country", "==", "USA") .where("population", "<", 3800000) .orderBy("population", "desc") citiesRef.where("country", "==", "USA") .where("population", ">", 690000) .orderBy("population", "desc") citiesRef.where("country", "in", ["USA", "Japan", "China"]) .where("population", ">", 690000) .orderBy("population", "desc")
مجموعة | الحقول المفهرسة | نطاق الاستعلام |
---|---|---|
مدن | country، تعداد السكان | مجموعة |
مدن | country ، السكان | مجموعة |
تحتاج أيضًا إلى إنشاء فهرس مركب لدمج array-contains
أو array-contains-any
استعلام مع عبارات إضافية.
الويب
citiesRef.where("regions", "array-contains", "east_coast") .where("capital", "==", true) // array-contains-any and array-contains use the same index citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"]) .where("capital", "==", true)
مجموعة | الحقول المفهرسة | نطاق الاستعلام |
---|---|---|
مدن | مجموعة تحتوي على علامات ، | (أو ) رأس مالمجموعة |
الاستعلامات التي تدعمها فهارس مجموعة المجموعة
لتوضيح فهرس بنطاق مجموعة المجموعة ، تخيل أنك تضيف مجموعة فرعية landmarks
إلى بعض مستندات city
:
الويب
var citiesRef = db.collection("cities"); citiesRef.doc("SF").collection("landmarks").doc().set({ name: "Golden Gate Bridge", category : "bridge" }); citiesRef.doc("SF").collection("landmarks").doc().set({ name: "Golden Gate Park", category : "park" }); citiesRef.doc("DC").collection("landmarks").doc().set({ name: "National Gallery of Art", category : "museum" }); citiesRef.doc("DC").collection("landmarks").doc().set({ name: "National Mall", category : "park" });
باستخدام فهرس الحقل الفردي التالي مع نطاق المجموعة ، يمكنك الاستعلام عن مجموعة landmarks
مدينة واحدة بناءً على حقل category
:
مجموعة | الحقول المفهرسة | نطاق الاستعلام |
---|---|---|
معالم | (أو ) | مجموعة |
الويب
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park") citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])
الآن ، تخيل أنك مهتم بالاستعلام عن المعالم في جميع المدن. لتشغيل هذا الاستعلام في مجموعة المجموعة التي تتكون من جميع مجموعات landmarks
، يجب تمكين landmarks
حقل واحد للمعالم مع نطاق مجموعة المجموعة:
مجموعة | الحقول المفهرسة | نطاق الاستعلام |
---|---|---|
معالم | (أو ) | مجموعة التحصيل |
مع تمكين هذا الفهرس ، يمكنك الاستعلام عن مجموعة مجموعة landmarks
:
الويب
var landmarksGroupRef = db.collectionGroup("landmarks"); landmarksGroupRef.where("category", "==", "park") landmarksGroupRef.where("category", "in", ["park", "museum"])
لتشغيل استعلام مجموعة المجموعة الذي يقوم بإرجاع نتائج مُصفاة أو مرتبة ، يجب أن تقوم بتمكين حقل واحد أو فهرس مركب مناظر مع نطاق مجموعة المجموعة. ومع ذلك ، لا تتطلب استعلامات مجموعة المجموعات التي لا تقوم بتصفية النتائج أو ترتيبها أي تعريفات فهرسة إضافية.
على سبيل المثال ، يمكنك تشغيل استعلام مجموعة المجموعات التالي دون تمكين فهرس إضافي:
الويب
db.collectionGroup("landmarks").get()
إدخالات الفهرس
تحدد الفهارس المكونة لمشروعك وهيكل المستند عدد إدخالات الفهرس للمستند. يتم حساب إدخالات الفهرس في حدود عدد مدخلات الفهرس .
يوضح المثال التالي مدخلات الفهرس لمستند.
وثيقة
/cities/SF
city_name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]
فهارس أحادية المجال
- city_name ASC
- اسم_المدينة DESC
- درجات حرارة الصيف ASC
- درجات حرارة الصيف DESC
- درجات حرارة الشتاء ASC
- درجات حرارة الشتاء DESC
- مجموعة الأحياء تحتوي على (ASC و DESC)
فهارس مركبة
- city_name ASC ، الأحياء ARRAY
- city_name DESC ، الأحياء ARRAY
إدخالات الفهرس
ينتج عن تكوين الفهرسة هذا إدخالات الفهرس الـ 18 التالية للمستند:
فِهرِس | البيانات المفهرسة |
---|---|
مدخلات فهرس ذات حقل واحد | |
city_name ASC | city_name: "سان فرانسيسكو" |
اسم_المدينة DESC | city_name: "سان فرانسيسكو" |
درجات حرارة الصيف ASC | درجات الحرارة في الصيف: 67 |
درجات حرارة الصيف DESC | درجات الحرارة في الصيف: 67 |
درجات حرارة الشتاء ASC | درجات الحرارة في الشتاء: 55 |
درجات حرارة الشتاء DESC | درجات الحرارة في الشتاء: 55 |
مجموعة الأحياء تحتوي على ASC | الأحياء: "المهمة" |
مجموعة الأحياء تحتوي على DESC | الأحياء: "المهمة" |
مجموعة الأحياء تحتوي على ASC | الأحياء: "وسط المدينة" |
مجموعة الأحياء تحتوي على DESC | الأحياء: "وسط المدينة" |
مجموعة الأحياء تحتوي على ASC | الأحياء: "مارينا" |
مجموعة الأحياء تحتوي على DESC | الأحياء: "مارينا" |
مدخلات الفهرس المركب | |
city_name ASC ، الأحياء ARRAY | city_name: "سان فرانسيسكو" ، الأحياء: "المهمة" |
city_name ASC ، الأحياء ARRAY | city_name: "سان فرانسيسكو" ، الأحياء: "وسط المدينة" |
city_name ASC ، الأحياء ARRAY | city_name: "سان فرانسيسكو" ، الأحياء: "مارينا" |
city_name DESC ، الأحياء ARRAY | city_name: "سان فرانسيسكو" ، الأحياء: "المهمة" |
city_name DESC ، الأحياء ARRAY | city_name: "سان فرانسيسكو" ، الأحياء: "وسط المدينة" |
city_name DESC ، الأحياء ARRAY | city_name: "سان فرانسيسكو" ، الأحياء: "مارينا" |
الفهارس والتسعير
تساهم الفهارس في تكاليف التخزين لتطبيقك. لمزيد من المعلومات حول كيفية حساب حجم تخزين الفهارس ، راجع حجم إدخال الفهرس .
الاستفادة من دمج الفهرس
على الرغم من أن Cloud Firestore يستخدم فهرسًا لكل طلب بحث ، فإنه لا يتطلب بالضرورة فهرسًا واحدًا لكل استعلام. بالنسبة إلى الاستعلامات ذات العبارات المتعددة المتساوية ( ==
) ، وبشكل اختياري ، بند orderBy
، يمكن لـ Cloud Firestore إعادة استخدام الفهارس الحالية. يمكن لـ Cloud Firestore دمج الفهارس لمرشحات المساواة البسيطة لإنشاء الفهارس المركبة اللازمة لاستعلامات المساواة الأكبر.
يمكنك تقليل تكاليف الفهرسة عن طريق تحديد المواقف التي يمكنك فيها الاستفادة من دمج الفهرس. على سبيل المثال ، تخيل مجموعة restaurants
لتطبيق تقييم مطعم:
name : "Burger Thyme"
category : "burgers"
city : "San Francisco"
editors_pick : true
star_rating : 4
الآن ، تخيل أن هذا التطبيق يستخدم استعلامات مثل تلك الواردة أدناه. لاحظ أن التطبيق يستخدم مجموعات من شروط المساواة category
city
و editors_pick
أثناء الفرز دائمًا عن طريق تصنيف star_rating
التصاعدي:
الويب
db.collection("restaurants").where("category", "==", "burgers") .orderBy("star_rating") db.collection("restaurants").where("city", "==", "San Francisco") .orderBy("star_rating") db.collection("restaurants").where("category", "==", "burgers") .where("city", "==", "San Francisco") .orderBy("star_rating") db.collection("restaurants").where("category", "==", "burgers") .where("city", "==" "San Francisco") .where("editors_pick", "==", true ) .orderBy("star_rating")
يمكنك إنشاء فهرس لكل استعلام:
مجموعة | الحقول المفهرسة | نطاق الاستعلام |
---|---|---|
مطاعم | الفئة | ، star_ratingمجموعة |
مطاعم | مدينة | ، star_ratingمجموعة |
مطاعم | فئة | ، مدينة ، star_ratingمجموعة |
مطاعم | فئة | ، مدينة ، انتقاء المحررين ، star_ratingمجموعة |
كحل أفضل ، يمكنك تقليل عدد الفهارس من خلال الاستفادة من قدرة Cloud Firestore على دمج الفهارس لشروط المساواة:
مجموعة | الحقول المفهرسة | نطاق الاستعلام |
---|---|---|
مطاعم | الفئة | ، star_ratingمجموعة |
مطاعم | مدينة | ، star_ratingمجموعة |
مطاعم | editors_pick ، star_rating | مجموعة |
هذه المجموعة من الفهارس ليست أصغر حجمًا فحسب ، بل إنها تدعم أيضًا استعلامًا إضافيًا:
الويب
db.collection("restaurants").where("editors_pick", "==", true) .orderBy("star_rating")
حدود الفهرسة
تنطبق الحدود التالية على الفهارس. لجميع الحصص والحدود ، انظر الحصص والحدود .
حد | تفاصيل |
---|---|
الحد الأقصى لعدد الفهارس المركبة لقاعدة بيانات | 200 يمكنك الاتصال بالدعم لطلب زيادة إلى هذا الحد. |
الحد الأقصى لعدد تكوينات الحقل الفردي لقاعدة بيانات | 200 يُسمح بإجمالي 200 تكوين على مستوى الحقل. يمكن أن يحتوي تكوين حقل واحد على تكوينات متعددة لنفس الحقل. على سبيل المثال ، يتم احتساب استثناء فهرسة الحقل الفردي وسياسة TTL في نفس الحقل كتكوين حقل واحد نحو الحد الأقصى. |
الحد الأقصى لعدد مدخلات الفهرس لكل مستند | 40000 عدد إدخالات الفهرس هو مجموع ما يلي للمستند:
لمعرفة كيفية تحويل Cloud Firestore مستندًا ومجموعة من الفهارس إلى مدخلات فهرس ، راجع مثال عدد مدخلات الفهرس هذا . |
الحد الأقصى لعدد الحقول في فهرس مركب | 100 |
الحجم الأقصى لمدخل الفهرس | 7.5 كيلوبايت لمعرفة كيفية حساب Cloud Firestore لحجم إدخال الفهرس ، راجع حجم إدخال الفهرس . |
الحد الأقصى لمجموع أحجام مدخلات فهرس المستند | 8 ميغا بايت الحجم الإجمالي هو مجموع ما يلي للمستند: |
الحجم الأقصى لقيمة حقل مفهرس | 1500 بايت يتم قطع قيم الحقول التي تزيد عن 1500 بايت. قد تُرجع الاستعلامات التي تتضمن قيم حقول مبتورة نتائج غير متناسقة. |
أفضل ممارسات الفهرسة
بالنسبة لمعظم التطبيقات ، يمكنك الاعتماد على الفهرسة التلقائية وروابط رسائل الخطأ لإدارة الفهارس الخاصة بك. ومع ذلك ، قد ترغب في إضافة استثناءات ذات حقل واحد في الحالات التالية:
قضية | وصف |
---|---|
حقول سلسلة كبيرة | إذا كان لديك حقل سلسلة يحتوي غالبًا على قيم سلسلة طويلة لا تستخدمها للاستعلام ، فيمكنك خفض تكاليف التخزين عن طريق إعفاء الحقل من الفهرسة. |
معدلات كتابة عالية لمجموعة تحتوي على مستندات ذات قيم متسلسلة | إذا قمت بفهرسة حقل يزيد أو ينقص بالتتابع بين المستندات في مجموعة ، مثل الطابع الزمني ، فإن الحد الأقصى لمعدل الكتابة للمجموعة هو 500 كتابة في الثانية. إذا لم تقم بالاستعلام بناءً على الحقل ذي القيم المتسلسلة ، يمكنك استثناء الحقل من الفهرسة لتجاوز هذا الحد. في حالة استخدام إنترنت الأشياء بمعدل كتابة مرتفع ، على سبيل المثال ، قد تقترب المجموعة التي تحتوي على مستندات ذات حقل طابع زمني من الحد الأقصى البالغ 500 عملية كتابة في الثانية. |
حقول TTL | إذا كنت تستخدم سياسات TTL (مدة البقاء) ، فلاحظ أن حقل TTL يجب أن يكون طابعًا زمنيًا. يتم تمكين الفهرسة في حقول TTL افتراضيًا ويمكن أن تؤثر على الأداء بمعدلات مرور أعلى. كأفضل ممارسة ، قم بإضافة استثناءات أحادية المجال لحقول TTL الخاصة بك. |
مجموعة كبيرة أو حقول خريطة | يمكن أن تقترب حقول المصفوفة أو الخريطة الكبيرة من الحد الأقصى البالغ 40000 مدخل فهرس لكل مستند. إذا كنت لا تقوم بالاستعلام استنادًا إلى مصفوفة كبيرة أو حقل خريطة ، فيجب إعفاؤه من الفهرسة. |
لمزيد من المعلومات حول كيفية حل مشكلات الفهرسة (انتشار الفهرسة ، أخطاء INVALID_ARGUMENT
) راجع صفحة تحري الخلل وإصلاحه .