Автоматическое управление версиями ключей кэша для структур C/C++ (избегайте ручного управления версиями для тысяч струкC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Автоматическое управление версиями ключей кэша для структур C/C++ (избегайте ручного управления версиями для тысяч струк

Сообщение Anonymous »

Я работаю над большой базой кода C/C++, где мы храним сериализованные структуры в Memcached.

В настоящее время версии ключей кэша определяются с использованием контрольной суммы кодовой базы, но это приводит к тому, что все записи кэша становятся недействительными в каждом выпуске, даже если базовые структуры данных не изменились.
Я пытаюсь разработать Лучшая стратегия управления версиями кэша, отвечающая следующим ограничениям:

Ограничения проблем
  • В системе используются тысячи структур
  • Ключи кэша извлекаются из определений структур
  • Мы не можем полагаться на разработчиков, которые будут вручную поддерживать или обновлять версии для каждой структуры — они склонны забывать
  • Аннулирование кэша должно происходить только при изменении макета/схемы структуры, а не в каждом выпуске
  • Предпочитаем автоматизацию во время компиляции или сборки
  • Накладные расходы во время выполнения должны быть нулевыми или минимальными
  • Приемлемы решения 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»