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