~ 500 вставок в секунду - это совсем не то, что нужно чихать.
Для гибкого решения вы можете захотеть внедрить какой-то тип шардинга. Вероятно, самое простое решение состоит в том, чтобы заранее разделить школы на группы и хранить данные для разных групп школ на разных серверах. Например, данные для школ 1–10 хранятся на сервере A, школы 11–20 - на сервере B и т. Д. Это почти бесконечно масштабируется, если предположить, что между данными из разных школ мало связей.
Кроме того, вы можете просто попытаться использовать больше лошадиных сил для решения этой проблемы и инвестировать в RAID-накопители SSD, и, если у вас достаточно вычислительной мощности, у вас все будет в порядке. Конечно, если это огромная база данных, емкости накопителей SSD может быть недостаточно.
Наконец, посмотрите, сможете ли вы сократить количество вставок, например, путем денормализации базы данных. Скажем, вместо того, чтобы хранить посещаемость для каждого ученика в отдельном ряду, поместите посещаемость всего класса как вектор в один ряд. Конечно, такие изменения сильно ограничат ваши возможности запросов.