Сохранение макета дерева в файл. Как эффективно реализовать? - PullRequest
2 голосов
/ 20 января 2012

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

Дерево - это в основном дерево файлов, объекты FileNode и FolderNode расширяют объект Node. Все узлы имеют ссылку на своего родителя, а у узлов FolderNode также есть набор дочерних узлов. Корнем является FolderNode с родительским элементом, равным нулю.

Дерево может содержать от 2 до 100 000 узлов. Ширина и глубина могут быть любыми для файлового дерева (обычно более широкими, чем глубокими). ​​

Рабочий процесс приложения:

  • Загрузка всего дерева в память (путем чтения корня из файла и рекурсивного заполнения дерева)
  • Пока дерево все еще имеет узлы:
    • Обработка, а затем удаление листового узла
    • Запись дерева в файл (обновление файла для отображения дерева в памяти)
  • Удалить файл

Как вы можете сказать, файл читается только один раз, но записывается после КАЖДОГО изменения, поэтому производительность здесь явно является проблемой.

Что было бы хорошим решением для этого? Похоже, JPA со встроенной базой данных, такой как SQLite, Derby или ObjectDB, будет лучшим выбором. Это? И в таком случае, как мне смоделировать базу данных?

Ответы [ 2 ]

2 голосов
/ 20 января 2012

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

Дерево - это в основном дерево файлов, с FileNode и FolderNodeобъекты, расширяющие объект Node.Все узлы имеют ссылку на своего родителя, а у узлов FolderNode также есть набор дочерних узлов.Корнем является FolderNode с родительским значением, равным нулю.

Я бы посоветовал вам не изобретать велосипед и не реализовывать его самостоятельно.взгляните на JCR (Java Content Repository), Apache Jackrabbit является реализацией JCR, имеет преимущества как файловой системы, так и иерархической структуры, а также имеет другие функции, такие как управление версиями.

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

0 голосов
/ 20 января 2012

Правильный ответ основан на том, что вы хотите сделать с файлом позже. Как объясняется здесь, лучший способ - сохранить объект в /dev/null (НЕ сохранять его), потому что впоследствии вы его не используете.

Сначала попробуйте и посмотрите, действительно ли необходимо сохранять его отдельно. Файл java.io.File использует только 100 байтов, поэтому может потребоваться попытка сохранить все это в памяти и записать его только один раз.

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