Сериализация постоянных/функциональных структур данных

Постоянные структуры данных зависят от совместного использования структуры для повышения эффективности. Пример см. здесь.

Как я могу сохранить совместное использование структуры при сериализации структур данных и записи их в файл или базу данных? Если я просто наивно пройдусь по структурам данных, я сохраню правильные значения, но потеряю совместное использование структуры. Я хотел бы иметь возможность сохранять структуры данных с общими компонентами в файл, восстанавливать их и по-прежнему использовать большую часть структуры в восстановленных данных.


person Rob Lachlan    schedule 20.03.2010    source источник


Ответы (2)


Вам нужна какая-то форма гашиша. Эта проблема хорошо изучена. статья Эндрю Кеннеди о комбинаторах пиклеров объясняет в подробно о том, как сериализовать и десериализовать, сохраняя совместное использование.

person Norman Ramsey    schedule 20.03.2010

Я могу придумать два очевидных метода, и они связаны между собой.

  1. Не сериализуйте структуры, сериализуйте узлы. Таким образом, вы должны хранить сериализованную запись для каждого узла в приведенном вами примере дерева и преобразовывать все ссылки на узлы в имя ключа базы данных для узла. Это дает вам автоматический обмен, но требует многократных поисков в погоне за ссылками, чтобы загрузить структуру.
  2. Раскрасьте свои узлы по праву собственности, как в вашем примере. Имейте представление о том, к какой структуре «принадлежит» данный узел, и сериализуйте только те узлы в структуре, которые принадлежат этой структуре. Ссылки на узлы в других структурах заменяются ссылкой на эту структуру и рассматриваемый узел. Это позволяет загружать сразу всю структуру, но может привести к необходимости загрузки ВСЕХ связанных структур, если они сильно взаимосвязаны.

Выбор между этими вариантами зависит от того, для чего вы пытаетесь оптимизировать и какие связи вы ожидаете увидеть на практике.

person swestrup    schedule 20.03.2010