Проект, над которым я работаю, сталкивается с дизайнерской дилеммой о том, как получить объекты и коллекции объектов из базы данных. Иногда полезно буферизировать * все * объекты из базы данных со своими свойствами в память, иногда полезно просто установить идентификатор объекта и запросить его свойства по запросу (1 бит вызова на объект для получения всех свойств). И во многих случаях коллекции должны поддерживать как буферные объекты в памяти, так и инициализироваться с минимальной информацией для доступа по требованию. В конце концов, не все может быть забуферировано в памяти, и не все можно читать по запросу. Это повсеместная проблема памяти и IO.Дилемма дизайна бизнес-уровня: память или IO?
Неужели кому-то приходилось сталкиваться с той же проблемой? Как повлияли на ваш дизайн? Каковы трудные уроки? Любые другие мысли и рекомендации?
EDIT: мой проект является классическим примером dll бизнес-уровня, потребляемого веб-приложением, веб-сервисами и настольным приложением. Когда список продуктов запрашивается для настольного приложения и отображается только по названию продукта, это нормально, чтобы эта последовательность шагов отображала все продукты (например, в базе данных имеется миллион продуктов):
1. Один дб позвонить, чтобы получить все названия продуктов
2. Один дб вызов, чтобы получить всю информацию о продукте, если пользователь нажимает на продукт, чтобы увидеть детали (доступ по требованию)
Однако, если этот же API будет потребляться веб-службой для отображения всех продуктов с подробной информацией, сетевой трафик станет болтливым. Чем лучше последовательность в этом случае будет:
1. Какого черта, буфер всех продуктов и поле продукта с помощью только одного дб вызова (в данном случае буферного 1 миллион продуктов также выглядит страшно)
Спасибо за ссылки! Статья скорости была довольно приятной для чтения ... Статические данные уже кэшируются в нашем внутреннем кеше. Другие данные, которые не являются статическими, вообще не кэшируются и даже не полностью считываются в память (поля доступны по запросу, см. Редактирование). В этом случае динамических данных трудно решить, следует ли его полностью или частично считывать в память. – kateroh