Могу ли я использовать WeakReference в моей структуре сложных объектов с db4o?
Я рассматриваю портирование приложения на db4o. Модель данных состоит из множества небольших объектов с множеством ссылок между собой. Например, у меня есть книга, которая указывает на автора и главу. В главах есть разделы, в разделах - большие фрагменты текста, изображений, и они ссылаются на упомянутые символы.
Я думаю, что должна быть возможность сохранить метаструктуру в памяти (все, кроме текстовых двоичных объектов), но мне было интересно, смогу ли я использовать какой-нибудь умный трюк с WeakReference, чтобы db4o просто сохранил часть модели в памяти, которая мне действительно нужна (т.е. который я недавно использовал).
То же самое верно для текстовых BLOB-объектов (которые должны быть около 1-10 КБ). Можно ли получить строку, не беспокоясь о слое БД и не запрашивая текстовый BLOB-объект, используя искусственный идентификатор внутри геттера, и не используя жесткую ссылку, которая постоянно хранит весь текст в памяти?
2 ответа
Отключение WeakReferences чаще всего используется для настройки производительности. Недостатки этого подхода не являются незначительными, поэтому будьте осторожны. Я бы не рекомендовал это.
Контроль использования памяти должен осуществляться с помощью функций активации. Активация может помочь вам сохранить в памяти только часть модели, а слабые ссылки помогут вам больше не использовать объекты GC. Я думаю, что это путь.
Кроме того, вы можете отправить свои вопросы на форумы db4o, чтобы получить помощь от сообщества db4o.
Горан
Я не использовал db40 или какой-либо продукт ORM/OODB в последнее время, однако меня поразит, что такого рода функции управления памятью и графами должны быть частью самой платформы, а не той, которую вы строите поверх нее. Если у Versant db40 этого нет, возможно, стоит поискать другой продукт, который его предлагает. Итак, я понимаю, что не ответ, который вы ищете, но использование фреймворка было бы моим первым портом захода.