|
|
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
Имеется объект в котором хранятся параметры. Он представляет композицию из многих generic полей и коллекций, в том числе вложенных. С этим объектом производятся только операции сохранения и редактирования, т.е. поиск по каким-то отдельным полям и другие операции не требуются. Никаких ограничений на внешние ключи нет. В приложении порядка 100 объектов такого типа. Возникает вопрос где и как такой объект лучше хранить и как. Подключать документную БД типа mongo ради 100 объектов вроде бы не правильно. Можно делать сериализацию и хранить полученный массив просто как отдельный столбец в БД(rdbms), или конвертировать объект в json (Gson) и опять же хранить просто как столбец в БД. Но тут возникает проблема связанная с тем, что этот класс этих объектов время от времени будет изменяться (могут добавляться новые поля, или могут быть удалены существующие). Как лучше всего решить такую задачу? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 13:16 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
Garrick, а что будет, если после сохранения класс объекта изменился и нужно по старым данным создать объект измененного класса? Какие возможности есть? В Gson есть аннотация @Since как раз для этой цели, но пока никаких примеров реального использования в таком ключе я не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 13:41 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdm, Ну, я так понимаю, что можно будет восстановить те поля, что есть в XML. Вы же сами можете прописать все "мапинги" полей. Соответственно, при изменении структуры, при необходимости должны будете изменить и код ридера. См. Применение XStream для сериализации Java-объектов в XML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 13:49 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdmВозникает вопрос где и как такой объект лучше хранить и как. Казалось бы тривиальный ответ: так чтобы было как можно меньше преобразований для совершения необходимых действий. Но ведь сколько копий можно сломать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 13:57 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdmИмеется объект в котором хранятся параметры. Он представляет композицию из многих generic полей и коллекций, в том числе вложенных. С этим объектом производятся только операции сохранения и редактирования, т.е. поиск по каким-то отдельным полям и другие операции не требуются. Никаких ограничений на внешние ключи нет. В приложении порядка 100 объектов такого типа. Возникает вопрос где и как такой объект лучше хранить и как. Подключать документную БД типа mongo ради 100 объектов вроде бы не правильно. Можно делать сериализацию и хранить полученный массив просто как отдельный столбец в БД(rdbms), или конвертировать объект в json (Gson) и опять же хранить просто как столбец в БД. Но тут возникает проблема связанная с тем, что этот класс этих объектов время от времени будет изменяться (могут добавляться новые поля, или могут быть удалены существующие). Как лучше всего решить такую задачу? Спасибо. Если говорить о "правильно". То тогда нужно проанализировать данные. Создать БД. Довести ее хотя бы до 3 НФ. Сделать слой который будет сериализовать/десериализовать ваш объект в БД. Если данные, совсем не подходят для РМД, то забить на все и хранить в XML. сериализовать/десериализовать через SAX. Тут зависит от задачи... и от вашей лени :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 14:08 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
mad_nazgulЕсли говорить о "правильно". То тогда нужно проанализировать данные. Создать БД. Довести ее хотя бы до 3 НФ. Сделать слой который будет сериализовать/десериализовать ваш объект в БД. Если данные, совсем не подходят для РМД, то забить на все и хранить в XML. сериализовать/десериализовать через SAX. Тут зависит от задачи... и от вашей лени :-) +1 странно что автор шёл не от модели в РСУБД, а от, к примеру UML. И теперь думает как всю эту байду сохранять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 14:26 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, объект представляет собой большой граф, так что "Создать БД. Довести ее хотя бы до 3 НФ." — это долго и лень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 14:27 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 14:29 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, как я понял, я должен сам реализовать SAX? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 14:35 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdm, gaming site .... ну дак я наверно пропустил что у вас игровой движёк. Разумется там архитектура другая. Там вообще всё другое)) начиная от самого АппСервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 14:49 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdm, в игровых движка - сцена. Там автоматом при разработке продумываю экспорт-импорт объектов. Ты же читаешь сцену при загрузке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 14:52 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
Petro123, этот как пример просто. Но суть такая же. Есть большой объект, который маппить в БД нет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 14:56 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdmPetro123, этот как пример просто. Но суть такая же. Есть большой объект, который маппить в БД нет смысла. наверно ты думаешь, что аналогов в мире нету....(просто пример) - сохраняй и читай из двоичного файла. Быстрее не бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2015, 15:12 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdmmad_nazgul, объект представляет собой большой граф, так что "Создать БД. Довести ее хотя бы до 3 НФ." — это долго и лень. Это он в объектной модели так выглядит. А как он выглядит в реляционной модели? А если лень, то как я и говорил храним в XML и парсим не ч/з DOM модель, а ч/з поток управляемый событиями (SAX). Т.е. если структура меняется, то просто добавляются новые события :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 06:22 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, например Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Какой Ваш вариант реляционной модели для такого объекта класса A? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 11:23 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdm, добавлением в классы SaveToStream(Stream); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 12:05 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdm, а самый простой и прямой способ с сериализацией ты попробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 12:32 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
mayton, я пока ничего не пробовал. Но если после сохранения класс чуть поменять, с десериализацией не возникнет проблем(всякие serialId и прочее)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 14:22 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdm, не договариваете. - вы писали, что _уже_ сохраняете объект и редактируете. Куда? Или в опреативке? - если параметры или ветки параметров имеют значения для БЛ, то вестимо нужно обрабатывать версии. Либо без поддерки версии сразу вырезать ветку вместе с кодом по его обслуге (БЛ) - если не имеют значения, то и версия не нужна. И сам объект тоже)). Тогда почему странный вопрос про нужность версии при сериализации? OFF - Я так понял, что классы не вы писали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 14:40 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdmmayton, я пока ничего не пробовал. Но если после сохранения класс чуть поменять, с десериализацией не возникнет проблем(всякие serialId и прочее)? 1) Если ты будешь следовать правилу менять магическое число serialId каждый раз когда вносишь изменения в поля то всё будет ОК. 2) Ты можешь реализовать интерфейс Externalizable и вручную управлять порядком сохранения полей и рекурсивных вложенных сущностей. В этом случае тебе пофигу на serialId т.к. логика десериализации и сериализации полностью на твою ответственность. Кстати Externalizable по всем бенчмаркам работает быстрее чем вариант (1). Пробуй базовый функционал который изначально заложен в язык и JDK. XML, JSON и прочие МонгоДБ - пойдут уже тогда когда ты осознаешь недостатки базовых возможностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 14:47 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
Petro123, классы есть, хранятся в памяти. Не совсем понял Вашу мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 14:49 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
mayton, Можете меня еще кратко просветить по поводу SAX, DOM, JAXB, JDOM, Jaksonы и прочее. Это все работает в оба конца? Т.е. и Object to XML и XML to Object? Т.е. могу я сам описать программно логику трансляции объекта в XML? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 14:53 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdmНе совсем понял Вашу мысль. сохранять или сохранять в поток или сериализация (mayton) - одно и то же. Странно что вы о сериализации не подумали в 1 очередь. Про версии - кроме вас никто не скажет - нужно ли оно вам. Если у вас пришёл объект на 50% с другими полями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 14:59 |
|
||
|
Сохранение объекта
|
|||
|---|---|---|---|
|
#18+
rdmmayton, Можете меня еще кратко просветить по поводу SAX, DOM, JAXB, JDOM, Jaksonы и прочее. Это все работает в оба конца? Т.е. и Object to XML и XML to Object? Т.е. могу я сам описать программно логику трансляции объекта в XML? Для понимания всех этих страшных слов, нужно знать всего две вещи: DOM - Загружает всю xml в структуру типа дерево. Потом с этой структурой можно работать. Перегнать, например в объект. SAX работает по другому. Последовательно читается xml. И при открытия или закрытия тега вызывается соответствующий обработчик (который заранее нужно записать и закаллбачить). Аналогично и в обратную сторону. Это очень грубое описание, т.к. в обоих случаях куча нюансов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 15:10 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39032199&tid=2124948]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 463ms |

| 0 / 0 |
