PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Колко записа мога да съхранявам в 5 MB PostgreSQL на Heroku?

Пространството на диска е заето

Изчисляването на пространството на диска не е тривиално. Трябва да вземете предвид:

  • Разходите за таблица (малки, основно записи в системния каталог, може да не ви повлияят на Heroku).

  • Нарежийните на ред (HeapTupleHeader) и на страница с данни (PageHeaderData). Подробности за оформлението на страницата в ръководството.

  • Загубено място за подравняване на типа данни .

  • Място за NULL растерно изображение . На практика безплатно за таблици от 8 колони или по-малко, без значение за вашия случай.

  • Мъртви редове след UPDATE / DELETE .

  • Размер на индекс(и) . Ще имате първичен ключ, нали? Размерът на индекса е подобен на този на таблица само с индексирани колони и по-малко допълнителни разходи.

  • Реалното изискване за пространство на данните, в зависимост от съответните типове данни . Подробности за типовете знаци (включително типове с фиксирана дължина) в ръководството:

    Изискването за съхранение за кратък низ (до 126 байта) е 1 байт плюс действителния низ, който включва полето за интервал в случай на character . По-дългите низове имат 4 байта надпис вместо 1

    Повече подробности за всички типове в системния каталог pg_type .

  • Базата кодиране по-специално за типове знаци. UTF-8 използва до четири байта за съхраняване на един знак (Но 7-битовите ASCII знаци винаги заемат само един байт, дори в UTF-8.)

  • Други малки неща, които могат да повлияят на вашия случай, като 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

Така че очаквам максимум около 44k редове без и около 36k редове с първичен ключ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Моите любими разширения на PostgreSQL - първа част

  2. Вземете таблица и колона, притежаващи последователност

  3. Възможно ли е да се предоставят параметри за името на таблица или колона в Prepared Statements или QueryRunner.update()?

  4. Множество бази данни в docker и docker-compose

  5. Вмъкване на тригер за актуализиране на друга таблица с помощта на PostgreSQL