در پایگاه داده، اصطلاح Materialized معمولاً در قالب Materialized View (ویوی مادیشده) استفاده میشود. این مفهوم در دیتابیسهایی مثل PostgreSQL، Oracle و … وجود دارد.
Materialized View یعنی:
نتیجهی یک کوئری (Query) را از قبل محاسبه کرده و بهصورت فیزیکی ذخیره کنیم، نه اینکه هر بار دوباره محاسبه شود.
🔍 تفاوت با View معمولی
| ویژگی | View معمولی | Materialized View |
| ذخیره داده | ❌ ندارد | ✅ دارد |
| سرعت | کندتر (هر بار اجرا) | سریعتر |
| بهروز بودن | همیشه بهروز | نیاز به refresh |
| مصرف فضا | کم | بیشتر |
در حقیقت یک نوع viewخاص است با این تفاوت که نتیج در یک جدول واقعی ذخیره شده و بعد مورد استفاده قرار میگیرد. زمان استفاده از این نوع ویو باید به نکات زیر حتما توجه کنید:
- دادهها ممکن است stale (قدیمی) باشند
- نیاز به refresh strategy داری (مثلاً هر شب)
- فضای بیشتری مصرف میکند
⚙️ مثال کاربردی از استفاده Materialized
فرض کن یک کوئری سنگین داری:
SELECT customer_id, SUM(amount)
FROM sales
GROUP BY customer_id;
اگر این کار را با همین view ساده انجام دهیم، هر بار که اجرا شود، کل جدول sales دوباره پردازش میشود. به ازای هر استفاده این کار انجام میشود که برای پایگاه داده یک پردازش بسیار سنگین است. اما میتوانیم همین کار را با materialized view انجام دهیم. این کار به صورت زیر انجام میشود:
CREATE MATERIALIZED VIEW sales_summary AS
SELECT customer_id, SUM(amount)
FROM sales
GROUP BY customer_id;
👉 نتیجه یکبار محاسبه و ذخیره میشود. اما همانطور که قبلا هم اشاره شد این دادهها خود به خود به روز نمیشوند و باید یک استراتژی به روز رسانی وجود داشته باشد.
🔄 بهروزرسانی (Refresh)
چون داده ذخیره شده، باید خودت آن را آپدیت کنی:
REFRESH MATERIALIZED VIEW sales_summary;
یا در PostgreSQL:
REFRESH MATERIALIZED VIEW CONCURRENTLY sales_summary;
🚀 کاربردها
Materialized View خیلی مهم است وقتی:
1. گزارشگیری سنگین (Reporting)
- داشبوردها
- BI (مثل Power BI)
- گزارشهای مالی
2. بهینهسازی performance
- کاهش load روی دیتابیس
- جلوگیری از اجرای مکرر کوئریهای پیچیده
3. Data Warehousing
- ساخت لایههای Aggregation
- ETL pipelines
💡 ارتباط با Odoo
در Odoo هم گاهی برای گزارشهای سنگین (مثلاً فروش، انبار، حسابداری) از Materialized View استفاده میشود تا:
- سرعت گزارش بالا برود
- فشار روی ORM کمتر شود