Autor Zpráva
Jirin
Profil
Zdravím.
chci se poradit, jaká je nejlepší metoda pro uložení stromů diskusí. Doposud jsem používal metodu, kdy jsem si ukládal rodiče, pořadí a úroveň a strom jsem sestavoval v paměti pomocí rekurze. Celkem bez problému a dá se říci, že jsem s tímhle řešením spokojen. Nicméně teď stojím před otázkou, kdy se bude skládat strom z řádově tisíců položek a toho se obávám, že může být problém, jelikož na to rekurze (resp. paměť) může být krátká bude složení trvat dlouho.

Co byste zvolili? Napadlo mě hned nested set a traverzování kolem stromu. Ale pak mi došlo, že u těch komentářů budu chtít řadit jak podle datumu přidání vzestupně tak sestupně a s tím si to nijak snadno neporadí, nebo mi něco uniká? A pak si taky říkám, když někdo vloží komentář na začátek stromu a bude se to muset celé přečíslovat v databázi, nebude to náročné časově?
juriad
Profil
http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back
Od strany 48 jsou popsány 4 způsoby uložení obecných stromů s jejich výhodami a nevýhodami.

Pro reakce u diskuse stačí jednodušeji: http://php.vrana.cz/diskuse-s-reakcemi.php
Varianta nested sets je popsaná česky zde: http://interval.cz/clanky/metody-ukladani-stromovych-dat-v-relacnich-databazich/
a praktická implementace: http://php.vrana.cz/traverzovani-kolem-stromu-prakticky.php
Jirin
Profil
Díky za odpověď , nicméně tohle vše jsem prošel již před napsáním:-)

Ta diskuse jde udělat jak ji má popsanou Jakub Vrána, ale nejde tam to jak jsem psal, že tam je problém i s tím, že uživatel bude chtít mít starší vlákna diskuse nahoře anebo naopak jindy novější vlákna nahoře. Či-li pak to bude chtít ukládat pořadí pro obě varianty. Jinak se mi líbí právě nested set celkem, ale je tam taky tenhle problém a dokonce bych tam musel ukládat ještě více těhle pomocných sloupců.
Kajman
Profil
Traverzování je pro komentáře zbytečné, pokud nepotřebujete podstrom, všechny předky atp. Stejně by to neřešilo možnost různého řazení uzlů bez rodiče.

Obdobně, jak si Jakub předpočítává sloupec poradi, můžete předpočítat i poradi2 určené pro druhou variantu řazení.
Jirin
Profil
No ono ty předky, podstromy apod. celkem potřebujeme. Tady nejde o nějaké úplně jednoduché komentáře, ale pokud si kliknu na jedno vlákno, tak chci podstrom celého toho rodiče. Případně pokud se prokliknu z nějakého potomka, tak chci předka + podstrom k němu apod.

To Jakubovo řešení mi přijde spíše pro jednodušší komentáře.

Předpočítávat další řazení je také možnost, ale nevím, co přijde za další požadavek a neměl bych pak těhle řadících sloupečků moc.

A u toho řadící sloupečku opačně by taky bylo celkem komplikované dopočítávat, protože to pořadí není logicky opačné tomu prvnímu pořadí.

Když mám komentáře přidány takto (vzestupně):
12:00
    12:30
    13:00
13:30

tak sestupně chci mít vypsáno:
13:30
12:00
    13:00
    12:30
což není plně revertní,. či-li to pořadí je lepší (aspoň pro mě) mít nastavené na úrovni hloubky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: