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 1Detail 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.