powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сериализация дерева объектов
15 сообщений из 15, страница 1 из 1
Сериализация дерева объектов
    #40074198
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть коллекция объектов в виде иерархического дерева, похоже на папки в проводнике, где в каждой папке хранятся определенные категории объектов. Сейчас это все сохраняется на диск в виде обычных папок и файлов. Т.е. в том же виде по сути как и представлено в памяти. Перед сохранением коллекция полностью удаляется с диска и вся перезаписывается заново, даже если был изменен только один объект из сотни. Все это занимает слишком много времени. Какое решение лучше использовать чтобы сохранять только измененные объекты, а не все дерево целиком. Обьекты можно создавать, изменять, удалять, а также перетаскивать из одной папки в другую.
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074213
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подобный кейс описывался в книге "Жемчужины программирования". Вместо копирования
всего дерева файлов и каталогов - создавась структура которая отражала только изменения.
А все что не менялось - сохранялось как symbolic-links на старое дерево. Как SVN.
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074285
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

это довольно сложный вопрос, что бы быстро наваять какое-то наколеночное решение
довольно много реализаций этой идеи: документоориентированная БД (mongodb например), любая современная файловая система (есть либы для отображения на файл, например pCloud использует одну из таких)
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074296
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

Для начала: мухи объекты - отдельно, дерево (id объекта - id родителя) - отдельно. После этого тебе надо переписывать только дерево и изменённые объекты (или добавлять их diff). Да, ты пожертвуешь структурой в фс при этом, НО ты можешь сделать драйвер для fuse и работать с этим как с фс! (если знаешь, что это такое)
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074305
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще важно как выглядит исходная структура в Java и как трекается изменение. На узел. Или на цепочку
от корня. Нужно-ли обходить все 100500 потомков корня или просто достаточно пойти по атрибуту lastUpdateTime.

И для красивой реализации в диске - нужна нормальная файловая система. FAT32 на флешке - не подходит.
Линуксовые - (ext4, btrfs, xfs...) вроде все поддерживают симлинки на фолдеры. NTFS тоже поддерживает.
Но я-бы почитал по Java как этот API использовать практически. Возможно там - нюансы.
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074306
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt
Перед сохранением коллекция полностью удаляется с диска и вся перезаписывается заново, даже если был изменен только один объект из сотни. Все это занимает слишком много времени. Какое решение лучше использовать чтобы сохранять только измененные объекты, а не все дерево целиком.
я, может, не понял суть задачи, но почему просто не делать точечные изменения, раз уж оно и так хранится в структуре из папок и файлов? Обязательно ли всё удалять?
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074346
fkfka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется, что совершенно несложно было бы разработать какую-то структуру для того чтобы хранить это без перезаписывания всего файла. Но в ней будут со временем накапливаться неиспользуемые места, которые надо будет время от времени уплотнять тем же перезаписыванием. По сути тебе просто надо реализовать что-то вроде типичного memory heap с GC, как в .NET или Java, просто на диске.
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074358
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю что при "наивной" сериализации всего дерева объектов у нас могут появится узлы-призраки.
Те которые были удалены в Java-дереве но по которым не пришла команда на удаление с диска.
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074380
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно поэтому Eolt удаляет все дерево файлов и каталогов.
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074508
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже уверен, что предварительная очистка всего используется в качестве простого решения.
Например, вдруг, подветка должна стать корневой, а всё выше неё по стволу должно исчезнуть...
Наверное отсюда и вопрос возник.
Я конечно голосую за использование цельного алгоритма по всем правилам, и тогда решение будет универсальным. Сам не знаток, но выше что-то было предложено.

Но будучи лентяем, попробовал бы другой вариант, КМК, ответ в самом вопросе - сериализация. Написано, что структура - деревья. Пусть даже кусты/лес деревьев.
В этом случае все ветки (их ИД) взаимно однозначо ложатся в строки таблицы. После чего сравнение строк (было - стало) не должно вызывать заметных трудностей (ибо как раз в сериализованном виде). При этом дерево можно хранить как дерево, а для сравнений преобразовывать в табличные строки.

Строки такого типа:
a-b-c-d-obj1
a-b-c-w-obj2
a-b-x-e-k-l-m-n-obj3
...
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074512
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать так. Узел дерева. Использует атрибут lastActionTimestamp.

Код: javascript
1.
2.
3.
4.
5.
public abstract class Node<T extends Serializable> {
    public long lastActionTimestamp; // insert/delete/update
    public T container;
    public List<Node> child;    
}



При обновлениях и вставках - изменяется метка времени на всех родителях и на узле.
При удалении узла - фиксируется метка только для цепочки родителей.

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

Будет максимально быстро. Я гарантирую это (с) Сохранять дерево - в новое место. А восстанавливать.... хз.
Наверное из снапшота старого дерева + изменения.
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074523
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расскажу давню историю, времён FAT, о пользе FAT/NTFS etc.
Приходит ко мне чел-к с вопросом: Можно ли состряпать СУБД за 3 дня? )))
Окзаалось, что подходит срок договора, и нет СУБД от слова совсем, т.к. все рассчитывали на штатную, а про неё только что сказали, что не получится (задним числом известно, что диагноз был ошибочным, но что есть, то есть ...) А рук-ль всего проекта давит, якобы даже сам сможет за пару дней, и даже вот завтра начнёт и напишет. Ха-ха-ха - отвечаю.

Конечно же, предлагаю обозвать ФС СУБДшкой. Таблицы, записи, поля - каталоги и файлы ФС. В ней ведь есть всё достаточное: удалить вставить, создать, редактировать, поиск... Ну он так и выкрутился с небольшой оболочкой на ЯП. Ну а рук-ль, конечно же "не шмогла".
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074525
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я помню одно из определений СУБД.

Это - ПО для ввода инфы. Процессинга. И извлечения отчотов.

Классик– Товарищ Зубо, – сказал он. – На что ты имеете заявку?
– На Черный Ящик, – уныло сказал комендант. – Дело номер девяносто седьмое.
– Я тебя не спрашиваю, какое номер дело, – возразил Хлебовводов. – Я тебя спрашиваю: ты на черный ящик заявку имеете?
– Имею, – признался комендант.
– Чья заявка?
– Товарища Привалова из НИИЧАВО. Вон он сидит.
– Да, – страстно сказал я, – но мой Черный Ящик – это не ящик... точнее – не совсем ящик...
Однако Хлебовводов внимания на меня не обратил. Он посмотрел футляр на свет, потом приблизился к коменданту и зловеще произнес:
– Ты что же бюрократию разводите? Ты что же, не видите, какого оно цвета? На твоих же глазах рационализацию произвели, вот товарищ представитель от науки на твоих глазах сидит, ждет, понимаете, выполнения заявки, ужинать давно пора, на дворе темно, а ты что же – номерами здесь жонглируете?
Я чувствовал, что на меня надвигается какая-то тоска, что будущее мое заполняется каким-то унылым кошмаром, непоправимым и совершенно иррациональным. Но я не понимал, в чем дело, и только продолжал жалко бубнить, что мой ящик – это не совсем ящик, а точнее, совсем не ящик. Мне хотелось разъяснить, рассеять недоразумение. Комендант тоже бубнил что-то убедительное, но Хлебовводов, погрозив ему кулаком, уже возвращался на свое место.
– Ящик, Лавр Федотович, черный, – с торжеством доложил он. – Ошибки никакой быть не может, сам смотрел. И заявка имеется, и представитель присутствует.
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40074649
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Я тоже уверен, что предварительная очистка всего используется в качестве простого решения.
Например, вдруг, подветка должна стать корневой, а всё выше неё по стволу должно исчезнуть...
Наверное отсюда и вопрос возник.
Я конечно голосую за использование цельного алгоритма по всем правилам, и тогда решение будет универсальным. Сам не знаток, но выше что-то было предложено.

Но будучи лентяем, попробовал бы другой вариант, КМК, ответ в самом вопросе - сериализация. Написано, что структура - деревья. Пусть даже кусты/лес деревьев.
В этом случае все ветки (их ИД) взаимно однозначо ложатся в строки таблицы. После чего сравнение строк (было - стало) не должно вызывать заметных трудностей (ибо как раз в сериализованном виде). При этом дерево можно хранить как дерево, а для сравнений преобразовывать в табличные строки.

Строки такого типа:
a-b-c-d-obj1
a-b-c-w-obj2
a-b-x-e-k-l-m-n-obj3
...
да там логически всё просто
есть два типа сохранения, которые друг-друга дополняют
  • журнал: пишется, что изменяется\удаляется - минусы понятны (нужно повторить все действия)
  • нужно сохранение текущего состояния (может по формату совпадать с журналом)
тот же подход имплементирует документоориентированные бд

осталось выбрать
...
Рейтинг: 0 / 0
Сериализация дерева объектов
    #40085142
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webdav+субд
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сериализация дерева объектов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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