Metabase

کش‌کردن نتایج کوئری‌ها

اگر نتایج یک سؤال (Question) در بازه‌های زمانی کوتاه تغییر نمی‌کند، می‌توانید این نتایج را کش کنید تا دفعهٔ بعدی که کسی آن سؤال را باز می‌کند، متابیس به‌جای اجرای دوبارهٔ کوئری روی دیتابیس، نتایج کش‌شده را برگرداند.

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

می‌توانید برای سؤال‌ها، داشبوردها و دیتابیس‌ها سیاست‌های مختلفی برای «باطل‌کردن کش» (Cache invalidation) تعریف کنید.

کش در متابیس چگونه کار می‌کند؟

فرض کنید برای یک سؤال خاص یک سیاست کش تنظیم کرده‌اید و یک سیاست بر اساس مدت‌زمان انتخاب کرده‌اید که می‌گوید نتایج بعد از یک ساعت منقضی شوند (و کش پاک شود).

وقتی برای اولین بار سؤال را مشاهده می‌کنید، متابیس ابتدا بررسی می‌کند آیا نتیجهٔ ذخیره‌شده‌ای وجود دارد یا نه. اگر چیزی پیدا نکند، کوئری را روی دیتابیس اجرا می‌کند، نتایج را برمی‌گرداند و آن‌ها را به‌عنوان کش ذخیره می‌کند. این نتایج براساس سیاست مدت‌زمانی که تعریف کرده‌اید (یک ساعت) معتبر می‌مانند.

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

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

برای مشاهدهٔ رفتار ترکیبی سیاست‌های مختلف کش، به بخش تعامل سیاست‌های کش داشبورد، سؤال، دیتابیس و پیش‌فرض مراجعه کنید.

سیاست‌های باطل‌کردن کش

این سیاست‌ها مشخص می‌کنند نتایج کش‌شده چه مدت معتبر بمانند:

سیاست کش مبتنی بر مدت‌زمان

در این حالت، کش بعد از تعداد ساعت مشخصی منقضی و پاک می‌شود. هر زمان کسی کوئری را اجرا کند، متابیس اول بررسی می‌کند که آیا نتایج کش‌شدهٔ معتبر وجود دارد یا نه؛ اگر نه، کوئری را روی دیتابیس اجرا می‌کند و نتایج جدید را کش می‌کند. این نتایج تا مدت‌زمانی که تعیین کرده‌اید معتبر خواهند بود.

سیاست کش زمان‌بندی‌شده

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

می‌توانید زمان‌بندی انقضای کش را به‌صورت زیر تنظیم کنید:

  • ساعتی (Hourly)
  • روزانه (Daily)
  • هفتگی (Weekly)
  • ماهانه (Monthly)

در حال حاضر، چرخه‌های قمری (lunar cycles) پشتیبانی نمی‌شوند.

سیاست کش انطباقی (Adaptive)

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

  • حداقل زمان اجرای کوئری (Minimum query duration): اگر میانگین زمان اجرای یک سؤال بیشتر از این مقدار ثانیه باشد، متابیس نتایج آن را کش می‌کند.
  • ضریب (Multiplier): برای محاسبهٔ مدت‌زمان اعتبار کش، میانگین زمان اجرای کوئری را در این ضریب ضرب می‌کنیم. حاصل، تعداد ثانیه‌ای است که کش معتبر می‌ماند. برای مثال، اگر اجرای یک سؤال به‌طور میانگین ۱۰ ثانیه طول بکشد و ضریب را ۱۰۰ بگذارید، مدت اعتبار کش برابر خواهد بود با ۱۰ × ۱۰۰ = ۱۰۰۰ ثانیه (حدود ۱۶ دقیقه).

هر بار متابیس برای به‌روزرسانی کش کوئری را روی دیتابیس اجرا می‌کند، میانگین زمان اجرا را نیز به‌روزرسانی می‌کند. برای مثال، اگر دفعهٔ اول اجرای کوئری ۵ دقیقه طول بکشد، میانگین ۵ دقیقه است؛ اگر دفعهٔ بعدی ۷ دقیقه طول بکشد، میانگین جدید ۶ دقیقه خواهد بود.

در پلن‌های Pro و Enterprise، می‌توانید آمار کوئری و کش را در کالکشن Usage analytics مشاهده کنید.

عدم کش‌کردن نتایج

اگر برای یک سؤال، داشبورد یا دیتابیس گزینهٔ «Don't cache results» را انتخاب کنید، متابیس اصلاً نتایج را کش نمی‌کند و هر بار کوئری را مستقیماً روی دیتابیس اجرا می‌کند.

به‌روزرسانی خودکار کش

به‌روزرسانی خودکار کش زمانی که امنیت سطح سطر و ستون یا Impersonation اتصال فعال باشد اعمال نمی‌شود. در چنین سناریوهایی، متابیس کش تولیدشدهٔ خودکار را نادیده می‌گیرد و برای هر کاربر کوئری جدیدی اجرا می‌کند (که خودش می‌تواند کش شود). بنابراین «کش» همچنان برای این حالت‌ها کار می‌کند، اما کش پیش‌دستانه و خودکار اعمال نمی‌شود، چون این تنظیمات مجوز، داده را براساس کاربر فیلتر می‌کنند.

اگر برای یک سؤال یا داشبورد گزینهٔ «به‌روزرسانی خودکار کش» را فعال کنید، متابیس به محض انقضای کش بر اساس سیاستی که تنظیم کرده‌اید، کوئری‌ها را دوباره اجرا می‌کند. در حالت عادی، متابیس فقط وقتی کش را به‌روزرسانی می‌کند که کاربری پس از انقضای کش، آن آیتم را مشاهده کند؛ و در این حالت، اولین کاربر بعد از انقضای کش باید منتظر اجرای کوئری بماند. اما با به‌روزرسانی خودکار، نتایج از قبل آماده می‌شوند، زمان بارگذاری همیشه بهینه است و کاربران نتایج معتبر و کش‌شده می‌بینند.

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

هنگام به‌روزرسانی خودکار نتایج، متابیس ابتدا مقدارهای پیش‌فرض پارامترها (در صورت وجود) را اعمال می‌کند. متابیس همچنین تا ۱۰ ترکیب از «پرکاربردترین مقدارهای پارامتر» را که در دورهٔ کش قبلی استفاده شده‌اند، کش می‌کند. اگر داشبورد یا سؤال شما چند پارامتر داشته باشد، حداکثر ۱۰ ترکیب پرتکرار از مقدارهای پارامترها کش می‌شود.

مثلاً فرض کنید داشبوردی با فیلتر دسته‌بندی دارید (مقدار پیش‌فرض: Doohickey) که طوری تنظیم شده است که هر ۲۴ ساعت یک‌بار کش شود. در ۲۴ ساعت اخیر، کاربران هنگام مشاهدهٔ داشبورد مقادیر Widget و Gizmo را روی این فیلتر اعمال کرده‌اند. وقتی متابیس دفعهٔ بعد کش را تازه می‌کند، سه مجموعه نتیجه را کش می‌کند: با مقدارهای Doohickey (پیش‌فرض)، Widget و Gizmo. اگر در ۲۴ ساعت گذشته هیچ‌کس کوئری را اجرا نکرده باشد، متابیس فقط نتایج مبتنی بر مقدار پیش‌فرض را به‌روزرسانی و کش می‌کند.

لاگ‌های کش خودکار

برای دیدن کوئری‌هایی که متابیس برای به‌روزرسانی خودکار کش اجرا کرده است، به Query log بروید و مقدار Query source را روی cache-refresh فیلتر کنید.

تنظیم سیاست کش برای داشبوردها، سؤال‌ها و دیتابیس‌ها

می‌توانید برای موجودیت‌های مختلف سیاست کش مشخصی تنظیم کنید:

* موارد ستاره‌دار از امکانات پلن‌های Pro و Enterprise هستند.

سیاست کش پیش‌فرض

برای تنظیم سیاست کش پیش‌فرض در متابیس: با Cmd/Ctrl + k Command Palette را باز کنید و Performance را جست‌وجو کنید. یا از مسیر آیکون چرخ‌دنده > Admin settings > Performance > Database caching وارد شوید.

سپس روی دکمهٔ کنار Default policy کلیک کنید و یک سیاست باطل‌کردن کش انتخاب کنید.

سیاست کش دیتابیس

Database caching settings in the Admin settings under the Performance tab

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

اگر دیتابیسی در متابیس دارید که روی حالت Use default تنظیم شده است، متابیس وضعیت نمایش‌داده‌شده را مطابق سیاست پیش‌فرض به‌روزرسانی می‌کند. برای مثال، اگر سیاست پیش‌فرض را روی «Adaptive» قرار دهید، برای این دیتابیس‌ها نیز «Adaptive» نمایش داده می‌شود.

سیاست کش داشبورد

برای تنظیم سیاست کش یک داشبورد، باید روی کالکشنی که داشبورد در آن قرار دارد دسترسی «کیوریت» (Curate) داشته باشید.

  1. به داشبورد مورد نظر بروید.
  2. روی آیکون سه نقطه در گوشهٔ بالا سمت راست داشبورد کلیک کنید و گزینهٔ Edit settings را بزنید.
  3. به‌صورت پیش‌فرض، هر سؤال از تنظیمات کش پیش‌فرض دیتابیس استفاده می‌کند. برای تغییر آن، روی سیاست کش فعلی کلیک کنید.
  4. سیاست کش جدید را از میان سیاست‌های موجود انتخاب کنید.
  5. اختیاری: گزینهٔ به‌روزرسانی خودکار کش را فعال کنید.
  6. اختیاری: برای پاک‌کردن کش همهٔ سؤال‌های داشبورد، روی دکمهٔ Clear cache for this dashboard در پایین سایدبار تنظیمات کلیک کنید.
  7. تغییرات را ذخیره کنید.

سیاست کش سؤال

برای تنظیم سیاست کش یک سؤال، باید روی کالکشنی که سؤال در آن است دسترسی «کیوریت» داشته باشید.

  1. به سؤال مورد نظر بروید.
  2. روی منوی سه‌نقطه‌ای ... کلیک کنید و Edit settings را انتخاب کنید.
  3. در بخش Caching یک سیاست باطل‌کردن کش انتخاب کنید.
  4. اختیاری: اگر از سیاست مدت‌زمانی (Duration) یا زمان‌بندی‌شده (Schedule) استفاده می‌کنید، می‌توانید گزینهٔ به‌روزرسانی خودکار کش را هم فعال کنید.
  5. تغییرات را ذخیره کنید.

تعامل سیاست‌های کش در سطح داشبورد، سؤال، دیتابیس و پیش‌فرض

اگر چند سیاست کش متفاوت روی یک سؤال اثر بگذارند، متابیس طبق ترتیب زیر اولین سیاست موجود را اعمال می‌کند:

  1. سیاست سطح سؤال
  2. سیاست سطح داشبورد
  3. سیاست سطح دیتابیس
  4. سیاست پیش‌فرض (کل سایت)

بنابراین سیاست کش تعریف‌شده در سطح سؤال بر سیاست داشبورد اولویت دارد، سیاست داشبورد بر سیاست دیتابیس، و سیاست دیتابیس بر سیاست پیش‌فرض.

پاک‌کردن کش

برای پاک‌کردن کش و گرفتن نتایج جدید:

  • سؤال‌ها و داشبوردها: آیتم مورد نظر را باز کنید و از مسیر Info > Caching policy > Clear cache دکمهٔ «Clear cache» در پایین سایدبار را بزنید.
  • دیتابیس: روی آیکون چرخ‌دنده کلیک کنید و از مسیر Admin settings > Performance > Database caching دیتابیس مورد نظر را انتخاب کنید و روی دکمهٔ Clear cache در پایین صفحه کلیک کنید.

محل ذخیرهٔ کش

اگر متابیس را به‌صورت self‑hosted اجرا می‌کنید، نتایج کش‌شدهٔ سؤال‌ها در پایگاه‌دادهٔ اپلیکیشن شما ذخیره می‌شوند.

اگر از Metabase Cloud استفاده می‌کنید، نتایج کش‌شده روی سرورهای متابیس در ایالات متحده ذخیره می‌شوند (چون سرویس Cloud مدیریت پایگاه‌دادهٔ اپلیکیشن شما را بر عهده دارد).

مطالعهٔ بیشتر