این صفحه شامل نمونههایی از نحوه محاسبه واحدهای صورتحساب در برخی از رایجترین سناریوها است. توجه داشته باشید که هر پرسوجو ممکن است بر اساس عواملی مانند طرح پرسوجو، شکل دادهها و شاخصهای موجود، از نظر دادههای پردازششده متفاوت باشد.
توصیه میکنیم از ویژگی توضیح پرسوجو (Query Explain) برای درک بهتر هزینه و عملکرد پرسوجوهای خاص خود استفاده کنید.
عملیات خواندن
بیشتر عملیات خواندن مستلزم انجام یک خواندن نقطهای از یک سند خاص یا اسکن طیف وسیعی از دادهها بر اساس یک شناسه است. عملیات خواندن واحدهای خوانده شده را مصرف میکند. به مثالهای زیر مراجعه کنید.
جستجوی متن کامل
هزینههای جستجوهای تمام متن بین هزینه انجام جستجو در یک فهرست متنی و هزینه بازیابی اسناد تمایز قائل میشوند. هزینه انجام جستجو در یک فهرست متنی با پیچیدگی جستجو و میزان دادههای اسکن شده در فهرست برای یافتن نتایج تعیین میشود. عوامل مؤثر بر این هزینه شامل تعداد و ماهیت عبارات جستجو (مثلاً اصطلاحات، عبارات)، اعمال امتیازدهی مرتبط بودن یا نبودن، و تعداد ورودیهای فهرست که باید بررسی شوند، میباشد. هزینه بازیابی اسناد مرتبط بر اساس تعداد و اندازه اسناد بازیابی شده پس از تکمیل مرحله جستجو تعیین میشود.
جدول زیر هزینههای مرتبط با اجرای جستجوهای متن کامل برای یک کاتالوگ محصولات تجارت الکترونیک برای یک گلخانه را مشخص میکند. این مثال مجموعهای از ۲۰۰۰۰۰ لیست محصول را در یک مجموعه فرض میکند که هر سند لیست محصول ۲ کیلوبایت و اندازه فهرست جستجوی متن مربوطه تقریباً ۱۰۰ مگابایت است.
| پرس و جو | مثال کد | واحدهای خوانده شده تخمینی مصرف شده به ازای هر پرس و جو | هزینههای تخمینی (منطقه: ایالات متحده-مرکزی ۱ به دلار آمریکا) |
|---|---|---|---|
| جستجوی یک محصول کمیاب سینی تخت با پشته "آب خشک" که منجر به بازیابی ۳ سند میشود. | | ۱۰ واحد خوانده شده در مجموع بر اساس ۷ واحد برای جستجوی متن کامل و ۳ واحد اضافی برای اسناد بازگردانده شده. | ۰.۵۰ دلار به ازای هر میلیون درخواست |
| جستجوی تمام درختان مرکبات خانگی، منجر به بازیابی ۳۶ سند شد. | | ۴۲ واحد خوانده شده در مجموع بر اساس ۶ واحد برای جستجوی متن کامل و ۳۶ واحد اضافی برای اسناد بازگردانده شده. | ۲.۱۰ دلار به ازای هر یک میلیون جستجو |
| برای گلدانهای بالکن، محصولاتی با تطابق زیاد را جستجو کنید. نتایج را بر اساس مرتبط بودن مرتب کنید و آنها را به ۵۰ نتیجه برتر جستجو محدود کنید. | | ۷۵ واحد خوانده شده در کل بر اساس ۲۵ واحد برای جستجوی متن کامل و ۵۰ واحد اضافی برای اسناد بازگردانده شده. | ۳.۷۵ دلار به ازای هر یک میلیون جستجو |
این مثالها نشان میدهند که چگونه الگوهای مختلف پرسوجو بر هزینهها تأثیر میگذارند:
- عبارت جستجوی «آب خشک» شامل یک عبارت (
"dry water") و اصطلاحات اضافی است. جستجوی عبارات پیچیدهتر است زیرا موتور جستجو باید نزدیکی و ترتیب توکنها را بررسی کند که به 7 واحد خوانده شده برای مرحله جستجو کمک میکند. از آنجایی که تعداد بسیار کمی از اسناد مطابقت دارند، هزینه بازیابی سند کم است. - عبارت جستجوی «درونساختمانی»، «مرکبات» و «درخت» سه عبارت جداگانه را جستجو میکند. اگرچه به ازای هر عبارت کمی پیچیدهتر از جستجوی عبارتی است، اما همچنان نیاز به جستجوی چندین توکن دارد. هزینه اسکن فهرست جستجو در آن کمی کمتر از مثال «آب خشک» است که ۶ واحد خوانده میشود، اما ۳۶ سند برگردانده میشود که هزینه کل را افزایش میدهد.
- جستجوی گلدان بالکن با اختلاف قابل توجهی، بالاترین هزینه جستجوی متن کامل را با ۲۵ واحد دارد. این امر عمدتاً به این دلیل است که درخواست میکند نتایج بر اساس ارتباط (
.sort({score: {$meta: "textScore"}})) بر روی عباراتی که با اسناد زیادی مطابقت دارند، مرتب شوند. برای تعیین ۵۰ نتیجه برتر و مرتبط، موتور جستجو باید تمام تطابقهای بالقوه برای "balcony" یا "planter" را پیدا کند، امتیاز ارتباط را برای هر کدام محاسبه کند و سپس آنها را مرتب کند. این فرآیند امتیازدهی و مرتبسازی در تعداد زیادی از کاندیداها در فهرست، از نظر محاسباتی فشرده است، حتی اگر در نهایت فقط ۵۰ سند بازیابی شود. گستردگی عبارات همراه با سربار امتیازدهی ارتباط، مرحله جستجو را پرهزینهتر میکند.
پرسوجوهای مکانی
هزینههای مربوط به پرسوجوهای مکانی بر اساس پیچیدگی پرسوجو و شرایط خاص و مرتبسازی مورد استفاده، و همچنین منابع مورد نیاز برای اسکن تمام دادهها در فهرست مکانی مربوطه تعیین میشود.
جدول زیر هزینههای مرتبط با اجرای پرسوجوهای مکانی برای یک برنامه نقشه را مشخص میکند. این مثال مجموعهای از ۱،۰۰۰،۰۰۰ سند را فرض میکند که نشاندهنده نقاط مورد علاقه هستند و هر سند مورد علاقه ۱ کیلوبایت حجم دارد و اندازه شاخص مکانی مربوطه تقریباً ۶۰ مگابایت است.
| پرس و جو | مثال کد | واحدهای خوانده شده تخمینی مصرف شده به ازای هر پرس و جو | هزینههای تخمینی (منطقه: ایالات متحده-مرکزی ۱ به دلار آمریکا) |
|---|---|---|---|
| تمام نقاط مورد علاقه را در شعاع حداکثر ۱۰ کیلومتری پیدا کنید و ۱۰ مورد مشابه را برگردانید. | | در مجموع ۱۶ واحد خوانده شده. بر اساس ۶ واحد خوانده شده برای پرس و جوی مکانی و ۱۰ واحد اضافی برای اسناد برگشتی. | ۰.۸۰ دلار به ازای هر یک میلیون جستجو |
| تمام نقاط مورد علاقه با حداکثر فاصله ۱۰۰ کیلومتر را پیدا کنید و ۱۰ نقطه مورد علاقه نزدیک را از بین ۱۰۰۰ مورد منطبق، انتخاب کنید. | | در مجموع ۱۹ واحد خوانده شده. بر اساس ۹ واحد خوانده شده برای پرس و جوی مکانی و ۱۰ واحد اضافی برای اسناد برگشتی. | ۰.۹۵ دلار به ازای هر یک میلیون جستجو |
این مثالها نشان میدهند که چگونه الگوهای مختلف پرسوجو بر هزینهها تأثیر میگذارند:
- پرسوجوی شعاع ۱۰ کیلومتری : این پرسوجو یک منطقه جغرافیایی کوچکتر را اسکن میکند. از آنجایی که فقط ۱۰ مورد منطبق در این شعاع ۱۰ کیلومتری پیدا میکند، موتور پرسوجو باید کار کمتری برای شناسایی و مرتبسازی این نقاط بر اساس فاصله انجام دهد (همانطور که
$nearبه طور ضمنی انجام میدهد). این منجر به هزینه اسکن شاخص کمتر از ۶ واحد خواندن میشود. - پرسوجوی شعاع ۱۰۰ کیلومتری : این پرسوجو منطقه بسیار وسیعتری را پوشش میدهد. پرسوجو ۱۰۰۰ مورد منطبق بالقوه را در شعاع ۱۰۰ کیلومتری پیدا میکند. برای انجام درخواست ۱۰ نقطه نزدیکتر، موتور پرسوجو باید فواصل را محاسبه کرده و مجموعه بسیار بزرگتری از کاندیداها (تا ۱۰۰۰ امتیاز) را در شاخص مرتب کند. این کار محاسباتی اضافی برای غربال کردن و رتبهبندی نقاط بسیار بیشتر، دلیل بالاتر بودن هزینه پرسوجوی مکانی با ۹ واحد خواندن، در مقایسه با پرسوجوی ۱۰ کیلومتری است، با وجود اینکه فقط ۱۰ سند را برمیگرداند.
نقاط خوانده شده
مثال صورتحساب برای امتیاز به شرح زیر است:
- خواندن یک سند ۱ کیلوبایتی. مصرف: ۱ واحد خواندن
- خواندن یک سند ۴ کیلوبایتی. مصرف: ۱ واحد خواندن
- خواندن یک سند ۱ مگابایتی. مصرف: ۲۵۶ واحد خواندن
- خواندن نقطهای ۱۰۰ سند، هر کدام ۱ کیلوبایت. مصرف: ۱۰۰ واحد خواندن
اسکن کردن
مثالهای زیر شامل سناریوهایی هستند که اسناد را اسکن میکنند یا ورودیهای فهرستبندی شده را نمایش میدهند.
اسکن اسناد
- پرسوجویی که ۱۰۰ سند، هر کدام ۱ کیلوبایت، را اسکن میکند. مصرف: ۲۵ واحد خواندن
اسکن ایندکسها
هزینه اسکن، بر حسب بایت، صرف نظر از اینکه سند اسکن شده باشد یا فهرست، یکسان است. با این حال، ورودیهای فهرست اغلب اندازه کوچکتری دارند. در نتیجه، آنها اغلب میتوانند روشی مقرون به صرفهتر برای اسکن دادهها ارائه دهند.
- پرسوجویی که ۱۰۰ ورودی فهرست، هر کدام ۱ کیلوبایت را اسکن میکند. مصرف: ۲۵ واحد خواندن.
- پرسوجویی که ۱۰۰ ورودی ایندکس، هر کدام ۱۲۸ بایت را اسکن میکند. ۴ واحد خواندن مصرف میکند.
حداقل اندازه سند یا ورودی فهرست
در شرایط خاص، ممکن است برای پاسخ به یک پرسوجو، خواندن محتوای یک سند یا ورودی فهرست ضروری نباشد. این شامل پرسوجوهای شمارش ساده مانند شمارش تعداد کل اسناد در یک مجموعه میشود. در این شرایط، حداقل هزینه ۳۲ بایت برای هر مورد اسکن شده اعمال میشود.
- تعداد اسناد موجود در یک مجموعه را بشمارید. این پرس و جو ۱۰۰۰ مورد را در مجموعه اسکن میکند. مصرف: ۸ واحد خواندن.
ترکیبی از اسکن و خوانش نقطهای
بسیاری از پرسوجوها ترکیبی از اسکن و خواندن نقطهای را برای انجام یک عملیات انجام میدهند.
- پرسوجویی که ۱۲۸ ورودی فهرست، هر کدام ۲۵۶ بایت، را اسکن میکند و یک خواندن نقطهای از ۱۲۸ سند، هر کدام ۴ کیلوبایت، انجام میدهد. مصرف: ۱۳۶ واحد خواندن، شامل:
- ۱۲۸ واحد خواندن برای خواندن نقطهای
- ۸ واحد خواندن برای اسکنهای فهرستی
توضیح پرس و جو
توضیح کوئری به شما کمک میکند تا بفهمید پایگاه داده چگونه کوئریهای شما را اجرا میکند. جزئیات ارائه شده میتواند به شما در بهینهسازی کوئریهایتان کمک کند.
هزینههای زیر هنگام استفاده از Query Explain اعمال میشود:
- توضیح دهید کدام پرسوجو پرسوجو را اجرا میکند: هزینه پرسوجو اعمال میشود.
- توضیح پرسوجو با استفاده از گزینه فقط طرح. مصرف: ۱ واحد خواندن (حداقل هزینه یک پرسوجو)
عملیات نوشتن
عملیات نوشتن (ایجاد، بهروزرسانی و حذف) بر اساس اندازه اسناد و شاخصهایی که در طول عملیات ایجاد، اصلاح یا حذف میشوند، محاسبه میشوند. عملیات نوشتن، واحدهای نوشتن را مصرف میکنند. واحدهای نوشتن بر اساس ترانشههای ۱ کیلوبایتی محاسبه میشوند.
عملیات نوشتن ساده، مانند بهروزرسانی بر اساس شناسه سند، فقط هزینه نوشتن را متحمل میشوند. عملیات نوشتنی که برای انجام عملیات نیاز به پرسوجو دارند، علاوه بر آن، هزینههای خواندن مرتبط با پرسوجو را نیز متحمل میشوند.
به مثالهای زیر توجه کنید.
ایجاد میکند
- یک سند جدید ۱۰ کیلوبایتی بدون ایندکس ایجاد کنید. مصرف: ۱۰ واحد نوشتن
- یک سند ۱ کیلوبایتی با ۱ ورودی اندیس ۲۵۶ بایتی روی مجموعه ایجاد میکند. ۲ واحد نوشتن مصرف میکند.
بهروزرسانیها
- یک سند ۱۰ کیلوبایتی را از طریق شناسه سند پیدا کنید و بدون هیچ اندیسی روی مجموعه، آن را بهروزرسانی کنید. مصرف: ۱۰ واحد نوشتن
- یک سند ۱ کیلوبایتی را با استفاده از شناسه سند پیدا کنید و ۱ فیلد را با ۱ ورودی شاخص ۲۵۶ بایتی بهروزرسانی کنید. ۳ واحد نوشتن مصرف میکند. توجه: بهروزرسانی ورودی شاخص در این شرایط ۲ واحد نوشتن مصرف میکند - یکی برای حذف و یکی برای ایجاد مجدد ورودی شاخص.
- یک سند ۱ کیلوبایتی را با استفاده از شناسه سند پیدا کنید و هیچ چیزی را بهروزرسانی نکنید (بدون تغییر). مصرف: ۱ واحد نوشتن (حداقل هزینه نوشتن)
- تمام اسناد ۱ کیلوبایتی موجود در یک مجموعه که ۱۰۰۰ سند را اسکن میکند، جستجو کنید و یک فیلد جدید ۲۵۶ بایتی بدون اندیس در مجموعه وارد کنید: ۱۰۰۰ واحد خواندن و ۱۰۰۰ واحد نوشتن.
حذفها
- یک سند ۱ کیلوبایتی را که ۱ اندیس در مجموعه دارد، حذف میکند. ۲ واحد نوشتن مصرف میکند.
- یک سند ۱ کیلوبایتی را که هیچ فهرستی در مجموعه ندارد، حذف میکند. ۱ واحد نوشتن مصرف میکند.
ساخت شاخص
هزینه ساخت شاخص برای ورودیهای شاخص ایجاد شده یا اصلاح شده در طول عملیات ساخت. این هزینهها هر زمان که تعریف شاخص اضافه یا حذف میشود، اعمال میشوند. ورودیهای شاخص به طور یکسان برای نوشتن محاسبه میشوند که شامل ۱ واحد نوشتن به ازای هر ۱ کیلوبایت است.
- یک فهرست جدید برای مجموعهای شامل ۵۰۰ سند ایجاد کنید، ورودیهای فهرست ایجاد شده هر کدام ۱ کیلوبایت هستند. ۵۰۰ واحد نوشتن مصرف میکند.
- حذف یک فهرست موجود برای مجموعهای حاوی ۵۰۰ سند، ورودیهای فهرست حذف شده هر کدام ۱ کیلوبایت هستند. ۵۰۰ واحد نوشتن مصرف میکند.