Postgres中记录的vs unlog桌性能
#postgres #database #性能 #data

介绍

耐用性和一致性对于关系数据库至关重要。它们是酸原理的一部分。

为了确保这种耐用性和一致性,关系数据库使用了几种技术。其中之一是使用WAL文件(写入日志文件)。

让我们看看这意味着什么以及它如何影响我们的阅读和写入操作的性能。并确定什么可以适合ETL过程。

记录桌

在关系数据库中创建表时,您将制作一个记录表。数据上的每个操作(DML语句)将在LOGGED表中运行的数据库之前登录到WAL文件。

CREATE TABLE logged_table(test integer);

例如,如果您进行插入,然后在交易中删除如下:

BEGIN;
INSERT INTO logged_table VALUES (1);
DELETE FROM logged_table;
COMMIT;

这将写下WAL文件,要执行的插入以及您要实现的删除。
然后,它将执行插入,并最终执行删除。

这可以确保:

  • 数据保持一致
  • 在系统故障的情况下恢复数据

卸桌子

关系数据库unloggogged表中有另一种类型的表。

CREATE UNLOGGED TABLE unlogged_table(test integer);

表现

您可以说,在执行费用之前,在日志文件中编写每个操作。

使用简单的表,我们以前创建了:

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过程是当数据更改时通常会重新运行的过程。这很容易,我们必须确保正确格式和存储数据。

速度在这里比酸原理更有价值,因为我们可以重新运行管道而不必担心丢失数据。

在这种情况下,未加入的表可以是宝贵的资产。

结论

我们最喜欢的rdbms具有许多功能,您越深入研究它,您就越意识到可以发现的东西。

为此而不是我们想要的东西。但是在这种情况下,了解已记录的表格和未加入的表之间的区别可能会导致我们的ETL管道中的获胜时间和执行速度。

以下文章与您见面。我希望你喜欢它!

保持联系

在Twitter上:@yet_anotherDev

on LinkedIn:Lucas Barret