Как мне работать с коллекцией бизнес-объектов, имеющей миллионы записей в базе данных? - PullRequest
1 голос
/ 13 января 2010

Вот сценарий.

У меня есть приложение. Базовые таблицы базы данных имеют миллионы строк. Скажем, таблица «Книги» содержит миллионов строк .

В дизайне приложения у меня есть собственный бизнес-объект Книга и пользовательская коллекция BookCollection , представляющая коллекцию книг. Мы написали крошечный ORM, который отвечает за сопоставление бизнес-объектов и наборов данных. Сам объект содержит детали отображения, оформляя его свойства с помощью пользовательских атрибутов.

Теперь существует сценарий, в котором объект BookCollection должен содержать тысячи записей.

Какая стратегия будет оптимальной для иметь дело здесь? Могу ли я также загрузить книгу объекты в BookCollection аснычроунсли или параллельно? Что такое рекомендуемая практика в этом сценарий?

Ответы [ 2 ]

3 голосов
/ 13 января 2010

Мой первый вопрос будет; зачем тебе тысячи книг в памяти. допустимых сценариев для этого, но тогда вы просто должны принять стоимость. Но в большинстве случаев (поиск, фильтрация, сортировка, разбиение по страницам) и т. Д. Вы можете просто извлечь страницы данных, которые вам активно нужны, из базы данных, которой часто не так много.

Даже если вам все они нужны, они не обязательно нужны одновременно - например, вы можете настроить блок итератора (yield return) над чем-то вроде IDataReader и обрабатывать только строки за раз. На самом деле это не так много, как вы думаете, и обычно предпочтительнее буферизации больших объемов данных. Если вам требуется несколько агрегатов для потоковых данных (чтение только один раз), PushLinq может помочь вам в этом.

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

Каков конкретный сценарий?

0 голосов
/ 13 января 2010

Загрузите их все в List<Book> или ReadOnlyCollection<Book>, в зависимости от потребностей. Если записи не очень велики (МБ), проблема не должна быть в нескольких тысячах.

Обычно я получаю все необходимые записи в одном запросе и заполняю список таким образом.

Я не совсем понимаю, что вы подразумеваете под стратегией здесь - а оптимальный - это загруженный термин (мой оптимальный и ваш оптимальный, вероятно, сильно отличаются). Оптимально каким образом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...