PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Berapa banyak catatan yang dapat saya simpan dalam 5 MB PostgreSQL di Heroku?

Ruang disk terisi

Menghitung ruang pada disk bukanlah hal yang sepele. Anda harus mempertimbangkan:

  • Overhead per tabel (kecil, pada dasarnya entri dalam katalog sistem, mungkin tidak memengaruhi Anda di Heroku).

  • Overhead per baris (HeapTupleHeader) dan per halaman data (PageHeaderData). Detail tentang tata letak halaman di manual.

  • Ruang hilang karena penyelarasan tipe data .

  • Ruang untuk NULL bitmap . Efektif gratis untuk tabel 8 kolom atau kurang, tidak relevan untuk kasus Anda.

  • Baris mati setelah UPDATE / DELETE .

  • Ukuran indeks . Anda akan memiliki kunci utama, bukan? Ukuran indeks mirip dengan tabel dengan hanya kolom yang diindeks dan overhead yang lebih sedikit.

  • Persyaratan ruang sebenarnya dari data, bergantung pada tipe data masing-masing . Detail untuk tipe karakter (termasuk tipe panjang tetap) di manual:

    Persyaratan penyimpanan untuk string pendek (hingga 126 byte) adalah 1 byte ditambah string sebenarnya, yang mencakup spasi dalam kasus character . String yang lebih panjang memiliki overhead 4 byte, bukan 1

    Detail selengkapnya untuk semua jenis di katalog sistem pg_type .

  • Basis data pengkodean khususnya untuk tipe karakter. UTF-8 menggunakan hingga empat byte untuk menyimpan satu karakter (Tetapi karakter 7-Bit-ASCII selalu menempati hanya satu byte, bahkan dalam UTF-8.)

  • Hal-hal kecil lainnya yang dapat memengaruhi kasus Anda, seperti TOAST - yang seharusnya tidak mempengaruhi Anda dengan 64 karakter string.

Hitung dengan kasus uji

Metode sederhana untuk menemukan perkiraan adalah dengan membuat tabel pengujian, mengisinya dengan data dummy dan mengukur dengan fungsi ukuran objek database::

SELECT pg_size_pretty(pg_relation_size('tbl'));

Termasuk indeks:

SELECT pg_size_pretty(pg_total_relation_size('tbl'));

Tes cepat menunjukkan hasil berikut:

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

Setelah menambahkan kunci utama:

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

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

Jadi, saya mengharapkan maksimum sekitar 44rb baris tanpa dan sekitar 36rb baris dengan kunci utama.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panduan untuk Pgpool untuk PostgreSQL:Bagian Kedua

  2. Bagaimana mengubah pengkodean koleksi database template

  3. Perbedaan antara tipe data DECIMAL dan NUMERIC di PSQL

  4. Bagaimana cara mendeteksi kueri yang menahan kunci di Postgres?

  5. Pengguna Postgres tidak ada?