دید همزمان (CONCURRENTLY View) در پایگاه داده چیست؟
دید همزمان (CONCURRENTLY View) در پایگاه داده به دید مادی گفته میشود که فرایند بهروزرسانی آن به گونهای انجام میشود که حداقل اختلال در دسترسی به دادههای پایه و خود دید ایجاد شود. به عبارت دیگر، در حین بهروزرسانی یک دید همزمان، کاربران دیگر میتوانند به دادههای موجود در دید دسترسی داشته باشند و تغییرات جدید نیز به تدریج در دید اعمال میشوند.
چرا از دید همزمان استفاده میکنیم؟
- کاهش زمان انتظار: با استفاده از دید همزمان، کاربران مجبور نیستند تا پایان فرایند بهروزرسانی منتظر بمانند و میتوانند به دادههای بهروز شده دسترسی پیدا کنند.
- افزایش در دسترس بودن دادهها: دید همزمان باعث میشود که دادهها همیشه در دسترس کاربران باشند و فرایند بهروزرسانی خللی در کار آنها ایجاد نکند.
- بهبود کارایی سیستم: با توزیع بار کاری بهروزرسانی در طول زمان، از ایجاد ترافیک سنگین در پایگاه داده جلوگیری میشود.
نحوه کار دید همزمان
- ایجاد قفلهای سازگار: هنگام بهروزرسانی دید همزمان، قفلهای سازگاری روی جداول پایه و خود دید ایجاد میشود. این قفلها به گونهای طراحی شدهاند که به چندین کاربر اجازه میدهند همزمان به دادهها دسترسی داشته باشند.
- کپی دادهها: یک کپی از دادههای جدید به صورت موقت ایجاد میشود.
- بروزرسانی شاخصها: شاخصهای موجود در دید بهروزرسانی میشوند تا با دادههای جدید همخوانی داشته باشند.
- جایگزینی دادههای قدیمی: دادههای قدیمی در دید با دادههای جدید جایگزین میشوند.
- رهاسازی قفلها: پس از اتمام فرایند بهروزرسانی، قفلها آزاد میشوند.
مثال
فرض کنید یک فروشگاه آنلاین داریم که جدولی به نام sales
برای ثبت فروش محصولات داریم. میخواهیم یک دید همزمان ایجاد کنیم که مجموع فروش روزانه هر محصول را نشان دهد.
CREATE MATERIALIZED VIEW CONCURRENTLY daily_sales AS
SELECT product_id,
sale_date,
SUM(amount) AS total_sales
FROM sales
GROUP BY product_id, sale_date;
در این مثال، با استفاده از کلیدواژه CONCURRENTLY
، دید daily_sales
به صورت همزمان بهروزرسانی میشود و کاربران دیگر میتوانند در حین بهروزرسانی به دادههای این دید دسترسی داشته باشند.
مثال عددی برای دید همزمان (CONCURRENTLY View)
فرض کنید یک فروشگاه آنلاین داریم که جدولی به نام orders
با ساختار زیر دارد:
order_id | product_id | customer_id | order_date | amount |
---|---|---|---|---|
۱ | ۱۰۱ | ۱ | ۲۰۲۳-۱۱-۰۱ | ۱۰۰ |
۲ | ۱۰۲ | ۱ | ۲۰۲۳-۱۱-۰۲ | ۵۰ |
۳ | ۱۰۱ | ۲ | ۲۰۲۳-۱۱-۰۱ | ۱۵۰ |
۴ | ۱۰۳ | ۲ | ۲۰۲۳-۱۱-۰۳ | ۲۰۰ |
میخواهیم یک دید همزمان ایجاد کنیم که مجموع فروش روزانه هر محصول را نشان دهد:
CREATE MATERIALIZED VIEW CONCURRENTLY daily_sales AS
SELECT product_id,
order_date,
SUM(amount) AS total_sales
FROM orders
GROUP BY product_id, order_date;
با اجرای این دستور، یک دید مادی به نام daily_sales
ایجاد میشود که به صورت همزمان بهروزرسانی میشود.
چگونه این دید کار میکند؟
فرض کنید در حین اجرای این دستور، یک سفارش جدید با شناسه ۵ برای محصول ۱۰۱ ثبت میشود.
- قفل سازگار: یک قفل سازگار روی جدول
orders
و دیدdaily_sales
ایجاد میشود. این قفل به سایر فرآیندها اجازه میدهد تا دادههای موجود در دید را بخوانند اما نمیتوانند تغییراتی ایجاد کنند. - کپی دادهها: یک کپی موقت از دادههای جدید ایجاد میشود.
- بروزرسانی شاخصها: شاخصهای موجود در دید بهروزرسانی میشوند تا شامل سفارش جدید نیز باشند.
- جایگزینی دادههای قدیمی: دادههای قدیمی در دید با دادههای جدید جایگزین میشوند.
- رهاسازی قفل: قفلها آزاد میشوند و سایر فرآیندها میتوانند به دادههای بهروز شده دسترسی پیدا کنند.
مزایای استفاده از دید همزمان در این مثال:
- دسترسی همزمان: در حین بهروزرسانی دید، سایر کاربران میتوانند به مجموع فروش روزانه محصولات دسترسی داشته باشند و تصمیمگیریهای خود را بر اساس دادههای بهروز شده انجام دهند.
- کاهش زمان انتظار: کاربران مجبور نیستند تا پایان فرایند بهروزرسانی منتظر بمانند.
- بهبود کارایی: با توزیع بار کاری بهروزرسانی در طول زمان، از ایجاد ترافیک سنگین در پایگاه داده جلوگیری میشود.
مثال عملی:
فرض کنید یک کاربر میخواهد مجموع فروش محصول ۱۰۱ در تاریخ ۲۰۲۳-۱۱-۰۱ را بداند. حتی در حین بهروزرسانی دید، این کاربر میتواند به این اطلاعات دسترسی داشته باشد.
SELECT total_sales
FROM daily_sales
WHERE product_id = 101 AND order_date = '2023-11-01';
نکته مهم:
- عملکرد: عملکرد دید همزمان به عوامل مختلفی مانند حجم دادهها، پیچیدگی پرسوجو، منابع سیستم و تنظیمات پایگاه داده بستگی دارد.
- سازگاری: همه پایگاههای داده از دید همزمان پشتیبانی نمیکنند یا ممکن است محدودیتهایی برای استفاده از آن داشته باشند.
در این مثال ساده، دیدیم که چگونه دید همزمان میتواند به ما کمک کند تا به دادههای بهروز شده دسترسی داشته باشیم و در عین حال از عملکرد پایگاه داده نیز محافظت کنیم.
نکات مهم
- عملکرد: عملکرد دید همزمان به عوامل مختلفی مانند حجم دادهها، پیچیدگی پرسوجو، منابع سیستم و تنظیمات پایگاه داده بستگی دارد.
- سازگاری: همه پایگاههای داده از دید همزمان پشتیبانی نمیکنند یا ممکن است محدودیتهایی برای استفاده از آن داشته باشند.
- بهرهوری: استفاده از دید همزمان ممکن است باعث افزایش مصرف منابع سیستم شود.
- بروزرسانیهای همزمان: در برخی موارد، ممکن است تغییرات همزمان در جداول پایه باعث ایجاد ناسازگاریهای موقتی در دید همزمان شود.
چه زمانی از دید همزمان استفاده کنیم؟
- زمانی که نیاز به دسترسی همزمان به دادهها دارید و نمیتوانید تا پایان فرایند بهروزرسانی منتظر بمانید.
- زمانی که حجم دادهها زیاد است و بهروزرسانی کامل دید زمانبر است.
- زمانی که میخواهید از ایجاد ترافیک سنگین در پایگاه داده جلوگیری کنید.
در کل، دید همزمان یک ابزار قدرتمند برای بهبود عملکرد و در دسترس بودن دادهها در پایگاه داده است. با استفاده صحیح از این ویژگی، میتوانید کارایی سیستم خود را افزایش داده و تجربه کاربری بهتری را برای کاربران فراهم کنید.