#asp.net #sql-server #vb.net #database-design #data-modeling
#asp.net #sql-сервер #vb.net #проектирование базы данных #моделирование данных
Вопрос:
Итак, у меня относительно небольшой веб-сайт с растущими объемами данных — самая быстрорастущая таблица — это просмотры страниц, поскольку мы сами проводим всю нашу аналитику. Веб-сайт создан с использованием VB.Net, SQL Server 2008 и jQuery. Я ограничен .net 2.5.
В настоящее время я обрабатываю все данные и проверку, используя объекты со списком атрибутов. Каждый атрибут относится к определенному типу данных и имеет функцию проверки, когда ему присваивается новое значение. Если данные не будут проверены, то они даже не дойдут до обновления базы данных и вернут пользователю сообщение об ошибке. В настоящее время у меня есть классы «Manager» и «Item» — Элементами управляет определенный класс Manager, например, пользователями управляет UserManager, поэтому, чтобы получить всех пользователей, мне просто нужно вызвать UserManager.Товары. Эти классы Manager хранятся в кэше и создаются по мере необходимости, но как только на класс Manager ссылаются, он создает все элементы внутри него. Сейчас это происходит довольно медленно, поскольку компания быстро растет. Загрузка первой страницы (страницы, на которой выполняется большинство запросов к данным в первый раз) занимает 2-3 секунды, но я недоволен этим временем. После этого все происходит почти мгновенно.
Теперь, как я это вижу, у меня есть 3 варианта ускорения работы веб-сайта:
- Оставьте все как есть, но постарайтесь сделать его более эффективным с помощью других методов;
- Переходите на создание всех этих объектов при каждой загрузке страницы в надежде, что это просто так медленно, потому что я использую кэш для хранения значительного объема данных (по крайней мере, около 10 МБ или около того);
- Забудьте об использовании объектно-ориентированных методов и просто используйте прямые SQL-запросы и перебирайте записи.
Есть ли у кого-нибудь какие-либо рекомендации относительно того, какой подход мне следует использовать? Если я пропустил какие-либо варианты, пожалуйста, предложите их.
Спасибо.
С уважением,
Ричард
Комментарии:
1. Я не понимаю
These Manager classes are stored in the cache and are created as needed
. Если вы храните их в кэше, их не нужно перезагружать на первой странице. Кэш распространяется на все приложения и сеансы и будет очищен, например, только по истечении времени ожидания для всех сеансов. Или вы указали политику кэширования?2. Ах, извините, я не очень хорошо объяснил этот момент. Я знаю, что кэш является общим для всех пользователей — но в основном есть какая-то проблема на сервере, где он перезапускает приложение примерно через 5 минут — поэтому примерно через 5 минут бездействия кэш очищается, поэтому следующий просмотр страницы (кем угодно) перезагрузит все данные для любых запрошенных менеджеров. Я не могу найти источник проблемы с утилизацией — однако это в моем длинном списке дел!
3. Я предлагаю вам переместить его в начало вашего списка! Попробуйте журнал событий, также убедитесь, что приложение не настроено просто на перезапуск каждые 5 минут…
Ответ №1:
Я думаю, что для вашего веб-сайта вы не можете использовать концепцию «атрибут прямого доступа»: UserManager.Товары.
Если у вас растет объем данных, у вас должен быть «атрибут косвенного доступа» для ваших классов manager, это был бы метод, подобный UserManager.GetItems(). Потому что .NET вычисляет правильность (UserManager.Элементы) при создании нового экземпляра класса UserManager…
Резюме: удалите UserManager.Элементы присваивают атрибут и создают метод UserManager.GetItems().