У меня идет внутренняя дискуссия о том, где мне следует проводить проверку на наличие изменений в данных, и я не могу принять решение о практике, которая имеет больше смысла:
- Обработка IsChanged в графическом интерфейсе. Для этого требуется постоянство данных между загрузкой страницы и публикацией данных, что потенциально приводит к большим накладным расходам на пропускную способность / доставку страницы. Это не так уж плохо в приложениях с выигрышными формами, но на веб-сайте это может привести к серьезным финансовым последствиям для затрат на пропускную способность.
- Обработка в DAL. Для этого требуется несколько обращений к базе данных, чтобы проверить, изменились ли какие-либо данные перед их сохранением. Это потенциально означает дополнительный ненужный вызов к базе данных, потенциально вызывающий проблемы с масштабируемостью из-за ненужных запросов к базе данных.
- Обработка в хранимом процессе Save () - для этого требуется, чтобы хранимый процесс потенциально выполнял дополнительный ненужный вызов таблицы для проверки, но сохранял бы дополнительный вызов из DAL в базу данных. Потенциально это может масштабироваться лучше, чем DAL, но моя интуиция говорит, что это можно сделать лучше.
- Обработка в триггере - для этого потребуется использование триггера (к которому я эмоционально не отношусь, я стараюсь избегать триггеров, кроме случаев, когда это абсолютно необходимо).
- Не обрабатывайте функциональность IsChanged вообще - обработка даты «LastUpdated» не только становится сложной, но и ненужное сохранение данных в базе данных кажется плохой практикой для масштабируемости.
Таким образом, у каждого подхода есть свои недостатки, и я в растерянности относительно того, что является лучшим из этой плохой связки. Есть ли у кого-нибудь более масштабируемые идеи для обработки постоянства данных с конкретной целью увидеть, изменилось ли что-нибудь?
Архитектура: SQL Server 2005, ASP.NET MVC, IIS7, Высокие требования к масштабируемости для неспецифической глобальной аудитории.