Есть база данных в postgresql под rhel для очень специфичного ПО (специфичность заключается в том, что, например, связи между таблицами могут хранится не в БД, а в прикладном ПО).
Объемы базы в пределах до 100-200 гигабайт.
Есть довольно шустрое железо, это около 200+ гигов оперативы, доступных и четыре Xeon E5-4640.
95% запросов к базе будут на выборку данных, приблизительно равномерно по частоте размазаны тривиальные селекты и join нескольких таблиц со сложными условиями. Данные приблизительно равнометно запрашиваются из разных таблиц.
5% запросов будут на запись небольших объемов данных.
Вопрос в том, как лучше оптимизировать все под такую задачу, вариант просто положить в БД данные и минимальный тюнинг СУБД не дают нужной производительности.
Сразу на ум приходит несколько вариантов.
Первый вариант это ограничиться просто вдумчивым тюнингом СУБД.
К счастью, на офф сайте документации достаточно (например, тут
wiki.postgresql.org/wiki/Performance_Optimization).
Но тут остаются вопросы по тому насколько СУБД сможет использовать все ресурсы, и не будет ли проблем с долгим "прогревом".
Второй вариант обусловлен тем, что вся база поместится в оперативную память. Можно примонтировать оперативку и настроить соответствующим образом табличное пространство.
Но тогда возникает вопрос стабильности и согласованности данных, ведь память то энергозависимая. Как вариант, можно предусмотреть репликацию с такой же БД на харде,
или единую точку входа для прикладного ПО, которая будет отправлять все запросы в обе базы.
Третий вариант обусловлен тем, что большая часть запросов на чтение. Разделить аппаратные ресурсы на несколько реплик БД и соответствующим образом организовать запросы на чтение/запись.
Партицирование просьба не предлагать, это и так отдельный кусок базы, которые далее нецелесообразно отделять.
Понятное дело, что все варианты будут проверяться, эмулироваться нагрузка на машину в разных вариантах и тд, что бы определить наиболее оптимальный.
Хотелось бы услышать советы, если кто-то занимался решением подобных задач. Возможно, есть еще варианты или как-то можно развить эти, или кто-то в подобных вопросах уже напарывался на грабли.
То есть буду благодарен любым подсказкам по этому вопросу.
Мануалам по данной теме буду то же благодарен, если они не с первых страниц гугла)
Спасибо.