LINUX.ORG.RU

Как лучше хранить рекурсивные структуры?

 


0

2
type Tree struct {
	UniqueID string
	Payload string
	Parent  *Tree
}

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

Ответ на: комментарий от redixin

ТС вроде как это не в бд хранит.

Ага. В файлах. Твои предложения, как представить дерево и как его хранить?

С таким подходом все действия кроме доступа к родителю очень медленные.

Не все и не очень.

но вчера это было не нужно, а сегодня стало нужно, и пока ТС переписывал, его уволили за профнепригодность.

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

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

Ага. В файлах. Твои предложения, как представить дерево и как его хранить?

Да вот взять хотя бы git. Там все прямо как по учебнику сделано. В интернетах даже натыкался на подробное описание его потрохов.

redixin ★★★★
()
Последнее исправление: redixin (всего исправлений: 1)
Ответ на: комментарий от buggycoder

Писать в один файл, при каждом запуске программы загружать его в память? Или разбивать по большому количествую мелких файлов, например <id>.json и хранить в директории. Правда тут можно столкнуться с ограничением на количество файлов.

Промежуточный вариант: хранить всех прямых детей в одном файле с именем <Parent's ID>.json, корень, соответственно, в каком-нибудь root.json.

Не?

korvin_ ★★★★★
()

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

Миллион записей, по мегабайту payload на каждую - терабайт данных. В одном файле? «Удачи» (ц).

Храни дерево в sqlite, файлы - в ФС. Остальные варианты - это изобретение собственной велосипедной ФС.

tailgunner ★★★★★
()
Ответ на: комментарий от FUNCTION

Именно то, что банально просто, быстро с точки зрения нотации O и при этом легко делается «нерекурсивно». Но я, похоже, не понял задачу. Если надо по этой базе «ходить» туда-сюда, не десериализируя всю (например потому что не поместится в памяти) то тогда этот вариант не подходит.

dissident ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.