Давайте посмотрим:
Метод 1:
- Вы бы перебрали все 1000 элементов в базе данных
- Вы по-прежнему посещаете каждый элемент в Словаре и имеете 950 промахов по словарю
- У вас все еще будет 50 обращений к базе данных.
Метод 2:
- Вы бы повторяли каждый элемент в словаре без пропусков в словаре
- У вас будет 50 отдельных обращений к базе данных.
- У вас будет 50 обновлений в базе данных.
Это действительно зависит от того, насколько большой набор данных и какой% в среднем изменяется.
Вы также можете сделать что-то вроде этого:
Метод 3:
- Сборка набора всех ключей из словаря
- Запросите базу данных один раз для всех элементов, соответствующих этим ключам
- Перебирать результаты и обновлять каждый элемент
Лично я бы попытался определить ваш типичный сценарий случая и профилировать каждое решение, чтобы увидеть, какое из них лучше. Я действительно думаю, что 2-е решение, тем не менее, приведет к большому количеству обращений к базе данных и сети, если у вас большой набор и большое количество обновлений, поскольку для каждого обновления ему придется дважды обращаться к базе данных (один раз для получения элемента , один раз, чтобы обновить элемент).
Так что да, это очень многословный способ сказать "это зависит ..."
Если сомневаюсь, я бы кодировал и то и другое время, основываясь на репродукциях производственных сценариев.