Вы могли решить это на уровне ОС с iptables. Ниже строк взяты из debian Linux, YMMV. Это ограничит соединения с 3 в 60-секундном промежутке.
iptables -I INPUT -p tcp --dport 5432 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 5432 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Это предполагает выполнение postgresql сервера на порте 5432, и eth0 является стоящей с Интернетом картой.
Если существует какой-либо другой порт, Вы хотите ограничить Вас, может просто заменить номер порта.
Источник и больше примеров (Для ssh, порт 22) http://www.debian-administration.org/articles/187
OSSEC имеет что-то позвонившее "Активный Ответ", который смотрит на журналы сервера и если определенные правила нарушены, как, например, пользователь пытается войти в SSH с неудавшимся паролем больше чем 5 раз, это заблокирует IP-адрес для количества времени набора.
Вы могли вести список, такой как это, но поскольку Вы отметили, что это станет обширным. После того как стратегия состояла бы в том, чтобы настроить время истечения для различных объектов в списке, таким образом, список, по которому Вы проверяете для заблокированных пользователей, не получает это обширное.
Это очень концептуально, без большего количества деталей деталей относительно Вашего набора я не мог помочь Вам больше.
Простое решение было бы к используемому пулом соединения для Вашего сервера базы данных. Это было бы естественным узким местом для ограничения нагрузки на базу данных и таким образом на сервер.
Или помещенный Ваше приложение позади основного веб-сервера, который реализует рабочие потоки и ограничивает количество потоков (или реализует то же самое в Вашем приложении),