Обновление данных в базе


0 0

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

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

Примерно такую же идею я часто вижу в других компаний, но более сложную. Но очень часто я вижу одну и ту же ошибку – методы обновления данных обновляют абсолютно все колонки. Даже если вы изменяете только одну колонку, промежуточный уровень требует, чтобы вы вытащили из базы данных или предоставили все колонки. Если что-то не предоставить, то эта колонка обнулится. 

На первый взгляд, в чем проблема? Ну да, запрос получается больше, но он простой и парсится сервером без проблем. Если данные физически не изменились, то на производительность оператора UPDATE это не влияет. Повлияет ли на перестроение индекса, если обновлять проиндексированную колонку на то же самое значение? Я не знаю, но легко проверить, нужно просто посмотреть на план выполнения. Думаю, что самого перестроения не будет, но если есть внешний ключ, то сервер может проверять его и это ресурсы. В общем, если писать UPDATE и обновлять данные без реального изменения их, то это скорей всего все же отберет ресурсы сервера. Бессмысленно отберет.

UPDATE Tablename SET Column = 'Value' WHERE ColumnID = 1

Если колонка уже равна 'Value', то не смотря на отсутствие обновления будет создана блокировка. А оно нужно? Ведь в результате этой блокировки колонка так и останется равной Value. 

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

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

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


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

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

Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

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

Обратная связь

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

Пишите мне