Большая таблица PostgreSQL: лучше добавить столбец или создать новую таблицу для хранения метаданных? - PullRequest
5 голосов
/ 22 февраля 2012

У меня есть большая таблица (~ 2 миллиона строк), каждая строка которой представляет одно изображение.Я хочу хранить метаданные EXIF ​​в формате JSON для каждого изображения.Размер этого JOB-объекта составляет около 6 КБ на изображение.

Эти метаданные EXIF ​​не будут запрашиваться / использоваться очень часто, и мне интересно, будет ли гораздо эффективнее хранить их в отдельной таблице с двумястолбцы (imageid, exifjson), или PostgreSQL справится с этим так же хорошо, как столбец text в существующей таблице.Я бы не хотел, чтобы добавление столбца значительно замедляло обычные запросы к таблице или миллионы текстовых значений по 6 КБ, чтобы затормозить PostgreSQL.

Ответы [ 2 ]

5 голосов
/ 22 февраля 2012

Я бы сделал этот столбец TOAST -ed.

 ALTER TABLE ... ALTER <column> SET STORAGE <EXTERNAL|EXTENDED>;
 -- EXTERNAL - out-of-line storage, not compression[1]
 -- EXTENDED - both compression and out-of-line storage

PostgreSQL уже пытается использовать его для данных размером более ~ 2 КБ.

[1] «Используемая техника сжатия является довольно простым и очень быстрым членом семейства методов сжатия LZ».

2 голосов
/ 22 февраля 2012

Лучше использовать отдельную таблицу, но вы будете в порядке с существующей таблицей. Вы вряд ли получите эффект, если не извлечете это поле, используя существующие запросы "select * from". И вы никогда не будете заполнять postgres такими данными, поскольку у них почти бесконечные пороги:

  • Максимальный размер базы данных не ограничен
  • Максимальный размер стола 32 ТБ
  • Максимальный размер строки 1,6 ТБ
  • Максимальный размер поля 1 ГБ
  • Максимальное количество строк в таблице не ограничено
  • Максимальное количество столбцов в таблице 250 - 1600 в зависимости от типов столбцов
  • Максимальное количество индексов на таблицу не ограничено

http://www.postgresql.org/about/

О помехах при выборе других данных столбца:

Очень длинные значения также хранятся в фоновых таблицах, чтобы они не мешали быстрому доступу к более коротким значениям столбцов.

http://www.postgresql.org/docs/current/static/datatype-character.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...