JS - Strom - a implementacia symlinkov rubrika: Programování: JavaScript

7 xxar3s
položil/-a 6.7.2018
 
upravil/-a 6.7.2018

Mam strom ktory obsahuje viacero typov nodov:

  • folder (moze obsahovat zaznamy, data, alebo prilohy)
  • zaznam (moze obsahovat data alebo prilohy)
  • priloha (obrazky videa alebo hociaky iny obsah)
  • (su tam aj ine typy nodov ale tie su teraz nepodstatne)
  1. Strom je fyzicky ulozeny v SQL server databaze (kazdy TreeNode je reprezentovany jednym riadkom v tabulke Nodes) Nody mozu obsahovat okrem textovych dat aj blob s binarnymi datami.
  2. kazda polozka ma ParentId (okrem korenovej ta ma ParentId null)
  3. api vracia polozky klientovi ako pole nodov... stromova struktura sa vytvori az na klientovi podla ParentId
  4. tento strom sa vykresluje v komponente Tree http://blueprintjs.com/docs/v2/#core/components/tree (trosku upravenej pre moje potreby)

no a teraz by som tam chcel pridat symlinky (fungovat by to malo rovnako ako klasicke symlinky vo Windowse ci Linuxe) ako to implementovat co najednoduchsie?

Symlink by bol dalsi typ nodu. Tento Node by mal v sebe TargetId (a v nom by bola relacia na Node.Id na ktory odkazuje). Potialto je to jednoduche.

A teraz problemy:

  1. ako zabezpecim aby boli nody (original node + jeho potomkovia vs odkaz) na dvoch miestach stromu zosynchronizvane? Predstavujem si to riesit nejako cez referencie ale nemam jasnu predstavu ako.
  2. ako zabranim zacykleniu? ked sa budu nody referencovat medzi sebou alebo potomkami? ako taketo nieco detekujem? ako tomu zabranim?
odkaz
7 harrison314
odpověděl/-a 7.7.2018

Zacykleniu zabranis detkciou ckylov v grafe, je na to pomerne dost algoritmov, alebo hlupim prehladavanim pred pridanim symlinku (prehladas jeho podstrom, ci nenrazis na seba sameho), alebo kazdy uzol si bude drzat zoznam symlinkov, ktore obsahuje strom pod nim.

Komentáře

  • xxar3s : dik 7.7.2018
  • Taco : Symlink na symlink bych propsal na adresu symlinku. Ušetříš trochu drbání. 11.7.2018
  • Hobr : @Taco: to bych osobně nechtěl, protože když změním ten mezi-symlink na jiný cíl, tak by ostatní vedly pořád na ten předchozí uzel a to je právě lepší si u každého symlinku zvlášť rozhodnout, jestli chci symlink na symlink nebo to rovnou navážu až na cílový uzel 13.7.2018
  • Taco : @Hobr: Hmm, asi máš pravdu. 13.7.2018

Pro zobrazení všech 3 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.