PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tôi có thể lưu trữ bao nhiêu bản ghi trong 5 MB PostgreSQL trên Heroku?

Dung lượng ổ đĩa bị chiếm dụng

Tính toán không gian trên đĩa không phải là nhỏ. Bạn phải tính đến:

  • Chi phí trên mỗi bảng (nhỏ, về cơ bản là các mục nhập trong danh mục hệ thống, có thể không ảnh hưởng đến bạn trên Heroku).

  • Chi phí mỗi hàng (HeapTupleHeader) và trên mỗi trang dữ liệu (PageHeaderData). Thông tin chi tiết về bố cục trang trong sách hướng dẫn.

  • Dung lượng bị mất đối với căn chỉnh loại dữ liệu .

  • Không gian cho NULL bitmap . Miễn phí hiệu quả cho các bảng có 8 cột trở xuống, không liên quan đến trường hợp của bạn.

  • Hàng chết sau UPDATE / DELETE .

  • Kích thước của (các) chỉ mục . Bạn sẽ có một khóa chính, phải không? Kích thước chỉ mục tương tự như kích thước của một bảng chỉ có các cột được lập chỉ mục và ít chi phí hơn.

  • Yêu cầu về dung lượng thực tế của dữ liệu, tùy thuộc vào kiểu dữ liệu tương ứng . Thông tin chi tiết về các loại ký tự (bao gồm các loại độ dài cố định) trong sách hướng dẫn:

    Yêu cầu lưu trữ đối với một chuỗi ngắn (lên đến 126 byte) là 1 byte cộng với chuỗi thực, bao gồm khoảng đệm trong ký tự chữ hoa / thường character . Các chuỗi dài hơn có tổng chi phí là 4 byte thay vì 1

    Thêm chi tiết cho tất cả các loại trong danh mục hệ thống pg_type .

  • Cơ sở dữ liệu mã hóa nói riêng cho các loại ký tự. UTF-8 sử dụng tối đa bốn byte để lưu trữ một ký tự (Nhưng các ký tự 7-Bit-ASCII luôn chỉ chiếm một byte, ngay cả trong UTF-8.)

  • Những điều nhỏ khác có thể ảnh hưởng đến trường hợp của bạn, như TOAST - sẽ không ảnh hưởng đến bạn với 64 chuỗi ký tự.

Tính toán với trường hợp thử nghiệm

Một phương pháp đơn giản để tìm ước tính là tạo một bảng kiểm tra, điền vào bảng đó bằng dữ liệu giả và đo lường bằng các hàm kích thước đối tượng cơ sở dữ liệu ::

SELECT pg_size_pretty(pg_relation_size('tbl'));

Bao gồm các chỉ mục:

SELECT pg_size_pretty(pg_total_relation_size('tbl'));

Thử nghiệm nhanh cho thấy các kết quả sau:

CREATE TABLE test(a text, b text);
INSERT INTO test -- quick fake of matching rows
SELECT chr((g/1000 +32)) || to_char(g%1000, 'FM000')
     , repeat (chr(g%120 + 32), 64)
FROM   generate_series(1,50000) g;

SELECT pg_size_pretty(pg_relation_size('test'));       -- 5640 kB
SELECT pg_size_pretty(pg_total_relation_size('test')); -- 5648 kB

Sau khi thêm khóa chính:

ALTER TABLE test ADD CONSTRAINT test_pkey PRIMARY KEY(a);

SELECT pg_size_pretty(pg_total_relation_size('test')); -- 6760 kB

Vì vậy, tôi mong đợi tối đa khoảng 44k hàng không có và xung quanh 36k hàng có khóa chính.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Người dùng ứng dụng so với Bảo mật cấp hàng

  2. Bánh xe xây dựng không thành công cho psycopg2 - MacOSX sử dụng virtualenv và pip

  3. Chuyển dự án Django từ backend sqlite3 sang postgresql bị lỗi khi tải datadump

  4. Cách kiểm tra phiên bản PostgreSQL

  5. Cập nhật nhiều cột trong một hàm kích hoạt trong plpgsql