THẢO LUẬN

Một câu hỏi hay. Overhead là chi phí hoặc tài nguyên mà postgres phải bỏ thêm đễ xử lý, lưu trữ. gồm:

  • Không gian lưu trữ: update sẽ tạo ra thêm record gây tốn thêm không gian lưu trữ. cách giải quyết thì nằm chính trong câu hỏi của bạn là postgres dùng VACUUM
  • Thời gian xử lý: để giải quyết vấn đề này thì postgres có cơ chế MVCC cho nhiều tác vụ chạy đồng thời á.
  • Tài nguyên hệ thống: việc chạy VACUUM để dọn dẹp không gian lưu trữ chẳng hạn, thì lại gây tốn tài nguyên hệ thống. Thường postgres sẽ lập lịch để xử lý định kỳ dữ liệu chứ không phải lúc nào cũng có dư thừa là đi dọn dẹp. Ngoài ra, ví dụ trong trường hợp của bạn (2 query update gọi cùng 1 lúc, ko sai 1 milisecond nào), mình sẽ vẽ thêm 2 case như này:
  • 2 record update cùng lúc nhưng dữ liệu update khác nhau. Như trường hợp bạn nói.
  • 2 record update gọi cùng lúc nhưng dữ liệu update là như nhau: query đầu tiên tạo ra record mới, query thứ 2 thấy dữ liệu giống với cái nó định update nên ko update lại nữa. Lúc này chỉ còn 1 record dư thừa thôi (record gốc hết hiệu lực). Đó cũng là 1 cách để postgres cố gắng giảm thiểu overhead

Ngoài ra còn có HOT (Heap-Only Tuples) Updates: việc tạo bản ghi mới có thể ảnh hưởng đến index gây overhead. Nhưng nếu việc udpate không ảnh hưởng tới cột mà mình đánh index thì postgres có thể sẽ tạo một bản ghi mới ngay trong cùng "page" với bản ghi cũ. Lúc này sẽ không cần cập nhật lại index vì nó vẫn trỏ đến vị trí cũ đc.

Có thể còn nhiều cách thức khác để giảm overhead, nếu bạn biết có thể giới thiệu thêm với mình nhé.

0
thg 10 5, 2024 4:48 SA

Đừng dùng AI Viết bài nữa

0

"postgres không thực chất update lên record cũ mà nó insert 1 record mới vào database, record cũ được đánh dấu là không còn hiệu lực, rồi sử dụng VACUUM để dọn dẹp định kì những dữ liệu dư thừa." Vậy chỗ này có case 1 record được update 1 lúc bởi 2 query, theo lý thuyết thì nó sẽ insert 2 record vào db đúng không ạ? Vậy postgres xử lý overhead như nào anh nhỉ?

+1

A ơi, em có một vấn đề là khi mà ghi đè /api/broadcasting/auth như vậy thì ở trong code khi em truy cập auth()->user() thì nó trả về null chứ k lấy được user đang login ạ

0
thg 10 5, 2024 3:03 SA

Very interesting!!!!

+1
Avatar
đã bình luận cho bài viết
thg 10 5, 2024 12:48 SA

ừa, mình đang viết bài expose application trong EKS với aws load balancer controller nhé, rồi autoscaling nữa. đợt vừa rồi mình bận nên ko có thời gian viết tiếp.

Cảm ơn bạn nhé.

0

Nhanh nhất thì bác mua khoá học, chẳng hạn của wecommit, thấy chú đó giảng sâu về database lắm. Mình thì ko có xèng nên tìm kiếm mỗi nơi một ít rồi góp nhặt về thôi.

0

Qúa dữ, bài viết bổ ích

0
thg 10 4, 2024 9:37 SA

.

0

🙏

0
thg 10 4, 2024 7:36 SA

Cảm ơn bạn, tài liệu rất chi tiết 👍️

0

This post gave me great insights, I'm excited to discover more content of this quality.

0

That's so great

0

🙏

0

It is best article ^^

0

🙏

0

This post is so good for me, I hope to see many post like this

0

Có nguồn nào để đọc các thông tin hữu ích như này không?

+1

Dạ vâng, hiện tại Google Map đưa ra một số quy định áp dụng cho người dùng tại Việt Nam gây ra một số hạn chế nhất định. Bạn có thể tham khảo và trải nghiệm thử một số nền tảng bản đồ trong nước nhé.

0

Cảm ơn bạn đã góp ý bài viết của Goong. Giống như đã đề cập thì VietMap là một đơn vị lớn với nền tảng dữ liệu có sẵn đồ sộ và rất bài bản. Và với bất kỳ nền tảng nào cũng sẽ có những điểm mạnh, điểm hạn chế nhất định. Goong không đánh giá VietMap hay bất kỳ đơn vị nào chất lượng không tốt mà chỉ ra một số hạn chế để người dùng có thể tham khảo và thử trải nghiệm. Goong sẽ luôn tiếp thu ý kiến từ bạn đọc và ngày càng cải thiện hơn về thông tin của mình. Trân trọng!

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí