powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение объекта
25 сообщений из 65, страница 1 из 3
Сохранение объекта
    #39031539
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется объект в котором хранятся параметры. Он представляет композицию из многих generic полей и коллекций, в том числе вложенных. С этим объектом производятся только операции сохранения и редактирования, т.е. поиск по каким-то отдельным полям и другие операции не требуются. Никаких ограничений на внешние ключи нет. В приложении порядка 100 объектов такого типа.
Возникает вопрос где и как такой объект лучше хранить и как. Подключать документную БД типа mongo ради 100 объектов вроде бы не правильно. Можно делать сериализацию и хранить полученный массив просто как отдельный столбец в БД(rdbms), или конвертировать объект в json (Gson) и опять же хранить просто как столбец в БД. Но тут возникает проблема связанная с тем, что этот класс этих объектов время от времени будет изменяться (могут добавляться новые поля, или могут быть удалены существующие).
Как лучше всего решить такую задачу?
Спасибо.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031559
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,

не подойдёт?
Хранить можно прямо в файлах, сотня файлов по-моему не проблема.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031567
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick, а что будет, если после сохранения класс объекта изменился и нужно по старым данным создать объект измененного класса? Какие возможности есть? В Gson есть аннотация @Since как раз для этой цели, но пока никаких примеров реального использования в таком ключе я не нашел.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031583
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,

Ну, я так понимаю, что можно будет восстановить те поля, что есть в XML. Вы же сами можете прописать все "мапинги" полей. Соответственно, при изменении структуры, при необходимости должны будете изменить и код ридера.
См. Применение XStream для сериализации Java-объектов в XML
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031594
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmВозникает вопрос где и как такой объект лучше хранить и как.
Казалось бы тривиальный ответ: так чтобы было как можно меньше преобразований для совершения необходимых действий.
Но ведь сколько копий можно сломать. :)
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031613
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmИмеется объект в котором хранятся параметры. Он представляет композицию из многих generic полей и коллекций, в том числе вложенных. С этим объектом производятся только операции сохранения и редактирования, т.е. поиск по каким-то отдельным полям и другие операции не требуются. Никаких ограничений на внешние ключи нет. В приложении порядка 100 объектов такого типа.
Возникает вопрос где и как такой объект лучше хранить и как. Подключать документную БД типа mongo ради 100 объектов вроде бы не правильно. Можно делать сериализацию и хранить полученный массив просто как отдельный столбец в БД(rdbms), или конвертировать объект в json (Gson) и опять же хранить просто как столбец в БД. Но тут возникает проблема связанная с тем, что этот класс этих объектов время от времени будет изменяться (могут добавляться новые поля, или могут быть удалены существующие).
Как лучше всего решить такую задачу?
Спасибо.

Если говорить о "правильно".
То тогда нужно проанализировать данные.
Создать БД. Довести ее хотя бы до 3 НФ.
Сделать слой который будет сериализовать/десериализовать ваш объект в БД.

Если данные, совсем не подходят для РМД, то забить на все и хранить в XML.
сериализовать/десериализовать через SAX.

Тут зависит от задачи... и от вашей лени :-)
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031650
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulЕсли говорить о "правильно".
То тогда нужно проанализировать данные.
Создать БД. Довести ее хотя бы до 3 НФ.
Сделать слой который будет сериализовать/десериализовать ваш объект в БД.

Если данные, совсем не подходят для РМД, то забить на все и хранить в XML.
сериализовать/десериализовать через SAX.

Тут зависит от задачи... и от вашей лени :-)
+1
странно что автор шёл не от модели в РСУБД, а от, к примеру UML.
И теперь думает как всю эту байду сохранять.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031651
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul, объект представляет собой большой граф, так что "Создать БД. Довести ее хотя бы до 3 НФ." — это долго и лень.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031654
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
авторImagine you have an online gaming site, with a database that stores statistics of players in different online games (played in-browser, written in GWT and cross-compiled to javascript). Some of the games are strategic, some are action games, some are platformers. The database is relational and stores players and history of plays and the score.

One day you get an additional requirement: let the players save the game state to the cloud, during the game, so they can restart the game later, at the same point. Needless to say, the only reason to store this temporary state is to return to the game, the state itself will never be introspected.

Now you have two basic choices:

since the games are written in Java, you can quite easily take the model, send it to the server, serialize it in one line of code and store as a blob. The table will be called "saved_games" and it will have foreign keys to the player and so on. From the point of view of the database a "save game" is an opaque, indivisible blob.

you can create a separate relational model for each of your 100 games (this will be tens of tables per game). For pacman alone, for example, you will have to have a table storing positions of all the uneaten pellets, bonuses, positions and current state of ghosts. If someone, someday, modifies the game, even slightly, you will have to update the relational model. Also, for each type of game, you will have to implement a logic to write the Java model to the database, and to read it back.

The answer by Justin Cave says, that you should go with the second option. I think this would be a huge mistake.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031660
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul, как я понял, я должен сам реализовать SAX?
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031672
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,
gaming site
....
ну дак я наверно пропустил что у вас игровой движёк. Разумется там архитектура другая.
Там вообще всё другое)) начиная от самого АппСервера.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031674
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,
в игровых движка - сцена.
Там автоматом при разработке продумываю экспорт-импорт объектов.
Ты же читаешь сцену при загрузке?
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031681
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, этот как пример просто. Но суть такая же. Есть большой объект, который маппить в БД нет смысла.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031705
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmPetro123, этот как пример просто. Но суть такая же. Есть большой объект, который маппить в БД нет смысла.
наверно ты думаешь, что аналогов в мире нету....(просто пример)
- сохраняй и читай из двоичного файла. Быстрее не бывает.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39031993
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmmad_nazgul, объект представляет собой большой граф, так что "Создать БД. Довести ее хотя бы до 3 НФ." — это долго и лень.

Это он в объектной модели так выглядит.
А как он выглядит в реляционной модели?

А если лень, то как я и говорил храним в XML и парсим не ч/з DOM модель, а ч/з поток управляемый событиями (SAX).

Т.е. если структура меняется, то просто добавляются новые события :-)
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032166
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul, например

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class A {

Collection<B<S1>> collection;
}

class B<T> {
T field;
Collection<C<S2, S3>> collection;


}

class C<T,K> {

SomeType<T,K> field;

}



Какой Ваш вариант реляционной модели для такого объекта класса A?
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032199
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,
добавлением в классы
SaveToStream(Stream);
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032228
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm, а самый простой и прямой способ с сериализацией ты попробовал?
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032388
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, я пока ничего не пробовал. Но если после сохранения класс чуть поменять, с десериализацией не возникнет проблем(всякие serialId и прочее)?
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032416
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,
не договариваете.
- вы писали, что _уже_ сохраняете объект и редактируете. Куда? Или в опреативке?
- если параметры или ветки параметров имеют значения для БЛ, то вестимо нужно обрабатывать версии. Либо без поддерки версии сразу вырезать ветку вместе с кодом по его обслуге (БЛ)
- если не имеют значения, то и версия не нужна. И сам объект тоже)).
Тогда почему странный вопрос про нужность версии при сериализации?
OFF - Я так понял, что классы не вы писали?
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmmayton, я пока ничего не пробовал. Но если после сохранения класс чуть поменять, с десериализацией не возникнет проблем(всякие serialId и прочее)?
1) Если ты будешь следовать правилу менять магическое число serialId каждый раз когда вносишь изменения
в поля то всё будет ОК.

2) Ты можешь реализовать интерфейс Externalizable и вручную управлять порядком сохранения полей и рекурсивных вложенных
сущностей. В этом случае тебе пофигу на serialId т.к. логика десериализации и сериализации полностью на твою ответственность.
Кстати Externalizable по всем бенчмаркам работает быстрее чем вариант (1).

Пробуй базовый функционал который изначально заложен в язык и JDK.

XML, JSON и прочие МонгоДБ - пойдут уже тогда когда ты осознаешь недостатки базовых возможностей.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032435
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, классы есть, хранятся в памяти.
Не совсем понял Вашу мысль.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032439
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, Можете меня еще кратко просветить по поводу SAX, DOM, JAXB, JDOM, Jaksonы и прочее. Это все работает в оба конца? Т.е. и Object to XML и XML to Object? Т.е. могу я сам описать программно логику трансляции объекта в XML?
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032449
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmНе совсем понял Вашу мысль.
сохранять или сохранять в поток или сериализация (mayton) - одно и то же.
Странно что вы о сериализации не подумали в 1 очередь.
Про версии - кроме вас никто не скажет - нужно ли оно вам. Если у вас пришёл объект на 50% с другими полями.
...
Рейтинг: 0 / 0
Сохранение объекта
    #39032469
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmmayton, Можете меня еще кратко просветить по поводу SAX, DOM, JAXB, JDOM, Jaksonы и прочее. Это все работает в оба конца? Т.е. и Object to XML и XML to Object? Т.е. могу я сам описать программно логику трансляции объекта в XML?

Для понимания всех этих страшных слов, нужно знать всего две вещи:

DOM - Загружает всю xml в структуру типа дерево.
Потом с этой структурой можно работать.
Перегнать, например в объект.

SAX работает по другому.
Последовательно читается xml.
И при открытия или закрытия тега вызывается соответствующий обработчик (который заранее нужно записать и закаллбачить).

Аналогично и в обратную сторону.

Это очень грубое описание, т.к. в обоих случаях куча нюансов.
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]