Может я зря по XSS упомянул. Точнее, надо проверить входные данные на стороне клиента и так же на стороне сервера и выдать сообщение об ошибке, если они не в ожидаемом формате, выходят за пределы допустимых значений и пр. Т.к. параметры проверки оди и те же, нет смысла их дублировать в php и Javascript (можно что-то забыть при исправлениях). Поэтому есть мысль вынести эти параметры в отдельный файл. В любом случае эти параметры будут на клиенте...
Например валидность e-mail, ссылок, проверка на то, что введено число. Regexp взят в качестве общего случая. Что-то типа параметра options в filter_var
Это и есть order by rand. К сожалению при этом функция вызывается для каждой записи, а затем лимитируется количество строк (т.к. order ыфполняется раньше limit). Поэтому при любом limit функция будет выполнена для всех записей, а их 5+ млн.
Приложение/сервис и пишется. Вопрос где хранить столько данных и как их доставать. Если бы не фильтрация, можно было бы в бинарном файле с фиксированной длиной записи. Но фильтрование подразумевает перебор всех записей. Сомневаюсь, что у меня получится сделать велосипед лучше, чем у Oracle ;(
Обновляться почти не будут (справочник).
Запросов достаточно много (веб-сервис), особенно с учетом длительности запроса.
Ну, 2 секунды (если применять ORDER BY RAND в MySQL) уже мучительно много, мне кажется.