Стоит ли переносить таблицу с PostgreSQL на NoSQL или другое решение?
Доброго времени суток,
Есть база данных на PostgreSQL, в которой есть таблица, где сейчас 9 тыс. строк и 150 колонок + постоянно пополняется (но не очень быстро). Во многих строчках ячейки заняты значением "NULL". С этой таблицей связаны три других таблицы.
Не очень мне это нравится, так как информация из этой таблицы запрашивается очень большое кол-во раз.
Прежде чем переносить данные на NoSQL попробуйте использовать одно поле JSONB в PostgreSQL для хранения данных этих 150 колонок. Если результат устроит, переходить нет смысла.
Я вот думаю, что если оставить в PostgreSQL все как есть, но при запросах закидывать, к примеру, в Redis (используется для некоторых нужд). Прошел запрос на 1-ую строчку, закинул туда, дальше берется из Redis. Так и с другими строками. Если что-то не будет запрашиваться, не попадет, не будет ресурсы тратить.
Ну и через cron раз в сутки очищать данные в Redis, чтобы в случае изменения каких-либо данных в таблице PostgreSQL не было различий.
Или это уже как-то...?
Иван Стройкин: Чорт, дурканул на ночь глядя: 24mB - ограничение на документ, а для коллекции ограничения, можно сказать, нет ).
Если коллекция и индексы лезут в память - они там будут и всё будет летать.
Ценные указания:
Каждый документ имеет поле `_id`, оно же первичный ключ, если вы его не инициализируете при создании документа - его всё равно создаст Монга, так что используйте его.
Прочие индексы создавайте после заполнения коллекции.
Для разреженных столбцов можно создавать разреженные индексы - это клёво.
Не о том размышляете. Сделайте тесты производительности сейчас. Добавьте столько же, сколько есть, фейковых данных (скопируйте имеющиеся). Снова сделайте тесты. Потом еще раз добавьте сколько есть. Еще раз тесты. Если производительность после 300% прироста перестанет устраивать - думайте о переходе на другую БД. Но перед переходом добавьте в неё аналогичные фейковые данные и сделайте тесты производительности. Будет ли она вас устраивать? Если будет - переходите.