Добрый день. Мне добрый человек посоветовал сюда задать свой вопрос. Возможно тут кто-то подскажет направление куда смотреть, что поизучать?
Хочу чтобы написанные на Go сервисы стартовали секунды, а не десятки минут (приходится загружать миллионы объектов из разных таблиц БД на старте, далее инициалировать их определенным образом несколько минут, и все это занимает в памяти десятки Гб).
Грубо говоря идея - чтобы какой-то сервис сначала загрузил все это в себя и сдампил на диск в виде одного/нескольких файлов в идеале "as-is" как это лежит в памяти. Тогда сервисы смогут на старте эти файлы загрузить в себя за секунды и сразу в начать работать. Все бы ок, но структура у данных сложная - циклические ссылки, хеш-мапы.
Какие есть выходы? Я пока вижу три:
1) хранить все объекты в массивах, а все ссылки заменить на int index и все переходы по ссылкам на лету распаковывать по index в нужный элемент массива. Но это не идеально по перформансу.
2) сделать свои unsafe сериализаторы которые будут заменять ссылки на ID а при десериализации их восстанавливать с учетом циклических ссылок, а если все хранить и дампить массивами, то тоже быстро будет загружаться.
3) как-то воспользоваться поддержкой от ОС: наверняка ведь сдампить весь процесс на диск т.к. переносят же рабочие инстансы между датацентрами/нодами. Но тут я вобще не представляю куда смотреть
Буду признателен на любое направление или может быть кто-то что-то готовое знает?