У меня есть таблица в pg, например:
CREATE TABLE t (
a BIGSERIAL NOT NULL, -- 8 b
b SMALLINT, -- 2 b
c SMALLINT, -- 2 b
d REAL, -- 4 b
e REAL, -- 4 b
f REAL, -- 4 b
g INTEGER, -- 4 b
h REAL, -- 4 b
i REAL, -- 4 b
j SMALLINT, -- 2 b
k INTEGER, -- 4 b
l INTEGER, -- 4 b
m REAL, -- 4 b
CONSTRAINT a_pkey PRIMARY KEY (a)
);
Вышеупомянутое добавляет до 50 байт в строке. Мой опыт в том, что для накладных расходов системы мне понадобится еще 40-50%, без каких-либо созданных пользователем индексов. Итак, около 75 байт в строке. У меня будет много, много строк в таблице, потенциально выше 145 миллиардов строк, поэтому таблица будет нажимать 13-14 терабайт. Какие трюки, если таковые имеются, можно использовать для уплотнения этой таблицы? Мои возможные идеи ниже...
Преобразуйте значения real
в integer
. Если они могут храниться как smallint
, это сохранение 2 байта на поле.
Преобразуйте столбцы b.. m в массив. Мне не нужно искать в этих столбцах, но мне нужно иметь возможность возвращать одно значение столбца за раз. Итак, если мне нужна колонка g, я мог бы сделать что-то вроде
SELECT a, arr[5] FROM t;
Я бы сохранил пространство с параметром массива? Будет ли штраф за скорость?
Любые другие идеи?