نمای کلی نمایه‌ها

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

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

تعریف و ساختار نمایه

نمایه شامل موارد زیر است:

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

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

ترتیب نمایه

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

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

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

تراکم نمایه

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

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

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

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

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

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

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

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

شاخص‌های یکتا

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

فیلدهای غایب در نمایه یکتا

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

برای مثال، با این نمایه:

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

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

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

نمایه‌های یکتا در مقادیر آرایه

از نمایه چندکلیدی یکتا می‌توان برای اطمینان از اینکه اسناد عناصر آرایه هم‌پوشان ندارند استفاده کرد.

این نوع نمایه الزام نمی‌کند که آرایه دارای مقادیر منحصربه‌فرد در یک سند باشد.

برای مثال، با نمایه یکتا:

db.collection.createIndex( { "tags": 1 }, { unique: true } )

سند زیر برای درج معتبر است:

{
  "_id": 1,
  "tags": [ "news", "tech", "news", "music" ]
}

نمایه مقادیر تکراری ("news") را در همان آرایه یک سند واحد مجاز می‌کند.

اگر بخواهید سند دومی با عنصر تکراری درج کنید، عملیات ناموفق خواهد بود:

{
  "_id": 2,
  "tags": [ "sports", "music" ]
}

عملیات ناموفق بود زیرا "music" ازقبل در آرایه سند 1 وجود دارد و در نمایه نگاشت شده است.

اگر لازم است مطمئن شوید که عناصر موجود در یک آرایه در یک سند منحصربه‌فرد هستند، این کار را در منطق برنامه خود بااستفاده از عملگرهای به‌روزرسانی مانند $addToSet به‌جای $push انجام دهید.

آرایه‌های خالی، فیلدهای ناموجود، و مقادیر تهی

معمولاً فیلدهای مفقود در نمایه یکتا به‌عنوان null درنظر گرفته می‌شوند و باید در سراسر اسناد یکتا باشند (به فیلدهای غایب در نمایه یکتا مراجعه کنید). اما برای نمایه‌های یکتا در فیلدهای آرایه:

  • آرایه‌های خالی، فیلدهای مفقود، و مقادیر null مستقل: اگر فیلد آرایه خالی باشد، کاملاً مفقود باشد، یا مقدار مستقل null داشته باشد (نه داخل آرایه)، هیچ کلید نمایه‌ای برای سند تولید نمی‌شود. بنابراین، چندین سند می‌توانند فیلدهای خالی یا مقادیر null مستقل داشته باشند بدون اینکه خطاهای کلید تکراری را فعال کنند.
  • عناصر تهی در آرایه: اگر آرایه حاوی مقدار null به‌عنوان عنصر باشد (برای مثال، ["news", null])، عنصر null نمایه‌سازی می‌شود. هر سند بعدی که حاوی عنصر null در فیلد آرایه نمایه‌شده‌اش باشد با خطای کلید تکراری مواجه خواهد شد.

شاخص‌های TTL

از نمایه‌های TTL برای برداشتن خودکار داده‌های قدیمی از پایگاه‌های داده‌تان استفاده کنید. نمایه TTL فیلد معینی را به‌عنوان زمان انقضای اسناد در مجموعه معینی تعیین می‌کند. با TTL می‌توانید هزینه‌های فضای ذخیره‌سازی را با پاک کردن داده‌های منسوخ کاهش دهید. داده‌ها معمولاً ظرف ۲۴ ساعت پس‌از زمان انقضا حذف می‌شوند.

عیب‌یابی خطاهای ساخت نمایه

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

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

حالا چه می‌شود