2つのフィールドを持つ単一のテーブルにレコードを格納します。
id->4文字
password_hash->64文字
上記のようなレコードをHerokuの5MBPostgreSQLにいくつ保存できますか?
PS:x列で長さがyの単一のテーブルがある場合、データベースで必要なスペースを計算するにはどうすればよいですか?
2つのフィールドを持つ単一のテーブルにレコードを格納します。
id->4文字
password_hash->64文字
上記のようなレコードをHerokuの5MBPostgreSQLにいくつ保存できますか?
PS:x列で長さがyの単一のテーブルがある場合、データベースで必要なスペースを計算するにはどうすればよいですか?
ディスク上のスペースを計算するのは簡単ではありません。次のことを考慮する必要があります。
テーブルごとのオーバーヘッド。小さく、基本的にはシステム カタログのエントリです。
行ごと( ) およびデータ ページごと( )のオーバーヘッド。マニュアルのページレイアウトの詳細。HeapTupleHeader
PageHeaderData
データ型に応じて、列の配置のためにスペースが失われます。
NULL ビットマップ用のスペース。あなたのケースとは関係なく、8列以下のテーブルでは事実上無料です。
UPDATE
/の後のデッド行DELETE
。(スペースが最終的にバキュームされて再利用されるまで。)
インデックスのサイズ。主キーがありますよね?インデックスのサイズは、インデックスが作成された列だけで行ごとのオーバーヘッドが少ないテーブルのサイズに似ています。
それぞれのデータ型に応じた、データの実際の容量要件。マニュアルの文字型(固定長型を含む)の詳細:
短い文字列 (最大 126 バイト) のストレージ要件は、1 バイトに実際の文字列を加えたものであり、
character
. より長い文字列には、1 バイトではなく 4 バイトのオーバーヘッドがあります
システム カタログのすべてのタイプの詳細pg_type
。
特に文字型のデータベースエンコーディング。UTF-8 は 1 文字を格納するために最大 4 バイトを使用します (ただし、7 ビット ASCII 文字は、UTF-8 であっても常に 1 バイトしか占有しません)。
TOASTなど、ケースに影響を与える可能性のあるその他の小さなこと- 64 文字の文字列には影響しないはずです。
見積もりを見つける簡単な方法は、テスト テーブルを作成し、それにダミー データを入力して、データベース オブジェクト サイズ関数で測定することです。
SELECT pg_size_pretty(pg_relation_size('tbl'));
インデックスを含む:
SELECT pg_size_pretty(pg_total_relation_size('tbl'));
見る:
簡単なテストでは、次の結果が表示されます。
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
主キーを追加した後:
ALTER TABLE test ADD CONSTRAINT test_pkey PRIMARY KEY(a);
SELECT pg_size_pretty(pg_total_relation_size('test')); -- 6760 kB
したがって、主キーなしで最大約44,000行、主キーありで約36,000行になると予想されます。