برنامه نویسی

عملکرد جدول Logged VS Unlogged در Postgres

معرفی

دوام و سازگاری برای پایگاه داده های رابطه ای ضروری است. آنها بخشی از اصول ACID هستند.

برای اطمینان از این دوام و سازگاری، پایگاه های داده رابطه ای از چندین تکنیک استفاده می کنند. یکی از این موارد استفاده از فایل WAL (فایل Write-Ahead Log) است.

بیایید ببینیم این به چه معناست و چگونه بر عملکرد عملیات خواندن و نوشتن ما تأثیر می گذارد. و تعیین می کند که چه چیزی می تواند برای یک فرآیند ETL مناسب تر باشد.

جداول

جداول ثبت شده

هنگامی که یک جدول در یک پایگاه داده رابطه ای ایجاد می کنید، یک جدول ثبت شده ایجاد می کنید. هر دستکاری (عبارت DML) روی داده های شما قبل از اجرا در پایگاه داده شما در فایل WAL ثبت می شود. LOGGED جدول.

CREATE TABLE logged_table(test integer);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به عنوان مثال، اگر یک درج و سپس حذف در یک تراکنش به صورت زیر انجام دهید:

BEGIN;
INSERT INTO logged_table VALUES (1);
DELETE FROM logged_table;
COMMIT;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این کار فایل WAL، درج مورد نظر و حذفی که می‌خواهید انجام دهید، می‌نویسد.
سپس درج و در نهایت حذف را انجام می دهد.

این تضمین می کند:

  • داده ها ثابت می مانند
  • بازیابی اطلاعات در صورت خرابی سیستم

جداول ثبت نشده

نوع دیگری از جدول در جدول unlogg نشده پایگاه داده رابطه ای وجود دارد.

CREATE UNLOGGED TABLE unlogged_table(test integer);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کارایی

همانطور که می توانید بگویید، نوشتن هر عملیات در یک فایل log قبل از اجرا هزینه سربار دارد.

با جداول ساده ای که قبلا ایجاد کرده بودیم:

select now();
insert into logged_table values(generate_series(1,20000000));
select now();

        clock_timestamp
-------------------------------
 2023-06-19 09:07:55.525075+04
(1 row)

INSERT 0 20000000
        clock_timestamp
-------------------------------
 2023-06-19 09:08:20.054688+04
(1 row)


-------------------------------------------------------------


select now();
insert into unlogged_table values(generate_series(1,20000000));
select now();

insert into test2 values(generate_series(1,20000000));
select clock_timestamp();
        clock_timestamp
-------------------------------
 2023-06-19 09:07:37.594111+04
(1 row)

INSERT 0 20000000
       clock_timestamp
------------------------------
 2023-06-19 09:07:41.37622+04
(1 row)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جداول بدون لاگ به ما امکان می دهند داده ها را سریعتر دستکاری کنیم. در اینجا برای حجم قابل توجهی از داده ها، ما بیش از 50 درصد اختلاف سرعت داریم.

نیازهای فرآیند ETL

آیا یک فرآیند ETL به WAL نیاز دارد؟ ممکن است نباشد. در واقع فرآیندهای ETL فرآیندهایی هستند که اغلب با تغییر داده ها مجدداً اجرا می شوند. آسان است، و ما باید اطمینان حاصل کنیم که داده ها به درستی قالب بندی و ذخیره می شوند.

در اینجا سرعت از اصول ACID ارزشمندتر است زیرا می‌توانیم خط لوله خود را بدون ترس از دست دادن داده‌های خود دوباره اجرا کنیم.

در این صورت، جدول لاگ نشده می تواند دارایی ارزشمندی باشد.

نتیجه

RDBMS مورد علاقه ما ویژگی های زیادی دارد، و هر چه بیشتر در آن جستجو کنید، بیشتر متوجه می شوید که چیزهایی برای کشف وجود دارد.

استفاده از هر ویژگی به خاطر آن چیزی غیر از آن چیزی است که ما می خواهیم. اما در این مورد، دانستن تفاوت بین یک جدول Logged و یک جدول Unlogged می تواند منجر به زمان برد و سرعت اجرا در خط لوله ETL ما شود.

برای مقاله زیر شما را می بینم. امیدوارم از آن لذت ببرید!

در تماس باش

در توییتر : @yet_anotherDev

در لینکدین: لوکاس بارت

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا