در این جلسه و جلسه ی بعدی می خواهیم در رابطه با تعریف ایندکس ها صحبت کنیم. برای تعریف ایندکس ها دو پروتکل یا روش اصلی وجود دارد: تعریف ایندکس در foreground (پیش زمینه) – به صورت مستقیم، تعریف ایندکس در background (پس زمینه) – به صورت غیر مستقیم هر چیزی که از ابتدای این فصل تا به حال یاد گرفته ایم به صورت مستقیم (در foreground) بوده است چرا که از دستور CreateIndex استفاده کرده ایم که مخصوص تعریف ایندکس ها است. از آنجایی که ساخت ایندکس ها سرعت بسیار بالایی دارد ما متوجه فرآیندی به نام collection lock (به معنی «قفل شدن کالکشن») نمی شویم. در واقع زمانی که قرار است برای یک کالکشن به صورت مستقیم ایندکس تعریف کنیم، کل کالکشن قفل می شود و هیچ دستور دیگری را قبول نمی کند. این مسئله برای تعریف غیر مستقیم ایندکس ها برعکس است و اگر ایندکس خودتان را به صورت غیر مستقیم تعریف کنید (در حالی که ایندکس ها در حال ساخته شدن هستند) کالکشن قفل نشده و می توانید به آن کوئری بزنید. البته مزیت روش مستقیم این است که ساخت ایندکس ها در آن سریع تر است در حالی که برای ساخت ایندکس ها در background (به طور غیر مستقیم) باید زمان بیشتری صرف شود. احتمالا از خودتان می پرسید با این حساب چرا باید از روش غیر مستقیم یا پس زمینه (background) برای تعریف ایندکس ها استفاده کنیم؟ پاسخ ساده است! ما همیشه در حال طراحی سایت از صفر نیستیم. طراحی اولیه یک سایت فقط قدم اول است و پس از آن با انواع و اقسام به روز رسانی ها یا ویرایش های مختلف روبرو خواهیم بود. حالا تصور کنید که وب سایت ما چند ماه در حال کار کردن است و می خواهیم یک ایندکس به آن اضافه کنیم. اگر از روش مستقیم استفاده کنیم، کالکشن ما قفل می شود و کاربران نمی توانند از سایت استفاده کنند (گرچه معمولا این مدت، مدت بسیار کوتاهی است) بنابراین برای سایتی که در حالت production (استفاده ی عموم) است، روش background گزینه ی بهتری محسوب می شود.
پنل نویسندگان
