Оптимизация проверки данных - PullRequest
1 голос
/ 08 апреля 2011

В настоящее время я работаю над системой управления студентами, которая отслеживает студентов и семестры, в которых они посещают занятия. У меня есть функция, которая позволяет пользователям импортировать данные через файл 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, студент должен быть зарегистрирован на требуемый семестр

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Вероятно, время тратится на создание запросов, а не на перетасовку данных.Возможно, вы могли бы запустить сценарий, пройдя по всем учащимся в пакете и составив один запрос, в результате чего уже будут определены ученики, например:

SELECT student_id FROM student WHERE student_id IN (student, ids, from, your, batch, file)

С этими данными вы можете выполнить простую проверку, если ученикнуждается в обновлении или создании.По сути, тот же вопрос можно использовать, чтобы получить тех, кто уже зарегистрировался.

0 голосов
/ 08 апреля 2011

Мне не совсем понятен весь процесс, но вы говорите, что пользователи могут редактировать данные (после первоначального импорта и проверки?), Зачем повторно выполнять всю проверку, а не просто проверять отредактированные записи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...