Comments 4
Посмотрите как в Rails устроен ActiveRecord — можно ли что то такое для .NET сделать?
Общая идея что вообще никакого конфига(только для описания нестандартного чего-то и relations), поля прямо на основе БД и генерируются
Общая идея что вообще никакого конфига(только для описания нестандартного чего-то и relations), поля прямо на основе БД и генерируются
Прочитал бегло про ActiveRecord и если правильно понял, то да, была и такая идея изначально, ориентироваться на классы объявленные в приложении и генерировать все по ним. Было 2 проблемы:
— Были сложности с тем, чтобы получить в Compile-time информацию об объявленных в проекте классах и их иерархии (T4 из коробки поддерживает это только достаточно костыльным образом, через промежуточную компиляцию библиотеки), либо разбираться с Roslyn и генерировать все в рантайме, но хотелось сохранить возможность отладки по сгенерированному коду, что в этом случае было бы делать тяжелее.
— Увы, на существующие классы и схему БД это не совсем ложилось, вылезало много ньюансов вызванных тем что изначально маппинги NHibernate писали руками, как и код слоя общения с БД. Если начинать новый проект — да, скорее всего изначально можно было бы сделать так. А тут пришлось бы вносить куда больше изменений и миграция не проходила бы так мягко.
— Были сложности с тем, чтобы получить в Compile-time информацию об объявленных в проекте классах и их иерархии (T4 из коробки поддерживает это только достаточно костыльным образом, через промежуточную компиляцию библиотеки), либо разбираться с Roslyn и генерировать все в рантайме, но хотелось сохранить возможность отладки по сгенерированному коду, что в этом случае было бы делать тяжелее.
— Увы, на существующие классы и схему БД это не совсем ложилось, вылезало много ньюансов вызванных тем что изначально маппинги NHibernate писали руками, как и код слоя общения с БД. Если начинать новый проект — да, скорее всего изначально можно было бы сделать так. А тут пришлось бы вносить куда больше изменений и миграция не проходила бы так мягко.
Помогло в итоге? Можно попробовать сделать репликацию в бд на чтение.
Помогло ли в плане нагрузки на БД — сложно сказать. Делали параллельно много вещей, направленных на оптимизацию тяжелых мест, и какая именно как повлияла увы не оценить.
Но если раньше в статистике БД регулярно на позициях 5-10 были обращения к «справочникам» — сейчас их нет в топе совсем. Репликация БД на чтение уже давно настроена, часть тяжелых запросов на чтение которым не столь принципиальна сиюсекундная актуальность данных — ходят на slave-ноду SQL.
Сильно помогло в плане среднего времени ответа на часть API запросов (которую удалось целиком закрыть кешем, и переставшую соответственно обращаться к БД) и уменьшении количества рутины в разработке при добавлении новых сущностей, не отличающихся большими объёмами данных.
Но если раньше в статистике БД регулярно на позициях 5-10 были обращения к «справочникам» — сейчас их нет в топе совсем. Репликация БД на чтение уже давно настроена, часть тяжелых запросов на чтение которым не столь принципиальна сиюсекундная актуальность данных — ходят на slave-ноду SQL.
Сильно помогло в плане среднего времени ответа на часть API запросов (которую удалось целиком закрыть кешем, и переставшую соответственно обращаться к БД) и уменьшении количества рутины в разработке при добавлении новых сущностей, не отличающихся большими объёмами данных.
Sign up to leave a comment.
Как сделать легконастраиваемое кеширование в проекте и спасти коллег от написания однотипного кода