Сериализация постоянных / функциональных структур данных - PullRequest
2 голосов
/ 20 марта 2010

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

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

Ответы [ 2 ]

6 голосов
/ 20 марта 2010

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

4 голосов
/ 20 марта 2010

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

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

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

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