Как я Postgis в 300 раз ускорил и заработал миллиард.
Жила была обычная база Postgis. В ней дома: координаты, адрес, код улицы, еще что хочешь. Сделал для теста REST API, какое отдает дом по запросу координат.
Начал тестировать производительность. Большинство дальнейших цифр -- ошибочны. Первый результат -- 56 ответов в секунду.
Вспомнил одну штуку. Для указания множества параметров нужно было прописать свой DataSource. И я по быстрому использовал DriverManaged... У него нет пула соединений и каждый раз создается новое.
Перешел на Hikari Pool. Скорость стала 400. И, как я не оптимизировал/тестировал -- практически не менялась. Потом запустил тест с двух машин и в несколько экземпляров -- коннектов стало больше! Понял, что где-то ошибся. Оказывается, я изначально ограничил ThreadPool 2 потоками, чтоб не сильно нагружать машину. Сделал потоков как надо. Скорость достигла 1700 rps. Загрузка ЦП сервера БД 100%.
Потом я все-таки включу геометрический индекс GIST. Прикол в том, что индексов не было только в этой таблице. Возможно, это была некачественная копия С кешированием получили около 4700.
Сейчас клиент и сервер были на дев-машине. Упор был именно в нее. Я перенес Java-сервер на машину БД. Так было уже в районе 8000+.
Но и этот результат неверен. Тестовый клиент загружен на 100%. Из них процентов 70 -- ужасным антивирусом ESET. Пришлось переносить клиент на 3й сервер.
Тут вся полезная нагрузка на одной машине -- Postgres+Java. С доп. Оптимизациями:
- лучший сервер -- Undertow.
- оптимизация запроса к Постгису.
- подбор пула доступа к БД.
Мы получаем 15200-15700 ответов в секунду. Если дополнительно отключить SSL в БД (запросы к локалхосту) -- 16269. Это 1,4млрд в сутки.
Некоторые детали: основная машина -- 4 ядра, 8 потоков. В процессе финального теста LoadAverage до 18! 6.4 ядра на Javу и 0,14+ на постгрес. То есть Java тормозит
Если использовать другой Java-сервер, точно можно выжать 24 000. Если на первом сервере убрать запросы к БД, -- как минимум 27000, но упирается в тестовый клиент.
С моей дев-машины в качестве сервера можно получить до 14 700, но нестабильно (антивирус свирепствует).