UUIDv4 và UUIDv7 trên Postgres: cái giá của khóa chính ngẫu nhiên
Cùng một bảng, cùng một luồng insert, ba loại khóa chính khác nhau trên Postgres 18. Kết quả thử nghiệm cho thấy ở mức 100 triệu dòng, UUIDv4 chỉ đạt tốc độ chèn bằng 0,62 đến 0,69 lần so với một khóa có thứ tự trên cùng máy chủ, đồng thời ghi lượng WAL mỗi dòng gấp 1,5 đến 1,9 lần.
Bối cảnh phép so sánh
Phép thử giữ nguyên bảng và luồng insert, chỉ thay đổi kiểu khóa chính. Ba phương án được đặt cạnh nhau trên Postgres 18 để đo hai chỉ số: tốc độ chèn và lượng WAL phát sinh trên mỗi dòng. Cách bố trí này giúp cô lập tác động của việc chọn khóa chính, thay vì trộn lẫn với các yếu tố khác của hệ thống.
Con số ở mức 100 triệu dòng
- Tốc độ chèn của UUIDv4 chỉ bằng 0,62 đến 0,69 lần khóa có thứ tự.
- Lượng WAL ghi trên mỗi dòng của UUIDv4 cao gấp 1,5 đến 1,9 lần.
Đây là hai hệ quả trực tiếp và dễ thấy nhất khi dùng khóa chính ngẫu nhiên hoàn toàn thay cho khóa có thứ tự.
Câu hỏi được đặt ra
Tác giả Nikolay Samokhvalov không chỉ nêu con số mà còn đặt vấn đề về nguồn gốc của chi phí: cái giá này bắt đầu từ đâu và được cấu thành từ những gì. Việc xác định điểm khởi phát và các thành phần cấu thành giúp người thiết kế cơ sở dữ liệu hiểu rõ hơn khi nào nên cân nhắc giữa tính ngẫu nhiên của UUIDv4 và tính có thứ tự của các lựa chọn như UUIDv7.
Nguồn: Planet PostgreSQL
Trích nguồn từ: Planet PostgreSQL
Tags:
Bài viết liên quan
Nâng cấp PostgreSQL tại chỗ không downtime trên cụm phân tán
Ahsan Hadi hướng dẫn nâng cấp tại chỗ từng node PostgreSQL từ 17.10 lên 18.6 trên cụm Spock đa master, giữ ứng dụng luôn có endpoint ghi trong khi mỗi node tạm ngừng vài phút.
Đọc thêm
Ilya Kosmodemiansky bàn về file cấu hình postgresql.conf "mặc định"
Bài đầu tiên trong loạt bốn phần của Ilya Kosmodemiansky (Data Egret) về cách PostgreSQL đọc cấu hình và nhóm thiết lập kết nối, dựa trên bản PostgreSQL 18.
Đọc thêmChris van Eijk: Lỗi 'server closed the connection unexpectedly' trong PostgreSQL
Phân tích lỗi PostgreSQL đóng kết nối bất ngờ khi có sáu client, cách đọc log máy chủ theo từng nguyên nhân, nơi lưu lý do và các COMMIT bị mất.
Đọc thêmChristophe Pettus: Hiểu đúng về row_security trong PostgreSQL
Chuyên gia tư vấn PostgreSQL Christophe Pettus giải thích rằng đặt row_security = off không tắt bảo mật cấp dòng mà sẽ gây lỗi khi có chính sách được áp dụng.
Đọc thêm
Mô hình Data Warehouse: Sơ đồ ngôi sao
Trình bày về mô hình ngôi sao (star schema) khi xây dựng một dat a warehouse phục vụ mục đích báo cáo và phân tích cho doanh nghiệp.
Đọc thêm
Sự khác nhau giữa hệ thống OLAP và OLTP?
Có 2 loại ứng dụng cơ sở dữ liệu trong việc phát triển ứng dụng mà chúng ta cần biết. Bài viết này sẽ nói cho bạn biết sự giống và khác nhau giữa 2 loại hệ thống này.
Đọc thêm