Хочется узнать это вообще возможно?
Что у нас есть:
- СУБД Postgresql
- 10-20 таблиц с разными данными в которых предполагается до 7 млрд записей в каждой
- Все записи так или иначе принадлежат сущности — “Рекламная кампания”
Что хочется:
- Разбить данные на части внутри одного сервера и, если новые данные не влезают на данный сервер (по нашим критериям, например: количество кампаний на одном сервере на более 1 млн.), записывать их на другой свободный (пока не важно кто принимает решение на какой именно).
- Обязательно! Одна “Рекламная кампания” и все подчиненные ей записи на одном сервере, так как много связанных запросов. Это нужно, чтобы исключить запросы на более, чем один сервер для получения любой информации по кампании.
- Представление каждой таблицы должно быть простым — т.е. клиентский код должен просто запрашивать/добавлять/обновлять данные из единой таблицы. Типа того — просто SELECT * FROM “data”.”campaigns” и т.п, хотя при этом как я писал выше эта таблица должна биться на части для быстрого поиска так как обычно работает с одной “Рекламной кампанией” за раз.
- Хочется работать без спец. хранимых процедур.
Для чего это всё?
Не хочется хранить такой большой объем данных на одном сервере в одной таблице (под этим я понимаю каждую из «10-20 таблиц с разными данными»), так как существенно замедляется поиск данных — например иногда надо искать по тексту, но при этом мы знаем в какой «Рекламной кампании» она. Но так как индекс общий — большие кампании будут мешать маленьким.