این صفحه، ایندکسگذاری برای Cloud Firestore را شرح میدهد. Cloud Firestore به طور پیشفرض هیچ ایندکسی ایجاد نمیکند. برای بهبود عملکرد پایگاه داده، برای کوئریهای پرکاربرد خود ایندکس ایجاد کنید.
شاخصها تأثیر زیادی بر عملکرد یک پایگاه داده دارند. اگر برای یک پرسوجو شاخصی وجود داشته باشد، پایگاه داده میتواند با کاهش مقدار دادههایی که باید اسکن شوند و کاهش کار مورد نیاز برای مرتبسازی نتایج، نتایج را به طور مؤثر بازگرداند. با این حال، ورودیهای شاخص، هزینههای ذخیرهسازی و میزان کار انجام شده در طول عملیات نوشتن روی فیلدهای شاخصگذاری شده را افزایش میدهند.
تعریف و ساختار شاخص
یک شاخص شامل موارد زیر است:
- شناسه مجموعه
- لیستی از فیلدهای موجود در مجموعه داده شده
- یک ترتیب، صعودی یا نزولی، برای هر فیلد
یک شاخص همچنین میتواند گزینههای sparse ، multikey یا unique را فعال کند.
مرتبسازی فهرست
ترتیب و جهت مرتبسازی هر فیلد، شاخص را به طور منحصر به فرد تعریف میکند. برای مثال، شاخصهای زیر دو شاخص مجزا هستند و قابل تعویض نیستند:
| مجموعه | فیلدها |
|---|---|
| شهرها | کشور (صعودی)، جمعیت (نزولی) |
| شهرها | جمعیت (نزولی)، کشور (صعودی)، |
هنگام ایجاد یک فهرست برای پشتیبانی از یک پرسوجو، فیلدها را به همان ترتیب پرسوجوی خود وارد کنید.
چگالی شاخص
By default, index entries store data from all documents in a collection. This is known as a non-sparse index. An index entry will be added for a document regardless of whether the document contains any of the fields specified in the index. Non-existent fields are treated as having a NULL value when generating index entries. To change this behavior, you can define the index as a sparse index.
شاخصهای پراکنده
یک شاخص پراکنده فقط اسنادی را در مجموعه فهرست میکند که حداقل یکی از فیلدهای فهرستبندی شده حاوی مقداری (از جمله تهی) باشند. یک شاخص پراکنده هزینههای ذخیرهسازی را کاهش میدهد و میتواند عملکرد را بهبود بخشد.
اندیسهای چندکلیدی برای مقادیر آرایه
اگر در حال ایجاد شاخص روی فیلدی هستید که حاوی مقادیر آرایه است، باید یک شاخص چندکلیدی ایجاد کنید. یک شاخص معمولی نمیتواند مقادیر آرایه را شاخصگذاری کند. یک شاخص چندکلیدی حداکثر از یک فیلد آرایه در تعریف شاخص پشتیبانی میکند و میتواند برای عملیاتی که مقادیر آرایه را پیمایش میکنند، استفاده شود.
فقط در صورتی از ایندکسهای چندکلیدی استفاده کنید که میدانید نیاز به ایندکسگذاری مقادیر آرایه دارید. ایندکسهای معمولی هنگام پردازش یک پرسوجو مزایایی دارند. به عنوان مثال، ایندکسهای معمولی میتوانند مقادیر درون یک محدوده را به طور مؤثرتری فیلتر کنند.
موقعیتهای زیر هنگام کار با مقادیر آرایه و شاخصهای چندکلیدی منجر به خطا میشوند:
- یک عملیات تلاش میکند تا یک مقدار آرایه را به فیلدی که توسط یک شاخص معمولی شاخصگذاری شده است، اضافه کند. برای اضافه کردن مقدار آرایه، باید شاخصهای معمولی موجود در آن فیلد را حذف کرده و آنها را به عنوان شاخصهای چندکلیدی دوباره ایجاد کنید.
- شما سعی میکنید یک اندیس معمولی روی فیلدی که حاوی مقدار آرایه است ایجاد کنید. شما باید یا یک اندیس چندکلیدی ایجاد کنید یا مقادیر آرایه را حذف کنید.
- یک عملیات تلاش میکند چندین فیلد را با مقادیر آرایهای فهرستبندی کند. شما نمیتوانید بیش از یک فیلد با مقدار آرایهای در یک فهرست چندکلیدی داشته باشید. برای ادامه، مدل داده یا تعاریف فهرست خود را تغییر دهید.
- شما سعی میکنید یک اندیس چندکلیدی ایجاد کنید که در آن دو مسیر فیلد پیشوند مشترکی مانند
users.postsوusers.zipداشته باشند.
شاخصهای منحصر به فرد
Set the unique index option to enforce unique values for the indexed fields. For indexes on multiple fields, each combination of values must be unique across the index. The database rejects any update and insert operations that attempt to create index entries with duplicate values. If the data of the indexed fields contains duplicate values and you attempt to create a unique index, then the index build fails with an error message in the operation details.
فیلدهای موجود در یک فهرست منحصر به فرد وجود ندارد
اگر سندی را با فیلدهای گمشده برای شاخص منحصر به فرد وارد کنید، شاخص برای فیلدهای گمشده مقادیر null تعیین میکند. ورودی شاخص حاصل باید منحصر به فرد باشد در غیر این صورت عملیات با شکست مواجه میشود.
مثلاً با این شاخص:
db.cities.createIndex( { "name": 1 }, { unique: true } )
اگر سند {"abbreviation": "LA"} را به مجموعه اضافه کنید، شاخص منحصر به فرد یک ورودی با name null ایجاد میکند. اگر سپس سعی کنید سند {"abbreviation": "NYC"} را اضافه کنید، عملیات با شکست مواجه میشود زیرا ورودی حاصل برای شاخص منحصر به فرد یکسان است.
همین رفتار در مورد شاخصهای منحصر به فرد با چندین فیلد نیز صدق میکند. هنگام ایجاد یا بهروزرسانی یک سند، فیلدهای شاخصگذاری نشده روی null تنظیم میشوند و ورودی شاخص حاصل باید در شاخص منحصر به فرد باشد.
شاخصهای TTL
از شاخصهای TTL برای حذف خودکار دادههای قدیمی از پایگاههای داده خود استفاده کنید. شاخص TTL یک فیلد مشخص را به عنوان زمان انقضای اسناد در یک مجموعه مشخص تعیین میکند. با TTL، میتوانید با حذف دادههای منسوخ، هزینههای ذخیرهسازی را کاهش دهید. دادهها معمولاً ظرف ۲۴ ساعت پس از زمان انقضا حذف میشوند.
عیبیابی خطاهای ساخت ایندکس
ممکن است هنگام مدیریت ایندکسهای خود با خطاهای ساخت ایندکس مواجه شوید. اگر پایگاه داده با مشکلی در دادهها مواجه شود، عملیات ایندکسگذاری میتواند با شکست مواجه شود. عملیات ایندکسگذاری میتواند به دلایل زیر با شکست مواجه شود:
- شما به محدودیت فهرستبندی رسیدهاید. برای مثال، ممکن است عملیات به حداکثر تعداد ورودیهای فهرستبندی در هر سند رسیده باشد. اگر ایجاد فهرست با شکست مواجه شود، پیام خطایی مشاهده خواهید کرد. اگر به محدودیت فهرستبندی نرسیدهاید، عملیات فهرستبندی را دوباره امتحان کنید.
- یک اندیس چندکلیدی مورد نیاز است. حداقل یکی از فیلدهای اندیسگذاری شده حاوی یک مقدار آرایهای است. برای ادامه، باید یا از یک اندیس چندکلیدی استفاده کنید یا مقادیر آرایه را حذف کنید.
- یک عملیات تلاش میکند چندین فیلد را با مقادیر آرایهای فهرستبندی کند. شما نمیتوانید بیش از یک فیلد با مقدار آرایهای در یک فهرست چندکلیدی داشته باشید. برای ادامه، مدل داده یا تعاریف فهرست خود را تغییر دهید.
- شما گزینه شاخص منحصر به فرد را تنظیم میکنید و دادههای فیلدهای شاخصگذاری شده، ورودیهای شاخص تکراری ایجاد میکنند. برای ادامه، ترکیبات تکراری مقادیر را از دادهها حذف کنید.
قدم بعدی چیست؟
- یادگیری نحوه ایجاد و مدیریت ایندکسها یا شاخصهای TTL