sql >> Databáze >  >> RDS >> PostgreSQL

Kolik záznamů mohu uložit do 5 MB PostgreSQL na Heroku?

Místo na disku je obsazeno

Výpočet místa na disku není triviální. Musíte vzít v úvahu:

  • Režie na tabulku (malá, v podstatě položky v systémovém katalogu, vás na Heroku nemusí ovlivnit).

  • Režie na řádek (HeapTupleHeader) a na datovou stránku (PageHeaderData). Podrobnosti o rozložení stránky v manuálu.

  • Ztráta místa kvůli zarovnání typu dat .

  • Prostor pro bitmapu NULL . Účinně zdarma pro tabulky s 8 sloupci nebo méně, pro váš případ to není relevantní.

  • Nemrtvé řádky po UPDATE / DELETE .

  • Velikost indexů . Budete mít primární klíč, že? Velikost indexu je podobná velikosti tabulky pouze s indexovanými sloupci a menší režií.

  • Skutečné požadavky na prostor pro data v závislosti na příslušných typech dat . Podrobnosti o typech znaků (včetně typů s pevnou délkou) v příručce:

    Požadavek na úložiště pro krátký řetězec (až 126 bajtů) je 1 bajt plus skutečný řetězec, což zahrnuje mezeru v případě character . Delší řetězce mají režii 4 bajty místo 1

    Více podrobností pro všechny typy v systémovém katalogu pg_type .

  • Databáze kódování zejména pro typy postav. UTF-8 používá až čtyři bajty k uložení jednoho znaku (ale 7bitové ASCII znaky vždy zabírají pouze jeden bajt, dokonce i v UTF-8.)

  • Další drobnosti, které mohou ovlivnit váš případ, například TOAST - což by vás nemělo ovlivnit s 64 znakovými řetězci.

Výpočet pomocí testovacího případu

Jednoduchý způsob, jak najít odhad, je vytvořit testovací tabulku, naplnit ji fiktivními daty a měřit pomocí funkcí velikosti databázového objektu::

SELECT pg_size_pretty(pg_relation_size('tbl'));

Včetně indexů:

SELECT pg_size_pretty(pg_total_relation_size('tbl'));

Rychlý test ukazuje následující výsledky:

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

Po přidání primárního klíče:

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

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

Očekával bych tedy maximálně kolem 44k řádky bez a kolem 36 k řádky s primárním klíčem.




  1. Jak Access komunikuje se zdroji dat ODBC? Část 2

  2. Jak zkrátit text pomocí elipsy v MariaDB

  3. Jak přepnout databáze v psql?

  4. Jak provést hromadné vložení v MySQL?