Практически в каждой компании, с которой или где я работал пишут собственный уровень доступа к данным. Это какая-то прослойка, которая отвечает за маппинг данных и которой выгружает и загружает данные. Это нормально и вариант подобной прослойки с использованием Dapper я показывал в своей электронной книге по большим сайтам.
В книге я показал простой пример, в котором простой базовый класс является промежуточным уровнем и создает простую, но все же абстракцию от данных.
Примерно такую же идею я часто вижу в других компаний, но более сложную. Но очень часто я вижу одну и ту же ошибку – методы обновления данных обновляют абсолютно все колонки. Даже если вы изменяете только одну колонку, промежуточный уровень требует, чтобы вы вытащили из базы данных или предоставили все колонки. Если что-то не предоставить, то эта колонка обнулится.
На первый взгляд, в чем проблема? Ну да, запрос получается больше, но он простой и парсится сервером без проблем. Если данные физически не изменились, то на производительность оператора UPDATE это не влияет. Повлияет ли на перестроение индекса, если обновлять проиндексированную колонку на то же самое значение? Я не знаю, но легко проверить, нужно просто посмотреть на план выполнения. Думаю, что самого перестроения не будет, но если есть внешний ключ, то сервер может проверять его и это ресурсы. В общем, если писать UPDATE и обновлять данные без реального изменения их, то это скорей всего все же отберет ресурсы сервера. Бессмысленно отберет.
UPDATE Tablename SET Column = 'Value' WHERE ColumnID = 1
Если колонка уже равна 'Value', то не смотря на отсутствие обновления будет создана блокировка. А оно нужно? Ведь в результате этой блокировки колонка так и останется равной Value.
Этот запрос также инициирует триггеры, которые так же отнимут процессорные ресурсы. Для большинства самым дорогим сейчас является не хостинг и не серверы приложений, а именно сервера баз данных и если расходовать их ресурсы так бессмысленно, то за это придется платить финансово. Сервера приложений масштабируются без проблем, а вот с базами данных все не так просто.
В общем, если ты пишешь промежуточный уровень, сделай так, чтобы обновлялись только те данные, которые реально изменились. Проверить это на сервере приложений не так уж и сложно.
Пытаться обновить базу значением, которое уже сохранено в базе – абсолютно бессмысленно и ненужное занятие.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.
Добавить Комментарий