Как правильнее хранить данные в базе Postgres

Как правильно хранить данные в базе Postgres? У меня есть 10 книг (внутри книги текст, формат файла txt), каждая по 10 мб. Вижу 2 варианта хранения этих данных.

Первый - это хранить так: все файлы в одной общей таблице, где одна книга - это одна ячейка, которая увеличивается по мере увеличения размера файла. (1 книга - это 1 ячейка или одинарная строчка). Смысл: при этом подходе мы получим 10 строчек, где каждая строчка ссылается на одну книгу. (Этакое увеличение одной ячейке, которое зависит от размера файла). При нем у меня данные в ячейке обрезаются, и большая часть текста храниться, где-то в таблице TOAST. Я могу увидеть первые 2-3 слова и все. (Создавал индекс gin для столбца (Текст из файла), при таком подходе он работает 1-2 сек)

Второй - это ситуация, когда мы храним каждый файл в отдельной таблице. Внутри этой таблицы одна колонка, в которой и располагаются данные. Тем самым мы получаем таблицу, с одним столбом, в котором сколько-то строчек. Таких таблиц 10. Смысл: одна таблица ссылается на одну книгу. (Этакое увеличение Кол-ва строчек, оно зависит от размера файла, при этом это похоже на увеличения вглубь таблицы). (При таком методе, думаю создать для каждой таблицы свой индекс gin)

Подскажите, что лучше использовать при полнотекстовом поиске. Пока у меня есть одна общая таблица в которой 10 строчек и 3 столбца (ID, Имя файла, Текст из файла). Операция headline при таком случае выполняется 20 сек. Думаю перейти на 2 способ (который описан выше). Сделал пока 2 таблицы. Каждая ссылается на одну смысловую единицу, на свою книгу. При таком подходе headline выполняется 100мс.

Вопрос: подскажите как лучше организовать базу данных? Как лучше в ней хранить текстовые данные? Какие типы колонок использовать (у меня пока для текста тип character varying).


Ответы (0 шт):