Вопрос о целесообр-ти хранения бизнес-объектов, получ. из БД
От: Аноним  
Дата: 27.10.07 08:47
Оценка: 7 (1)
Делаю небольшую платформу, для работы с Бизнес-объектами, полученных из базы данных. Особенностью платформы является то, что она все объекты загружает только один раз по мере необходимости и сохраняет их в памяти. Впоследствии, если приложению снова нужен тот или иной объект, он уже не подымается из базы, а находится в памяти. Естественно, что есть механизм, который отслеживает изменения объектов. Также это удобно тем, что есть дополнительные механизмы, которые следят, чтобы в системе находился только один экземпляр объекта. Это очень полезно при байдинге. Можно забайдить список бизнес объектов к контролу (а также фильтрованные или сортированные списки к другим контролам) и по мере изменения объектов (даже другими пользователями из других систем) все они автоматически будут обновляться и изменяться во всех списках.

С одной стороны это хорошо. Сначала пользователь просмотрел список студентов, например, и пролистал 100 000 строк в списке. Потом открыл некую форму для выбора студента (для каких-либо целей) и тоже начинает искать в списке нужного студента (если он не пользуется поиском и фильтрами). При втором и последующих разах из базы уже ничего подыматься не будет, все уже будет загружено и, КАК Я ДУМАЮ, объекты будут возвращаться быстрее.

Но с другой стороны, если, например работать с системой 6 часов подряд, то в память может перекочевать довольно солидный кусок БД. Если например база занимает 10 гигабайт, то в памяти может запросто оказаться 6 гигабайт данных. Естественно, большая из них часть будет находиться в свопе. Так вот интересно, в каком случае объекты будут возвращаться быстрее: если возвращать их заново из базы запросом или если система их будет сама искать где-то в свопе на диске?

На самом деле этот подход уже частично реализован. Единственное отличие текущей реализации от вышеописанного заключается в том, что пока нет возможности частично загрузить объекты. При первом обращении, например к объекту «Студент» идет загрузка всех студентов (не важно, Сколько их там – 1000 или 1 000 000) и вся дальнейшая работа происходит из расчета на то, что все студенты уже загружены. Но не такая уж большая проблема докрутить механизм, чтобы можно было загружать объекты одного типа порциями по мере необходимости и потом уже использовать загруженные. Вопрос в том, следует ли дальше развивать такую платформу, насколько она жизненна и на каком классе приложений. Я тестировал текущее реализованный подход на относительно небольшом количестве данных – 10 000 на таблицу при 13-15 таблицах. Работает довольно быстро. На большем количество записей пока не тестировал.
Если на больших базах (свыше 4-ех гигов) такой подход будет неэффективен, то, кто как думает, можно ли его использовать на более маленьких БД (например, если приложение небольшое и не требует большой БД). То есть возможно ли применение на практике этой платформы вообще или идея изначально ошибочна?

Буду благодарен за любые комментарии по поводу подхода, избранного в платформе.


27.10.07 17:40: Перенесено модератором из '.NET' — AndrewVK
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.