Программа на Qt, есть форма с текстовыми, числовыми данными и датами, а так же есть возможность загружать вложения. Текстовых (и иных) полей под сотню. Вложение вплоть до 500 мб и общее кол-во не ограничено. На данный момент разработки сохраняется только текстовые данные в виде Binary JSON (внутренний формат Qt). Думаю как сохранять вложения сохраняя эффективный доступ к текстовым данным (при сохранении изменений).
На данный момент в мыслях создание двух файлов - первый это собственно JSON с текстом и "ссылками" на вложения. "Ссылка" из себя представляет обычный offset из второго файла. Второй файл по сути просто "свалка" всех вложений с известным offset (2 байта на идентификатор, 4 байта на длину, само содержимое и повтор для следующего файла).
Если писать в файл структуру с текстом и следом структуру с вложениями - то при увеличении текста при следующем сохранении придется создавать новый файл и записывать в него все вложения из старого (если будут 10 вложений по 300 мб то чтение из одного в другой с последующим удалением первого выглядит не очень разумно\эффективно).
Если писать сначала структуру с вложениями, а потом структуру с текстом - уже не будет перезаписи больших объемов при изменении текста и на момент записи структуры данных будут известны все offset'ы вложений, но при удалении одного вложения все же будет перезапись.
Какие best practice для таких случаев? В С++ еще относительно новичок и с форматами файлов знаком слабо.