Наша небольшая компания занимается консалтингом, а значит, мы постоянно сталкиваемся с той стороной проектов, о которой обычно не рассказывают на конференциях. Решения, внедряемые в типичном проекте, можно условно разделить на "красивые, но неработоспособные", "плохие", "очень плохие" и "удивительные". То решение, о котором пойдет речь в этом докладе, придумали не мы, и, когда авторы впервые представили его широкой общественности пару лет назад на конференции HighLoad, оно многими было воспринято как "удивительное". Тем не менее, решение работает и поныне, к чему мы приложили руку, поэтому у нас есть о чем рассказать. Да, наш девиз — "от удивительного к плохому!" :)
Речь пойдет о хранении большого количества статического пользовательского контента в PostgreSQL базе — согласитесь, не самая распространенная идея :) Традиционно считается, что СУБД не предназначены для подобных вариантов использования. Тем не менее, свойства СУБД, такие как поддержка транзакций и репликации, очень хорошо помогают для решения этого класса задач. После того как удивление проходит, и оказывается, что решение уже внедрено и работает, через некоторое время возникают новые вызовы — как сделать так, чтобы оно продолжало работать под возрастающей нагрузкой? Оптимизация производительности существующей и работающей 24x7 в продакшн базы — увлекательное действие, чем-то похожее на расследование преступления или на серию "Доктора Хауса". Если вы любите детективы и реляционные базы данных — приходите на мой доклад, и я постараюсь сделать так, чтобы вы не заснули!