У меня есть большое дерево объектов Java в моем настольном приложении, и я пытаюсь решить, как лучше всего сохранить их в виде файла в файловой системе.
Вот некоторые мысли, которые у меня были:
Сверните мой собственный сериализатор с помощью DataOutputStream: Это дало бы мне максимальный контроль над тем, что находится в файле, но за счет микроуправления им.
Прямая старая сериализация с использованием ObjectOutputStream и различных связанных с ним классов: Мне это не нравится, потому что я считаю данные хрупкими. Изменение структуры любого объекта разрушает его сериализованные экземпляры. Так что я заперт в ужасном кошмаре управления версиями.
XML-сериализация: Это не так хрупко, но значительно медленнее, чем прямая сериализация. Его можно преобразовать вне моей программы.
JavaDB: Я подумал об этом, так как мне комфортно писать приложения JDBC. Разница здесь в том, что экземпляр базы данных будет сохраняться только во время открытия или сохранения файла. Это некрасиво, но ... он позволяет перейти на архитектуру центрального сервера, если в этом возникнет необходимость, и предоставляет возможность более простого запроса модели данных.
Мне любопытно узнать, что думают другие люди. И я надеюсь, что пропустил какой-то очевидный и более простой подход, чем приведенные выше.
Вот еще несколько вариантов, взятых из ответов ниже:




Взгляните на Hibernate как на более простой способ взаимодействия с базой данных.
XStream с сайта codehaus.org
Сериализация / десериализация XML в основном без кодирования. Вы можете использовать аннотации, чтобы настроить его. Хорошо работаю в двух проектах, над которыми работаю.
Посмотреть презентацию моей группы пользователей на http://cjugaustralia.org/?p=61
Я бы выбрал ваш последний вариант JavaDB (дерби от Sun) и использовал объектно-реляционный уровень, такой как Спящий режим или iBatis. Использование первых трех подходов означает, что вы потратите больше времени на создание ядра базы данных, чем на разработку функций приложения.
db4objects может быть лучшим выбором
По моему опыту, вам, вероятно, лучше использовать встроенную базу данных. SQL, хотя и не идеален, обычно намного проще, чем проектировать хорошо работающий и надежный формат файла.
Я не использовал JavaDB, но мне повезло с H2 и SQLite. SQLite - это библиотека C, что означает немного больше работы с точки зрения развертывания. Однако его преимущество заключается в том, что вся база данных хранится в единой кроссплатформенной библиотеке. По сути, это предварительно упакованный общий формат файла. SQLite оказался настолько полезным, что я даже начал использовать его вместо текстовых файлов в сценариях.
Будьте осторожны при использовании Hibernate, если вы работаете с небольшой проблемой постоянства. Это добавляет сложности и накладных расходов на библиотеку. Hibernate действительно хорош, если вы работаете с большим количеством таблиц, но, вероятно, он будет громоздким, если вам нужно всего несколько таблиц.
Я думаю, это зависит от того, что вам нужно. Посмотрим варианты:
1) Снято немедленно! Я даже не буду оправдываться. :)
2) Если вам нужна простая, быстрая настойчивость с использованием одного метода, придерживайтесь ее. Он сохранит полный график данных как есть! Остерегайтесь того, как долго вы будете обслуживать сохраненные объекты. Как вы отметили, управление версиями может быть проблемой.
3) Медленнее, чем (2), требуется дополнительный код и может редактироваться пользователем. Я бы использовал его только в том случае, если данные должны использоваться клиентом на другом языке.
4) Если вам все равно нужно запросить данные, придерживайтесь решения БД.
Что ж, думаю, вы уже ответили на свой вопрос :)