Перекрестная проверка списка пользователей с пользователями на БД - плохая идея? - PullRequest
1 голос
/ 24 марта 2011

Скажем так. Если в моей системе зарегистрировано 1 000 000 пользователей, и у меня есть список из 500 имен.

Я хотел бы проверить эти имена по количеству пользователей в моей системе, чтобы увидеть, какие имена / пользователи уже зарегистрированы в БД.

Будет ли такой процесс значительно замедлять работу приложения? Или такие вещи случаются постоянно?

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

РЕДАКТИРОВАТЬ >> Небольшое уточнение:

Я забыл упомянуть, что пытаюсь обновить список из 500 имен. Так что, если «foobar» и «joe» есть в этом списке и также зарегистрированы в БД, то все, что я хочу сделать, это удалить «foobar» и «joe» из списка, дав мне 498 имен.

Я не думаю, что было бы целесообразно сделать что-то вроде:

User.where('name in (?)', Array('foobar', 'joe'))

Я бы сделал что-то вроде:

User.each do |registered_user|
  index = list.index(list.find{ |user| user.screen_name.downcase == registered_user.screen_name.downcase })
  list.delete_at(index) if index
end

filtered_list = list

Выше кода, перебор?

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Любая современная реляционная БД, достойная солидности, должна легко обрабатывать 500 проверок в отношении БД, не затрагивая другие запросы, при условии , что ваши таблицы структурированы правильно (уникальные ключи, индексы для часто просматриваемых полей и т. Д.) )

0 голосов
/ 24 марта 2011

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

SELECT * FROM USERS WHERE Name IN ( <generated list of your 500 user name candidates>)

Возвращенным списком будут те из 500, которые уже существуют в базе данных. Например, вызов будет быстрым, не более нескольких секунд в медленной базе данных.

Cheers, Daniel

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