Background:
представьте себе большое жавовое приложение, в которое можно загрузить данные с помощью внешнего текстового файла.
* текстовик написан на простеньком скриптовом язычке.
* После парсинга он превращается в жавовские объекты (вызовы превращаются в нечто с методом run, переменные - просто в объекты).
* Полученная солянка начинает как-то взаимодействовать друг с другом, сим изначальный скрипт и исполняется
* По результатам отработки у нас получается какой-то набор объектов, к которым можно обращаться из остальных частей приложения
Теперь, поскольку весь процесс происходит бессовестно медленно, я хочу впилить какие-нибудь оптимизации.
Первая мысль: если что-то вычислилось, то только один раз, если что-то распарсилось - то тоже только один раз.
Для того, чтобы складывать объекты языка (а они у нас превращаются в жаваклассы), нужен какой-то кэш. Можно, допустим, просто взять какой-нибудь мап, и сложить туда ссылки на объекты.
Но тут с мапом возникают проблемы. Помним, да, что скрипт превращается в жаву напрямую, почти без промежуточного кода?
Иногда получается, что к нашим сабжевым объектам уже обратился какой-то внешний, не контролируемый нами код. Перед записью в кэш даже поля нужно отчуждать.
Если у нас в скриптовом язычке есть метод или цепочка методов, которые должны храниться без привязки к конкретному контексту использования, перед сохранением нужно как-то производить и отчуждение от контекста.
Объекты могут укладываться во всякие причудливые графы, которые хорошо было бы сохранять как можно аккуратней и быстрее целиком с возможностью сохранять, отчуждать или симулировать зависимости.
Пока что можно было выплыть на объектах. Теперь, чтобы всё усложнить, есть случаи, когда памяти будет не хватать, и лишний кэш, придется скидывать в файлы. Тут уже возникают проблемы с действительно быстрой бинарной сериализацией.
В результате хотелось бы, чтобы восстановление «горячих» методов и переменных было быстрее, чем их вычисление/парсинг с нуля.
Есть ли какие-нибудь решения, которые позволяют делать действительно быстрый in-memory кэш для объектов на жаве с возможностью сериализации и десериализации в/из кусок raw data?
Я видел в интернетах кучу сериализаторов, сохраняющих во всякую гадость типа xml или properties-файлов. Мой файлик парсится зачастую быстрее, чем их мега-сериализаторы успевают проанализировать XML, так что все они не годятся =)
Также пробовал пару поделок с гитхаба для in-memory, но их in-memory работает немногим быстрее чем запрос к postgresql :) (ладно, тут слегка перегнул)
Лорчую, разброд в мыслях
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум lorgoogle tgt write-cache (2023)
- Форум slow read / fast write. wtf? (2014)
- Форум in-memory cache (2006)
- Форум git push Writing objects: 100% (2024)
- Новости Cache` for Linux (1999)
- Форум Fast Switching in kernel (2002)
- Форум Fast Switching in kernel (2002)
- Форум for in (2014)
- Форум Отключить write-cache на внешнем HDD (2012)
- Форум Page cache for scst_fileio (2017)