Как я понимаю, RocksDB - это действительно хранилище KeyValue, а не база данных вообще.
Это означает, что вы получаете только возможность хранить двоичный ключ и данные значений. В отличие от обычной базы данных (например, MySQL, SQLite) вы не получаете таблицы, в которых вы можете определить столбцы / типы и т. Д.
Поэтому именно ваша программа определяет, как будут храниться данные.
Одной из возможностей является сохранение ваших данных в виде значений JSON, и в этом случае, как вы говорите, вы платите за хранение «схемы» (то есть имен полей JSON) в значениях.
Другой вариант может быть, у вас есть специальный ключ (например), который называется SCHEMA , который содержит схему AVRO всех ваших типов объектов. Ваше приложение может прочитать это при запуске, инициализировать устройства чтения / записи, а затем оно знает, как обрабатывать каждый ключ + значение, хранящееся в RocksDB.
Еще одним вариантом может быть жесткое программирование логики в вашем приложении. Для этого вы можете использовать любое количество библиотек, включая AVRO (как упомянуто выше) или MsgPack и его варианты. В этом случае вам нужно быть осторожным, если вы собираетесь использовать данные RocksDB из предыдущей версии приложения, если вы внесли какие-либо изменения в схему. Так что, возможно, храните номер версии или что-то в БД.