ДЛЯ ЛЮБОГО ЗАИНТЕРЕСОВАННОГО: Я реализовал код для поведения, которое я ищу, и открыл его на Google-коде. Получи это здесь! POJO-MVCC
-
Привет, ребята,
Я пытаюсь написать фреймворк, который содержит много недолговечных кешей, созданных из долгоживущих кешей. Эти недолговечные кэши должны иметь возможность возвращать более полное содержимое, которое является клоном из исходного долгоживущего кэша.
По сути, я пытаюсь построить уровень изоляции транзакций для коротких кэшей. Пользователь должен иметь возможность изменять содержимое недолговечного кеша, но изменения в долгоживущем кеше не должны распространяться (есть также случай, когда изменения должны проталкиваться, в зависимости от типа кеша).
Я сделаю все возможное, чтобы попытаться объяснить:
мастер-кеш содержит: [A, B, C, D, E, F]
временный кэш, созданный с состоянием [A, B, C, D, E, F]
1) временный кеш добавляет элемент G: [A, B, C, D, E, F]
2) временный кеш удаляет элемент B: [A, C, D, E, F]
мастер-кеш содержит: [A, B, C, D, E, F]
3) мастер-кеш добавляет элементы [X, Y, Z]: [A, B, C, D, E, F, X, Y, Z]
Временный кэш содержит: [A, C, D, E, F]
Ситуация становится еще сложнее, когда значения в элементах могут изменяться и не всегда должны обновляться (поэтому я даже не могу поделиться экземплярами базового объекта, мне нужно использовать клоны).
Я реализовал простой подход - просто создать новый экземпляр List с помощью стандартного конструктора Collection в ArrayList, однако, когда вы получаете около 200 000 элементов, системе просто не хватает памяти. Я знаю, что значение 200 000 слишком много для итерации, но я пытаюсь немного подчеркнуть свой код.
Я думал, что он мог бы каким-то образом "прокси" список, так что временный кеш использует главный кеш и хранит все его изменения (фактически Memento для изменения), однако это быстро становится кошмар, когда вы хотите выполнить итерацию временного кэша или получить элемент по определенному индексу. Кроме того, учитывая, что я хочу внести некоторые изменения в содержимое списка (в зависимости от типа временного кэша, независимо от того, является ли он «автообновлением» или нет), я полностью выхожу из своей глубины.
Будем весьма благодарны за любые указатели на методы или структуры данных или просто общие концепции, которые можно попробовать и исследовать.
Приветствия
Айдос