Autor | Zpráva | ||
---|---|---|---|
Jirin Profil |
#1 · Zasláno: 8. 11. 2013, 10:44:33
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 |
#2 · Zasláno: 8. 11. 2013, 10:54:59
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 |
#3 · Zasláno: 8. 11. 2013, 11:32:17
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 |
#4 · Zasláno: 8. 11. 2013, 12:48:41
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 |
||
Časová prodleva: 10 let
|
0