ĐĂNG KÝ ĐỂ NHẬN THÔNG TIN MỚI NHẤT

Tổng kết 1h45 phút livestream mổ xẻ kiến trúc PostgreSQL cùng các anh em

Trên hành trình thực hiên mục tiêu “Đơn giản hóa PostgreSQL”, hôm nay tôi thực hiện Livestream với các anh em trong cộng đồng để cùng nhau mổ xẻ kiến trúc PostgreSQL. Sau 1h45 phút cùng nhau nghiên cứu, phân tích, đánh giá các tài liệu từ tiếng Việt, đến tiếng Anh, tìm đủ thể loại trên Google, tôi có một số đúc kết muốn chia sẻ cùng cộng đồng.

1. Mục tiêu & Cách thức thực hiện buổi Livestream của tôi như thế nào?

Mục tiêu: Hiểu rõ, ánh xạ được kiến trúc của PostgreSQL với những thứ dễ hiểu, đây là một phần của hành trình đơn giản hóa PostgreSQL mà tôi đang thực hiện.

Cách thức: Tôi sẽ Online và cùng các anh em tham gia theo một số luật sau

  • Thứ nhất: Tôi không đóng vai trò của người giải đáp. Trên thực tế, tôi sẽ cùng anh em đặt ra các câu hỏi và cùng nghiên cứu theo hướng các câu hỏi đó. Mọi người sẽ cùng cộng hưởng tri thức với nhau.

  • Thứ hai: Giữ cho kiến thức ở trạng thái mở, không bị áp đặt bằng các hiểu biết trước đây và đặt ra nhiều câu hỏi nhất có thể, xoay quanh nhiều khía cạnh liên quan đến kiến trúc.

  • Thứ ba: Tôi và các anh em sẽ cùng search tài liệu (blogs, video, sách vở, bí kíp…), và chúng tôi sẽ cùng phân tích những tài liệu ấy. Anh em nào mà search được link tài liệu hay thì cùng share với nhau

  • Thứ tư: chúng tôi cùng chắt lọc tất cả những kiến thức hay, link chi tiết để cho sản phẩm cuối cùng “Đơn giản hóa PostgreSQL”.

2. Những điều gì đọng lại sau buổi mổ xẻ kiến trúc PostgreSQL

2.1. Đa phần các blog tiếng Việt đều chia sẻ những kiến thức đơn giản, trong đó nhiều bài là sao chép của nhau 100% nội dung

Đa phần các bài viết bằng tiếng Việt đều chia sẻ về các chủ đề đơn giản như

  • PostgreSQL là gì?
  • Tổng quan về PostgreSQL?
  • Giới thiệu về PostgreSQL?

Trong các bài viết này, rất nhiều bài viết là copy của nhau.

Dẫn chứng về nội dung giống nhau không khác một chữ

Bài viết tìm kiếm với từ khóa: “PostgreSQL là gì?”

Nội dung bài Blog 1 Nội dung bài Blog 2

 

2.2. Các bài blog tiếng Việt được cóp nhặt từ blog tiếng Anh nhưng không có sự hiệu chỉnh với các thuật ngữ đã không còn phù hợp

Đi tìm chuyên sâu các từ khóa liên quan đến Kiến trúc cơ sở dữ liệu PostgreSQL, kiến trúc PostgreSQL, tôi thấy được một số bài viết nổi bật như

Bài viết về Kiến trúc của PostgreSQL trên Viblo: https://viblo.asia/p/kien-truc-cua-postgresql-E375zAB1lGW với thứ hạng số 1 của tìm kiếm trên google.

Thông tin tổng quan của bài viết này như sau:

  • Chủ đề chính: Kiến trúc của PostgreSQL
  • Bài viết này được đăng vào ngày 3 tháng 8 năm 2022.
  • Các nội dung chính: 5 nội dung
    • Bộ nhớ
    • Tiến trình
    • Cơ sở dữ liệu
    • Cấu trúc thư mục
    • Vacuum

Ảnh dẫn chứng

Dẫn chứng bài viết viblo kiến trúc PostgreSQL

 

Một số nhận xét dưới góc độ chuyên môn:

  • Bài viết mô tả về kiến trúc của PostgreSQL nhưng lại để riêng 1 hạng mục Vaccum và hạng mục cấu trúc thư mục, ngang hàng với 3 thành phần chính tạo nên PostgreSQL (Bộ nhớ – tiến trình – cơ sở dữ liệu), nội dung này sẽ làm một người mới đọc thấy khó hình dung tổng thể.
  • Bài viết có dịch lại từ tài liệu tiếng Anh, tuy nhiên thuật ngữ sử dụng đã không còn “chính xác” nhất với năm xuất bản. Ví dụ: Thông tin về Postmaster Process đã là tên gọi cũ trong kiến trúc của PostgreSQL. Ngay cả từ hình minh họa các anh em cũng có thể thấy không tồn tại tên của Postmaster, mà chỉ tồn tại tên Postgres. Dưới đây là dẫn chứng đoạn nội dung trên Viblo + nội dung nguồn từ tài liệu tiếng Anh đang sử dụng thuật ngữ đã cũ.
Nội dung trên Viblo Nội dung nguồn tiếng Anh: https://severalnines.com/blog/understanding-postgresql-architecture/
postgresql trên viblo

 

Ghi chú: Tài liệu của bạn trên Viblo có trích dẫn nguồn tham chiếu.

2.3. Tài liệu tiếng Anh về kiến trúc PostgreSQL nhiều hơn nhưng cũng chưa có tài liệu nào đủ sâu .

Thực hiện nghiên cứu một số website thuộc TOP khi tìm kiếm với từ khóa PostgreSQL Architecture.

Cảm giác chung khi nghiên cứu các tài liệu này (và tôi cũng đã đọc rất nhiều blogs khác, không chỉ dừng lại tại các blogs bên trên)

  • Chưa có bài viết đủ sâu, chia sẻ kỹ lưỡng về kiến trúc và cách hoạt động của PostgreSQL.

 

2.3.1. Với trang geeksforgees.org, cách tiếp cận của kiến trúc PostgreSQL theo hướng:

  • PostgreSQL được xây dựng theo kiến trúc Client – Server và bài viết chia kiến trúc PostgreSQL thành 2 loại process chính
    • Client – side Process
    • Server – side Process
  • Hình vẽ về kiến trúc tổng thể được trình bày như sau

Kiến trúc PostgreSQL

  • Với cách tiếp cận này, bài viết mô tả thế nào là Client – side Process.
  • Tuy nhiên không có phần phân chia rõ ràng về Server – side Process, có thể là do lỗi đánh máy, tạm thời bỏ qua.
  • Với phần phân tích chi tiết bên trong Server – side Process thì được trình bày khá lộn xộn, nếu một người mới bắt đầu tìm hiểu về PostgreSQL khi đọc sẽ khó phân tách được các thành phần, ví dụ một số  nội dung không logic trong bày viết này:
    • Bài viết nói về Back-end process làm nhiệm vụ truy cập vào dữ liệu trong một phần bộ nhớ gọi là main-memory buffer pool (thuộc Shared memory) trong hình vẽ, sau đó mang kết quả trả ra cho ông Client Process. Đến đây có vẻ mọi thứ vẫn ổn, nhưng ngay sau đó tác giả lại đưa vào 1 danh sách các Process chẳng liên quan gì (thực ra nó sẽ thuộc vào một loại process khác, có nhiệm vụ khác với bank-end process).
    • Dẫn chứng:process không cần thiét
  • Bài viết cũng không chỉ rõ các Process thời điểm nào sẽ thực hiện. Nội dung về kiến trúc chưa thật sự rõ ràng và đủ độ sâu.

2.3.2. Với wikibooks

Tôi đánh giá bài viết tại đây có giá trị chất xám cao hơn so với bài viết của tác giả tại geeksforgees.org.

Bài viết cũng tiếp cận dưới góc nhìn kiến trúc PostgreSQL là kiến trúc dạng Client – Server

Mô hình kiến trúc trong bài viết này tôi cũng đánh giá là rõ ràng và cụ thể hơn ở bài viết bên trên.

Kiến trúc PostgreSQL

Một số ưu điểm khiến tôi đánh giá hình vẽ về kiến trúc PostgreSQL tại đây có giá trị:

  • Thứ nhất: Hình vẽ có số thứ tự và chiều các mũi tên cho chúng ta hình dung được các luồng sẽ thực hiện (các tiến trình sẽ tương tác với bộ nhớ nào, hoặc sẽ ghi xuống file nào)
  • Thứ hai: Hình vẽ có sự chi tiết hơn rất nhiều so với mô hình PostgreSQL ở trang geeksforgees.org
    • Phần bộ nhớ tại đây chỉ rõ có 2 loại bộ nhớ Shared Memory và Individual Memory, tương ứng với đó là các tham số để cấu hình.
    • Thay vì chỉ ghi mỗi Disk Storage, tại đây tách biệt một số loại file quan trọng, tương ứng với các files đó sẽ có các tiến trình nào thực hiện.
  • Thứ ba: Bố cục thể hiện khá logic. Nhìn vào hình vẽ ta có thể thấy rằng: tại bên Server Side sẽ có 3 thành phần chính
    • RAM (Bộ nhớ): Bao gồm Bộ nhớ dùng chung (Shared Memory) và các bộ nhớ riêng biêt cho từng connection (Individual Memory)
    • PROCESS (Tiến trình): Bao gồm 1 tập các tiến trình “gì đó” được liệt kê trong ảnh, mỗi mũi tiên cho ta biết chiều tương tác của các tiến trình đó. Có tiến trình sẽ làm việc với phần bộ nhớ, có tiến trình làm việc với Files…
    • FILES: Có nhiều loại files, mỗi files sẽ có một loại Process riêng để làm việc

 

Bài viết này cũng chỉ rõ hơn một số thứ tự khi thực hiện của Process.

Tuy nhiên vẫn chưa thực sự rõ các ngưỡng mà các process này thực hiện là gì trong bài viết, ví dụ như

  • Tại các thời điểm nào thì WAL Writer sẽ ghi xuống WAL files.?
  • Sao bao nhiêu lâu (giây hoặc mili giây hoặc 1 điều kiện cụ thể nào) thì Checkpointer sẽ thực hiện?

2.3.3. Với bài viết tại severalnines.com

Tác giả tại đây vào đề ngay, kiến trúc của PostgreSQL đơn giản như sau

Kiến trúc PostgreSQL

 

Tại bài viết này, tác giả có một cái hay là tập trung vào những thành phần quan trọng nhất, lược bỏ đi những thành phần phụ. Những anh em mới học sẽ cảm thấy dễ dàng hơn khi tiếp cận.

Bài viết cũng khéo léo so sánh kiến trúc của PostgreSQL so với kiến trúc của Oracle tại phần cuối bài.

Tuy nhiên những nội dung của bài viết vẫn chỉ ở mức tóm lược, chưa đủ độ sâu về kiến trúc, vấn đề gặp phải tại bài viết này cũng giống như tất cả các bài viết bên trên:

  • Không chỉ rõ được các thời điểm hoạt động của Process
  • Người đọc vẫn chưa thật sự hình dung được khi một transaction thực hiện (có các câu lệnh SELECT, UPDATE, DELETE…) thì các tiến trình hoạt động thế nào, vùng bộ nhớ được sử dụng ra sao, đến ngưỡng nào thì tiến trình sẽ thi nội dung xuống các files, files nào được ghi…

3. Hành trình Đơn giản hóa PostgreSQL

Tôi đang thực hiện hành trình “Đơn giản hóa PostgreSQL” – mổ xẻ toàn bộ cơ chế hoạt động và những vấn đề về PostgreSQL, sau đó hình ảnh hóa, đơn giản hóa chúng.

Tôi có ghi lại các buổi nghiên cứu, phân tích của tôi trên quãng đường ấy, và tôi cũng có những buổi livestream để cùng nghiên cứu, mổ xẻ vấn đề với cộng đồng.

Toàn bộ hành trình của tôi được ghi lại tại:

Các anh em có thể tham gia cùng tôi, cùng thảo luận, góp ý câu hỏi, góp ý tài liệu, góp ý những kiến thức mà anh em muốn tôi sẽ tập trung phân tích, mọi người tham gia qua nhóm sau nhé: https://wecommit.com.vn/groupfb

Ghi chú: Nhóm có các nguyên tắc hoạt động rõ ràng và rất tuân thủ nó, anh em đọc kỹ nguyên tắc nếu muốn gửi yêu cầu tham dự nhé.

4. Một số nội dung khác liên quan đến PostgreSQL

5. Nếu bạn muốn liên hệ với tôi

Tác giả: Trần Quốc Huy – Founder & CEO Wecommit

Facebook: https://www.facebook.com/tran.q.huy.71

Email: huy.tranquoc@wecommit.com.vn

Youtube: Trần Quốc Huy

Số điện thoại: 0888549190

Views: 146





    Câu hỏi bảo mật

    Trả lời

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    Ask ChatGPT
    Set ChatGPT API key
    Find your Secret API key in your ChatGPT User settings and paste it here to connect ChatGPT with your Tutor LMS website.