Мне нужно реализовать проверку скорости входа в систему для веб-службы. Сервис находится в рубине и база данных MySql.
Я могу представить себе плохие способы сделать это. Например, имейте таблицу, в которой хранится время каждой попытки входа в систему, и была ли она успешной, и каждый раз, когда пользователь пытается войти в систему, запрашивает у этой таблицы последние n попыток входа в систему и запускает простой алгоритм против этого. Это кажется довольно явно неэффективным, хотя. Каждая попытка входа в систему делает выбор и вставку в довольно большую таблицу, что замедляет работу системы в целом.
Лучше было бы сказать, что значение n жестко задано как три или что-то еще, и в пользовательской таблице (где хранятся верификаторы паролей) добавьте n столбцы, в которых хранятся самые последние n попытки входа. Это удаляет дополнительный оператор выбора, и пользовательская таблица, вероятно, намного короче, чем таблица попыток входа в систему. Однако он теряет много данных, которые могут быть интересны, если алгоритм изменится.
На данный момент я склоняюсь к варианту этой структуры, который помещает в таблицу одно текстовое поле с верификаторами пароля, и в этом текстовом поле содержится сериализованный объект, который представляет собой массив записей попыток входа в систему. При попытке входа в систему это поле будет проанализировано и переписано. Это решает исправленную проблему n , предотвращая необходимость запроса очень большой таблицы. Однако чтение текстовых полей из базы данных, конечно, имеет плохие характеристики доступа к диску, что может в конечном итоге также сделать его плохим решением.
Наконец, еще одна возможность - использовать базу данных MySql с поддержкой log-файлов (чье имя я не знаю), но я почти ничего не знаю об этом, за исключением того, что она должна быть эффективной при запросах файлов журналов.
Мой вопрос к переполнению стека: как проверки скорости входа в систему обычно применяются в промышленности?
Обновление 1:
Я должен был определить проверку скорости. Проверка скорости для попыток входа в систему отслеживает как количество последовательных сбоев, так и период времени, в течение которого произошли последовательные сбои. Первый ответ указывает на решение с этими свойствами. Интересно, однако, если он сохраняет достаточно информации, чтобы учесть гибкость в проверке скорости. Никогда не создавая такую систему, меня беспокоит то, что я упускаю из виду важные аспекты проверки скорости, которые я хотел бы рассмотреть, когда начал ее создавать ...