Кэширование больших дочерних элементов в модели данных с помощью db4o

StackOverflow https://stackoverflow.com/questions/1914993

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть модель данных со скелетом (метаданными) и большими объектами данных.Я хотел бы сохранить скелет в памяти и сохранить слабые ссылки на объекты данных.Я понимаю, как реализовать это с помощью простой Java, как создать WeakHashMap, выполнить очистку и т. д.Но мне интересно, как лучше всего воскресить объекты данных после того, как они были собраны?

Должен ли я добавить на свою карту технический ключ, который я назначаю полю в объекте данных, чтобы я мог найти его снова?Или мне следует вызвать db.ext().getId() и использовать этот идентификатор в качестве технического ключа?Если да, то как мне получить эти ключи при загрузке родителя?Что ты посоветуешь?

Это было полезно?

Решение

Я бы добавил технический ключ к вашему большому объекту данных.Затем вы сохраняете этот технический ключ в своем классе метаданных.Теперь, когда вы получаете большой объект данных, вы получаете его по его техническому ключу.Это довольно простое решение.

Db4o фактически использует слабые ссылки, чтобы вернуть один и тот же объект и избежать ненужной десериализации.Поэтому, когда вы запрашиваете объект и не был собран сборщиком мусора, db4o вернет тот же объект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top