У меня была похожая проблема, хотя я использую HDF5 . В моем случае есть дополнительное требование, чтобы я мог читать части объекта, поэтому сериализация на самом деле не вариант.
HDF очень похож на большой массив, в котором для доступа к данным используется индекс. Решение, которое я использую, заключается в добавлении «предыдущего индекса» к таблице, в которой хранится тип another_struct
.
Если взять ваш пример, если бы 'x' и 'y' имели по 3 и 2 элемента каждый, то данные будут сохранены следующим образом:
[ index ] [ another_struct data here ] [ previous_index ]
[ 0 ] [ x data 0 ] [ -1 ]
[ 1 ] [ x data 1 ] [ 0 ]
[ 2 ] [ x data 2 ] [ 1 ]
[ 3 ] [ y data 0 ] [ -1 ]
[ 4 ] [ y data 1 ] [ 3 ]
И затем в основной таблице сущностей сохраняется последний добавленный индекс:
[ index ] [ Entity data here ] [ x ] [ y ]
[ 0 ] [ ... ] [ 2 ] [ 4 ]
Я не очень знаком с тем, как работает Токийский кабинет, поэтому, хотя этот подход должен работать, он не может быть оптимальным для этого формата данных. В идеале, если вы можете иметь указатели на реальные объекты Tokyo Cabinet, тогда вместо использования индексов, как я указал выше, вы можете хранить эти указатели.