Приятный лайфхак по go-lang`у

Когда хочется работать с in-memory базой, но при этом не хочется морочиться с key-value хранилищем или прочим, типа Tarantool`а, но при этом хочется юзать GORM и работать с MySQL =)

Сервера базы данных не так часто перезапускаются на самих серверах, а значит пора вспомнить про MEMORY таблицы в MySQL.

Суть в том, что у нас имеется несколько таблиц и мы вынуждены с ними работать через join-запросы, что само по себе — очень медленно.. А если нам нужно делать частые insert/update/delete в этих таблицах, да еще и select-ом по ним ходить, то это будет полной жестью..

Вариант решения такой: заводим merged-таблицу в формате MEMORY (не InnoDB и упаси боже вас применить MyISAM)), которая будут сочетать в себе уже готовые с`join`еные данные и работать уже с такой таблицей сразу.

А используя GORM+прямые руки, можно всегда поддерживать актуальность данных как в классических типах таблиц, так и в memory-таблице.

А в самом go-lang приложении нужно запилить:

  • актуализацию memory-таблицы при старте приложения
  • актуализацию memory-таблицы при как только срабатывает health-checker на пустоту этой таблицы (а-ля select count(*) from mem_table)
  • сам health-checker повесить на таймер и пусть себе блюдит

Профит!

 

Оставить ответ