Trong PostgreSQL, hai kiểu lưu trữ chính được sử dụng cho các bảng là heapTOAST. Dưới đây là sự khác nhau giữa chúng:

1. Heap Storage

  • Khái niệm: Heap là kiểu lưu trữ mặc định cho các bảng trong PostgreSQL. Nó lưu trữ các bản ghi trong một cấu trúc dữ liệu không được sắp xếp, nghĩa là các bản ghi có thể được thêm vào bất kỳ đâu trong khối dữ liệu của bảng.
  • Cách hoạt động:
    • Khi một bản ghi được chèn vào một bảng, nó được lưu trữ tại vị trí đầu tiên có sẵn trong khối dữ liệu (page) của bảng.
    • Các bản ghi có thể có kích thước khác nhau, nhưng kích thước tối đa của một bản ghi không vượt quá 1.6KB (1,600 bytes) trên một page.
  • Đặc điểm:
    • Hiệu suất cao cho các truy vấn truy cập nhanh đến dữ liệu.
    • Không có quản lý đặc biệt cho các dữ liệu lớn hơn.

2. TOAST (The Oversized-Attribute Storage Technique)

  • Khái niệm: TOAST là một kỹ thuật được sử dụng để lưu trữ các thuộc tính (column) lớn hơn 2KB. Khi một bản ghi có một hoặc nhiều cột có kích thước lớn, PostgreSQL sử dụng TOAST để quản lý lưu trữ hiệu quả.
  • Cách hoạt động:
    • Khi một bản ghi được chèn và có cột lớn (như TEXT, BYTEA), PostgreSQL sẽ tự động chia nhỏ dữ liệu lớn đó thành các phần nhỏ hơn và lưu trữ chúng trong một bảng riêng (TOAST table).
    • TOAST sử dụng một trong ba phương pháp để lưu trữ:
      • Bỏ qua: Dữ liệu lớn sẽ được loại bỏ và không lưu trữ.
      • Lưu trữ nén: Dữ liệu sẽ được nén trước khi lưu trữ.
      • Lưu trữ ngoại: Dữ liệu lớn sẽ được lưu trữ riêng biệt.
  • Đặc điểm:
    • Giúp tối ưu hóa việc lưu trữ và giảm không gian cần thiết cho các thuộc tính lớn.
    • Cho phép truy cập dữ liệu lớn mà không cần phải tải toàn bộ nó vào bộ nhớ.

Tóm lại

  • Heap là nơi lưu trữ dữ liệu cho các bảng thông thường, nơi các bản ghi được lưu trữ theo thứ tự không xác định.
  • TOAST được sử dụng để quản lý và lưu trữ các cột lớn, giúp tối ưu hóa không gian và hiệu suất lưu trữ cho các bản ghi có kích thước lớn.

Khi bạn làm việc với dữ liệu lớn trong PostgreSQL, TOAST giúp đảm bảo rằng hiệu suất không bị ảnh hưởng quá nhiều bởi kích thước của các thuộc tính lớn này.