В настоящее время версии ключей кэша определяются с использованием контрольной суммы кодовой базы, но это приводит к тому, что все записи кэша становятся недействительными в каждом выпуске, даже если базовые структуры данных не изменились.
Я пытаюсь разработать Лучшая стратегия управления версиями кэша, отвечающая следующим ограничениям:
Ограничения проблем
- В системе используются тысячи структур
- Ключи кэша извлекаются из определений структур
- Мы не можем полагаться на разработчиков, которые будут вручную поддерживать или обновлять версии для каждой структуры — они склонны забывать
- Аннулирование кэша должно происходить только при изменении макета/схемы структуры, а не в каждом выпуске
- Предпочитаем автоматизацию во время компиляции или сборки
- Накладные расходы во время выполнения должны быть нулевыми или минимальными
- Приемлемы решения C или C++ (GCC/Clang)
автоматический способ создания стабильной версии/хеша для каждого struct, например:
- Версия меняется, когда:
Поле добавляется/удаляется - Изменяется порядок полей
- Изменяется тип поля
[*]Разработчикам не нужно вручную сохранять номера версий для каждой структуры
Пример (упрощенный)
Код: Выделить всё
struct UserProfile {
int user_id;
double score;
};
Код: Выделить всё
struct UserProfile {
int user_id;
double score;
uint64_t last_login;
};
Вопрос
Как большие базы кода C/C++ обычно обрабатывают автоматическое управление версиями кэша для каждой структуры в масштабе?
Существуют ли установленные шаблоны (макросы, кодогенерация, трюки компилятора, инструменты), которые надежно генерируют хеши на основе схемы/макета для структур, не полагаясь на дисциплину разработчика?
Конкретные примеры или ссылки будут высоко оценены.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ing-across
Мобильная версия