@Insurgent2018

Выбор базы данных: PostgreSQL или MongoDB?

Приветствую, необходим совет, 4 раза в месяц планируется обработка файлов. Каждый файл около 3-4 млрд. строк представленных json. Планируется, что данные за 1 месяц будут писаться в 1 таблицу(коллекцию), данные не будут изменяться.

Список ключей ограничен.
{
"key1" : type Int64,
"key2" : type string,
"key3" : type Int64,
"key4" : type string,
"key5" : type string,
"key6" : type string
}
Планируется, что key3 будет хранить IPv4.
Причем, при разборе json-строки - если key3 - устраивает условиям определенной логики при разборе, то в наличии key6 нет нужды. И наоборот - если key3 - не устраивает, то оно и не надо, а данные(raw) запишутся в key6.
Изначально, сложил 1 датасет(1 файл размером 294G, 2,9 млрд. записей) - в MongoDB(ver.4.4.1). Key3 - IPv4 - сохранял как Int64.
При указанной выше логике - оказалось очень всё приемлемо - размер базы 99 Gb, + размер индексов по 3 ключам: key3 Int64, key4 string, key5 string - 70 Gb. То есть прогнозируемый размер 1 загрузки 170 GB. На посредственном железе - MongoDB -время исполнения запроса по индексированным ключам, приемлемо.
Потом подумал, и решил, что данные, по факту - имеют табличное представление, а для таблиц есть отличный инструмент - PostgreSQL.
Создал такую таблицу:
CREATE TABLE dataset_10_2020
(
id bigserial NOT NULL,
key1 timestamp without time zone NOT NULL,
key2 character varying(128),
key3 inet,
key4 character varying(64),
key5 character varying(256),
key6 character varying(256),
key7 bytea,
PRIMARY KEY (id)
);
И в таком случае если значение key3 - не удовлетворяет логике, к это поле пишет null, а сырые данные, предназначавшиеся в key3 - сохраняются в key7, и наоборот, если key3 - IPv4 - то и пишется это значение, а в key7 - null
Стал сохранять данные. Где-то на середине - 1,67 млрд. записей загруженных данных, решил оценить объем базы, 170 Gb, это без учета размера индексов. Построил кластерный индекс по уникальному полю id - и общий размер 224 Gb. И это, повторюсь без обязательных индексов по 3 полях.
И как говориться, встал на паузу. Это нормально, такой разбег в объеме данных? Приблизительно, те же данные, что в MongoDB - займут 170 Gb, в PostgreSQL - будут за 300Gb. В чем может быть ошибка?
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
Есть простое правило для определения нужна ли вам монга: У вас есть три отдельных сервера для неё?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы