Кэширование больших дочерних элементов в модели данных с помощью db4o
-
19-09-2019 - |
Вопрос
У меня есть модель данных со скелетом (метаданными) и большими объектами данных.Я хотел бы сохранить скелет в памяти и сохранить слабые ссылки на объекты данных.Я понимаю, как реализовать это с помощью простой Java, как создать WeakHashMap, выполнить очистку и т. д.Но мне интересно, как лучше всего воскресить объекты данных после того, как они были собраны?
Должен ли я добавить на свою карту технический ключ, который я назначаю полю в объекте данных, чтобы я мог найти его снова?Или мне следует вызвать db.ext().getId() и использовать этот идентификатор в качестве технического ключа?Если да, то как мне получить эти ключи при загрузке родителя?Что ты посоветуешь?
Решение
Я бы добавил технический ключ к вашему большому объекту данных.Затем вы сохраняете этот технический ключ в своем классе метаданных.Теперь, когда вы получаете большой объект данных, вы получаете его по его техническому ключу.Это довольно простое решение.
Db4o фактически использует слабые ссылки, чтобы вернуть один и тот же объект и избежать ненужной десериализации.Поэтому, когда вы запрашиваете объект и не был собран сборщиком мусора, db4o вернет тот же объект.