В настоящее время я работаю над системой управления студентами, которая отслеживает студентов и семестры, в которых они посещают занятия. У меня есть функция, которая позволяет пользователям импортировать данные через файл Excel
.
В ходе этого процесса я проверяю достоверность данных (недействительные символы, электронная почта и т. Д.) И проверяю наличие дубликатов в базе данных, чтобы узнать, существует ли ученик и / или уже ли он посещал занятия. Чтобы получить подтверждение, мне нужно выполнить два запроса для каждого студента, что неплохо, если мне нужно управлять только 250 студентами одновременно (каждый запрос выполняется в среднем за 0,004 секунды). Проблемы начинают накапливаться, когда список приближается к 500 студентам. Весь процесс проверки занимает около 2,5 секунд.
В моей книге не было бы проблем, если бы это происходило только один раз, но это происходит каждый раз, когда данные загружаются с помощью последовательной навигации, потому что я разрешаю пользователям просматривать данные (отображается 30 на страницу) перед импортом, и они могут редактировать их .
Каков наилучший способ обойти эту бутылочную горлышку, или я должен оставить это и предупредить пользователей?
Каков наилучший способ достижения максимальной масштабируемости?
РЕДАКТИРОВАТЬ:
В своем заявлении я разделил студентов и семестры, в которых они учатся.
Первый запрос, который я выполняю, - проверить, существуют ли студенты. Исходя из этого, если он новый ученик, он создаст нового ученика, в противном случае данные ученика будут обновлены.
Второй запрос используется для проверки того, посещает ли студент уже семестр, к которому я пытаюсь его добавить. Если он уже присутствует, он будет исключен из импорта.
процесс проверки происходит следующим образом:
Trim white space
Strip html tags
check email validity
check if the semester for which I try to register him is a valid semester (ie : w11 for winter 2011)
check if the province is a valid canadian province
// first query
check for birthday, first and last name in the database
// second query
check if the student is already registred for the semester in the database
Первые три проверки должны быть истинными, чтобы быть действительным вводом
Если первый запрос возвращает true, студент существует, данные должны быть обновлены, если он возвращает false, его новый студент и новый студент должны быть созданы.
Если второй запрос возвращает значение true, студент не должен регистрироваться повторно, поскольку он уже посещает семестр, если он возвращает значение false, студент должен быть зарегистрирован на требуемый семестр