نمای کلی شاخص ها

فقط مربوط به نسخه Cloud Firestore Enterprise است.

این صفحه، نمایه‌سازی برای Cloud Firestore با سازگاری با MongoDB را شرح می‌دهد. Cloud Firestore با سازگاری با MongoDB به طور پیش‌فرض هیچ نمایه‌ای ایجاد نمی‌کند. برای بهبود عملکرد پایگاه داده، نمایه‌هایی را برای پرس‌وجوهای متداول خود ایجاد کنید.

شاخص‌ها تأثیر زیادی بر عملکرد یک پایگاه داده دارند. اگر برای یک پرس‌وجو شاخصی وجود داشته باشد، پایگاه داده می‌تواند با کاهش مقدار داده‌هایی که باید اسکن شوند و کاهش کار مورد نیاز برای مرتب‌سازی نتایج، نتایج را به طور مؤثر بازگرداند. با این حال، ورودی‌های شاخص، هزینه‌های ذخیره‌سازی و میزان کار انجام شده در طول عملیات نوشتن روی فیلدهای شاخص‌گذاری شده را افزایش می‌دهند.

تعریف و ساختار شاخص

یک شاخص شامل موارد زیر است:

  • شناسه مجموعه
  • فهرستی از فیلدهای موجود در مجموعه داده شده
  • یک ترتیب، صعودی یا نزولی، برای هر فیلد

یک شاخص همچنین می‌تواند گزینه‌های sparse ، multikey یا unique را فعال کند.

مرتب‌سازی شاخص‌ها

ترتیب و جهت مرتب‌سازی هر فیلد، شاخص را به طور منحصر به فرد تعریف می‌کند. برای مثال، شاخص‌های زیر دو شاخص مجزا هستند و قابل تعویض نیستند:

مجموعه فیلدها
شهرها کشور (صعودی)، جمعیت (نزولی)
شهرها جمعیت (نزولی)، کشور (صعودی)،

هنگام ایجاد یک فهرست برای پشتیبانی از یک پرس‌وجو، فیلدها را به همان ترتیب پرس‌وجوی خود وارد کنید.

چگالی شاخص

به طور پیش‌فرض، ورودی‌های فهرست، داده‌ها را از تمام اسناد موجود در یک مجموعه ذخیره می‌کنند. این به عنوان یک فهرست غیر پراکنده شناخته می‌شود. یک ورودی فهرست برای یک سند، صرف نظر از اینکه آیا سند حاوی هر یک از فیلدهای مشخص شده در فهرست است یا خیر، اضافه می‌شود. فیلدهای غیر موجود هنگام تولید ورودی‌های فهرست، به عنوان دارای مقدار NULL در نظر گرفته می‌شوند. برای تغییر این رفتار، می‌توانید فهرست را به عنوان یک فهرست پراکنده تعریف کنید.

شاخص‌های پراکنده

یک شاخص پراکنده فقط اسنادی را در مجموعه فهرست می‌کند که حداقل یکی از فیلدهای فهرست‌بندی شده حاوی مقداری (از جمله تهی) باشند. یک شاخص پراکنده هزینه‌های ذخیره‌سازی را کاهش می‌دهد و می‌تواند عملکرد را بهبود بخشد.

اندیس‌های چندکلیدی برای مقادیر آرایه

اگر در حال ایجاد شاخص روی فیلدی هستید که حاوی مقادیر آرایه است، باید یک شاخص چندکلیدی ایجاد کنید. یک شاخص معمولی نمی‌تواند مقادیر آرایه را شاخص‌گذاری کند. یک شاخص چندکلیدی حداکثر از یک فیلد آرایه در تعریف شاخص پشتیبانی می‌کند و می‌تواند برای عملیاتی که مقادیر آرایه را پیمایش می‌کنند، استفاده شود.

فقط در صورتی از ایندکس‌های چندکلیدی استفاده کنید که می‌دانید نیاز به ایندکس‌گذاری مقادیر آرایه دارید. ایندکس‌های معمولی هنگام پردازش یک پرس‌وجو مزایایی دارند. به عنوان مثال، ایندکس‌های معمولی می‌توانند مقادیر درون یک محدوده را به طور مؤثرتری فیلتر کنند.

موقعیت‌های زیر هنگام کار با مقادیر آرایه و شاخص‌های چندکلیدی منجر به خطا می‌شوند:

  • یک عملیات تلاش می‌کند تا یک مقدار آرایه را به فیلدی که توسط یک شاخص معمولی شاخص‌گذاری شده است، اضافه کند. برای اضافه کردن مقدار آرایه، باید شاخص‌های معمولی موجود در آن فیلد را حذف کرده و آنها را به عنوان شاخص‌های چندکلیدی دوباره ایجاد کنید.
  • شما سعی می‌کنید یک اندیس معمولی روی فیلدی که حاوی مقدار آرایه است ایجاد کنید. شما باید یا یک اندیس چندکلیدی ایجاد کنید یا مقادیر آرایه را حذف کنید.
  • یک عملیات تلاش می‌کند چندین فیلد را با مقادیر آرایه‌ای فهرست‌بندی کند. شما نمی‌توانید بیش از یک فیلد با مقدار آرایه‌ای در یک فهرست چندکلیدی داشته باشید. برای ادامه، مدل داده یا تعاریف فهرست خود را تغییر دهید.
  • شما سعی می‌کنید یک اندیس چندکلیدی ایجاد کنید که در آن دو مسیر فیلد پیشوند مشترکی مانند users.posts و users.zip داشته باشند.

شاخص‌های منحصر به فرد

گزینه شاخص منحصر به فرد را برای اعمال مقادیر منحصر به فرد برای فیلدهای شاخص گذاری شده تنظیم کنید. برای شاخص گذاری روی چندین فیلد، هر ترکیبی از مقادیر باید در سراسر شاخص منحصر به فرد باشد. پایگاه داده هرگونه عملیات بروزرسانی و درج را که سعی در ایجاد ورودی‌های شاخص با مقادیر تکراری دارند، رد می‌کند. اگر داده‌های فیلدهای شاخص گذاری شده حاوی مقادیر تکراری باشند و شما سعی در ایجاد یک شاخص منحصر به فرد داشته باشید، ساخت شاخص با یک پیام خطا در جزئیات عملیات شکست می‌خورد.

فیلدهای موجود در یک فهرست منحصر به فرد وجود ندارد

اگر سندی را با فیلدهای گمشده برای شاخص منحصر به فرد وارد کنید، شاخص برای فیلدهای گمشده مقادیر null تعیین می‌کند. ورودی شاخص حاصل باید منحصر به فرد باشد در غیر این صورت عملیات با شکست مواجه می‌شود.

مثلاً با این شاخص:

db.cities.createIndex( { "name": 1 }, { unique: true } )

اگر سند {"abbreviation": "LA"} را به مجموعه اضافه کنید، شاخص منحصر به فرد یک ورودی با name null ایجاد می‌کند. اگر سپس سعی کنید سند {"abbreviation": "NYC"} را اضافه کنید، عملیات با شکست مواجه می‌شود زیرا ورودی حاصل برای شاخص منحصر به فرد یکسان است.

همین رفتار در مورد شاخص‌های منحصر به فرد با چندین فیلد نیز صدق می‌کند. هنگام ایجاد یا به‌روزرسانی یک سند، فیلدهای شاخص‌گذاری نشده روی null تنظیم می‌شوند و ورودی شاخص حاصل باید در شاخص منحصر به فرد باشد.

عیب‌یابی خطاهای ساخت ایندکس

ممکن است هنگام مدیریت ایندکس‌های خود با خطاهای ساخت ایندکس مواجه شوید. اگر پایگاه داده با مشکلی در داده‌ها مواجه شود، عملیات ایندکس‌گذاری می‌تواند با شکست مواجه شود. عملیات ایندکس‌گذاری می‌تواند به دلایل زیر با شکست مواجه شود:

  • شما به محدودیت فهرست‌بندی رسیده‌اید. برای مثال، ممکن است عملیات به حداکثر تعداد ورودی‌های فهرست‌بندی در هر سند رسیده باشد. اگر ایجاد فهرست با شکست مواجه شود، پیام خطایی مشاهده خواهید کرد. اگر به محدودیت فهرست‌بندی نرسیده‌اید، عملیات فهرست‌بندی را دوباره امتحان کنید.
  • یک اندیس چندکلیدی مورد نیاز است. حداقل یکی از فیلدهای اندیس‌گذاری شده حاوی یک مقدار آرایه‌ای است. برای ادامه، باید یا از یک اندیس چندکلیدی استفاده کنید یا مقادیر آرایه را حذف کنید.
  • یک عملیات تلاش می‌کند چندین فیلد را با مقادیر آرایه‌ای فهرست‌بندی کند. شما نمی‌توانید بیش از یک فیلد با مقدار آرایه‌ای در یک فهرست چندکلیدی داشته باشید. برای ادامه، مدل داده یا تعاریف فهرست خود را تغییر دهید.
  • شما گزینه شاخص منحصر به فرد را تنظیم می‌کنید و داده‌های فیلدهای شاخص‌گذاری شده، ورودی‌های شاخص تکراری ایجاد می‌کنند. برای ادامه، ترکیبات تکراری مقادیر را از داده‌ها حذف کنید.

قدم بعدی چیست؟