- Mastering PostgreSQL 12
- Hans Jürgen Sch?nig
- 227字
- 2021-08-20 10:00:22
Considering alternative solutions
There is an alternative solution to this problem. Consider an example where you are asked to write an application to generate invoice numbers. The tax office might require you to create invoice numbers without gaps and without duplicates. How would you do this? Of course, one solution would be a table lock. However, you can really do better. Here is what you can do to handle the numbering problem we are trying to solve:
test=# CREATE TABLE t_invoice (id int PRIMARY KEY);
CREATE TABLE
test=# CREATE TABLE t_watermark (id int); CREATE TABLE
test=# INSERT INTO t_watermark VALUES (0); INSERT 0
test=# WITH x AS (UPDATE t_watermark SET id = id + 1 RETURNING *) INSERT INTO t_invoice SELECT * FROM x RETURNING *;
id
----
1
(1 row)
In this case, we introduced a table called t_watermark. It contains just one row. The WITH command will be executed first. The row will be locked and incremented, and the new value will be returned. Only one person can do this at a time. The value returned by the CTE is then used in the invoice table. It is guaranteed to be unique. The beauty is that there is only a simple row lock on the watermark table, which leads to no reads being blocked in the invoice table. Overall, this way is more scalable.
- Effective DevOps with AWS
- 機器人智能運動規劃技術
- 機器學習與大數據技術
- 21天學通Java
- Windows 7寶典
- 基于ARM 32位高速嵌入式微控制器
- Moodle Course Design Best Practices
- Docker High Performance(Second Edition)
- Android游戲開發案例與關鍵技術
- Machine Learning with the Elastic Stack
- Salesforce for Beginners
- 網絡服務搭建、配置與管理大全(Linux版)
- Learning Linux Shell Scripting
- 智能鼠原理與制作(進階篇)
- 重估:人工智能與賦能社會