У меня есть фоновая служба, которая импортирует django и использует ORM моего проекта django напрямую.
Она отслеживает что-то, в частности, oop, очень часто - каждые несколько секунд. Он проходит через каждого пользователя в моей базе данных, проверяет условие и, основываясь на этом, устанавливает флаг в значение True или False. У меня может быть тысячи пользователей в базе данных, поэтому эффективность здесь может сложиться.
while True:
time.sleep(5)
for user in User.objects.all():
if user.check():
user.flag = True
else:
user.flag = False
user.save()
Я использую MySQL в качестве базы данных.
Что мне интересно это: если у конкретного пользователя .flag
установлено значение True
, выполняю ли я запись на диск каждый раз, когда запускаю user.flag = True; user.save()
, даже если ничего не изменилось? Или Django или MySQL достаточно умен, чтобы не выполнять запись на диск, если ничего не изменилось?
Я предполагаю, что MySQL операция чтения дешевле, чем операция записи. Имеет ли смысл проверять значение user.flag
и пытаться установить user.flag
, только если значение действительно изменилось? По сути, это будет обмен чтения базы данных на запись базы данных из того, что я понимаю (за исключением случаев, когда что-то действительно изменилось, и в этом случае сначала выполняется чтение, а затем запись).
Примечание: Это просто базовый пример. Я не имею дело с пользователями.