![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 4.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
chciałbym skonsultować pewien mój pomysł odnośnie trzymania i zarządzania artykułami w bazie (CMS), wymyśliłem coś takiego:
tabela articles, pola: id INT (PK) parent INT - id ojca artykułu, badź null gdy strona głowna children TEXT - id dzieci artykułu separowane dwukropkami, badź pusto typ INT - typ (artykuł, dział, link do innego id itp) autor INT, tytul TEXT itp łatwo jest to prezentować jako drzewko w panelu administracyjnym strony, łatwo też wygenerować "pasek nawigacyjny" na stronie lecz chciałbym poznać opinie forumowiczów odnośnie takiego rozwiązania |
|
|
![]() |
![]()
Post
#2
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Spójrz na wortal, eZ ma możliwość zagnieżdzania folderów w których są trzymane miedzy innymi artykuły. To rozwiązanie jest chyba we wszystkich CMSach ( nie systemach portalowych )
Najlepiej poczytaj o drzewkach, bo z twoim rozwiązaniem to będzie trzeba wykonywać za każdym razem zapytanie o wyższy poziom. Po co trzymać dane o dzieciach ? Ja się osobiście przychylam koncepcji, że wszystko jest treścią i tylko różny jest sposób jej prezentacji. Treść trzymam w XMLu i sobie później przekształcam do porządanego kształtu ( RSS, PDF, XHTML etc ), następnie to keszuje, bo przetwarzanie XML w php jest powolne. Mam tzn chcialbym miec zaimplementowane ![]() ![]() -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 4.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
o dzewkach czytałem troche (Cormen,Knuth) lecz nie przepadam za akademickim
podejściem (bo na uczelni drzewo to nie drzewo a spójny acykliczny graf nieskierowany) trzymanie danych o dzieciach jest o tyle przydatne że moge sobie łazic po drzewku w góre i w dół oraz zapisywać kolejność pod-węzłów (te operacje są szczególnie wykożystywane w panelu. adm witryny) oczywiscie można by miec tylko id - parent a zeby mieć dzieci robic wymyśne selecty lecz wtedy nie ma takiej swobody i tracimy pewną częśc informacji np moge mieć: ArtA: - ArtP - ArtW - ArtC a nie z select orderby jakims: ArtA: - ArtC - ArtP - ArtW to jest o tyle ważne ze gdy typ artykułu = dzial to jego dzieci mogą być prezentowane jako taki "spis treści" hm mam jeszcze jedno pytanie, otoz zrobilem wlasnie swego rodzaju parser w php w witrynie, polega to na tym ze gdy ktos w panelu adm. wpisze w treści artykułu np: @@NEWSY@@ albo @@SUBARTICLES@@ to odpowiednie rzeczy zamiast tego sie wstawią, tylko ze ta cała machina parsera jest uruchamiana co odświeżenie strony, robic jakis cache czy inne metody stosować? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 259 Pomógł: 0 Dołączył: 17.05.2003 Skąd: Nysa Ostrzeżenie: (10%) ![]() ![]() |
children TEXT - id dzieci artykułu separowane dwukropkami, badź pusto
to u gory nie jest specjalnie estetyczne. ja bym to upcahl do osobnej tabeli jesli juz musialbym trzymac id "dzieci". a o drzewkach jzu gdzeis bylo na forum i tam tez byl link do dobrego artykulu w sprawie. p.s knutha to mozna pociskac studentom ze niby to czy tamto, ale to hala jest. multum teorii, durnych wzorow etc. po cholere pisac ksiazke ceglowke jak mozna to opisac prosciej na kilkudziesieciu stronach, co by przecietny kowalski nawet zrozumial? walic teoretykow ![]() -------------------- ![]() "Nie wiedziałem tylko, że Bóg też był na grzybach, gdy majstrował przy wszechświecie" (Janusz Wisniewski) dev: gazeta.ie |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 401 Pomógł: 5 Dołączył: 14.09.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat(halfik @ 2005-02-06 23:14:14) a o drzewkach jzu gdzeis bylo na forum i tam tez byl link do dobrego artykulu w sprawie. bylo bylo bylo -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Cytat(lukier @ 2005-02-06 11:47:14) o dzewkach czytałem troche (Cormen,Knuth) lecz nie przepadam za akademickim podejściem (bo na uczelni drzewo to nie drzewo a spójny acykliczny graf nieskierowany) No i co z tego? Drzewo naprawdę jest grafem, uwierz mi ![]() Można sobie narzekać, ale to teoretycy wymyślają algorytmy operowania na drzewach. Gdzie byłyby bazy danych gdyby nie opracowano algorytmów B-drzewa? Jak myślisz, kto pracuje np. w Oraclu nad rozwojem silnika? Na pewno nie programiści. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 4.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hawk @ 2005-02-07 08:51:08) No i co z tego? Drzewo naprawdę jest grafem, uwierz mi ![]() Można sobie narzekać, ale to teoretycy wymyślają algorytmy operowania na drzewach. Gdzie byłyby bazy danych gdyby nie opracowano algorytmów B-drzewa? Jak myślisz, kto pracuje np. w Oraclu nad rozwojem silnika? Na pewno nie programiści. doskonale o tym wiem że drzewo jest grafem, nie mam nic przeciwko algorytmom wręcz przeciwnie ![]() to jest cos w stylu : matematyk na uczelni nie umie dodawać , umie tylko całkować oczywiście po przeczytaniu paru grubych tomisk niektórzy popadaja w taki samozachwyt : "znam trudne słowa jestem więc mądry" keep it simple |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 0 Dołączył: 16.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jak myślisz, kto pracuje np. w Oraclu nad rozwojem silnika? Na pewno nie programiści. Maly OT: W Oraclu nie wiem jak jest, ale znam goscia, ktory pracuje nad DB/2. No i wyglada to tak, ze najpierw jakis doswiadczony projektant, zwykle doktor lub wyzej, wpada na jakis genialny pomysl wprowadzenia nowej optymalizacji. Pozniej daje sie ten pomysl zespolowi studentow i maja go ROZWINAC, ZAPROJEKTOWAC, ZAPROGRAMOWAC i PRZETESTOWAC. Jesli w testach wychodzi, ze dziala, to kod jest wlaczany do glownego strumienia projektu, do wersji komercyjnej. Jesli dziala slabo, to laduje na smietniku, a studenci robia inny kawalek kodu dla innego doktora... ![]() -------------------- Projekty: PLAY, optymalizator baz danych
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 945 Pomógł: 7 Dołączył: 15.03.2005 Skąd: katowice Ostrzeżenie: (0%) ![]() ![]() |
Wywołanie adresu : Wywołanie drzewka
Struktura bazy
w parametrze $c przenosiny Id kategori To tyle jeśli chodzi o drzewka Ten post edytował acztery 30.03.2005, 12:59:13 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
@acztery:
![]() |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 945 Pomógł: 7 Dołączył: 15.03.2005 Skąd: katowice Ostrzeżenie: (0%) ![]() ![]() |
nie kumam ? coś źle?
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
@acztery: sorry, nie mam czasu zgłębiać się w kod (troche nieczytelny) ale mam pytanie. Ile zapytań generuje "to coś" przy np. 1000 rekordów (1000 zagniezdzonych kategorii). Bo widze ze tam jakies zapytania w petli wywolujesz, co jest tragiczne przy duzych ilosciach danych :]
-------------------- |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 945 Pomógł: 7 Dołączył: 15.03.2005 Skąd: katowice Ostrzeżenie: (0%) ![]() ![]() |
zobacz jak działa w niegotowym jeszcze projekcie.. http://shop.acztery.info/index.php ( ok. 1300 rekordów )
Ten post edytował acztery 30.03.2005, 18:39:30 |
|
|
![]()
Post
#14
|
||
![]() Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 13.08.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
@acztery: bo przy takiej ilości wyświetlanych zagnieżdżeń(jedno) to to się sprawdza, ale jakbyś naprzykład, wyświetlał całe drzewko z all zagnieżdżeniami(i w tym wiele "odrostów") itp. to było by to kitu, rozwiązanie dobre ale tylko w szeczególny przypadku przynajmniej na mój chłopski rozum
![]() paps ![]() Ten post edytował darkspirit 30.03.2005, 19:59:39 -------------------- |
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 29.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ja znam 3 rodzaje drzewek:
1) wezel pamieta tylko id ojca (czyli to co podal lukier) liczba zapytan na wczytanie calego poddrzewa: tyle ile jego wysokosc liczba zapytan na aktualizacje: 1 rozmiar drzewa: O(n) - n liczba wezlow 2) pamietane sa polaczenia miedzy kazdym dzieckiem i kazdym jego przodkiem (tabelka: int id int parent, int odleglosc ) liczba zapytan na wczytanie calego poddrzewa: 1 liczba zapytan na aktualizacje: 1 rozmiar drzewa: O(n^2) 3)pamietane sa polaczenia miedzy kazdym dzieckiem i kazdym jego przodkiem, ale tylko takich ktorych odleglosc jest potega 2ki (tabelka: int id int parent, int odleglosc //tylko potegi 2 ) liczba zapytan na wczytanie calego poddrzewa: log h liczba zapytan na aktualizacje: log n rozmiar drzewa: O(n log n) Ten post edytował tarlandil 29.04.2005, 08:30:12 |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 216 Pomógł: 0 Dołączył: 9.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Tez mam problem ze struktura drzewiasta... Musze pomyslec spokojnie nad jakas metoda ktora pomoze w latwy sposob zapisac nowa galaz oraz latwo zmodyfikowac i wyswietlic cale drzewo. - Przejze notatki z Algorytmow
![]() |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 23.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
W moim przypadku trzymam drzewo w bazie stosując algorytm przedstawiony przez depesz.com. W php drzewo ma postać drzewa obiektów (dzięki skorzystaniu z _get i _set) tj.
Drzewko takie trzymam w bazie do każdego node'a podłączony jest obiekt (dowolny!) np. newsContainer to node newsy a news1 ma podwiązany obiekt klasy News. W bazie danych trzymam parametry oraz metodę jaką ma zostać zbudowany dany obiekt. Do obiektów podłączanych pod gałęzie dobieram się za pomocą metody getObject() np
I już mam obiekt danego newsa. Rozwiązanie takie jest bardzo elastyczne, ponieważ obiekt newsa nie ma pojęcia jakiej jest kategorii, o tym decyduje drzewo. Dany element contentu mogę trzymać w dowolnej gałęzi (a raczej referencję do niego). Takie drzewo trzymam zserializowane w pliku (oczywiście samo drzewo bez obiektów podwiązanych ![]() -------------------- Słyszałem, że macie tutaj jakieś takie php... fajne to, dobre to jest?
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 25.04.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Cytat(ebe @ 2005-04-29 16:54:57) jeśli w panelu zmienię coś w drzewie to nadpisuje plik i po kłopocie. Tutaj ujawnia się dla mnie dość istotna wada, mianowicie, nadpisujesz cały plik. Przy małych plikach i drzewach jest to niezauważalne, ale spróbuj serializować tablicę z 10 000 elementów. Przy czym zmieniasz tylko jeden z nich... Nie za duże obciążenie, dla tak małej zmiany? -------------------- r.
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 23.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Tutaj ujawnia się dla mnie dość istotna wada, mianowicie, nadpisujesz cały plik. Przy małych plikach i drzewach jest to niezauważalne, ale spróbuj serializować tablicę z 10 000 elementów. Przy czym zmieniasz tylko jeden z nich... Nie za duże obciążenie, dla tak małej zmiany? Masz rację jest to wada, pocieszeniem jest to, że taka aktualizacja - dodanie newsa, nowej kategorii jest wykonywana średnio kilka razy dziennie, pozatym narazie max to ok 1000 gałęzi i drzewko działa (na localhoście). Moja metoda jest jeszcze w powijakach i wymaga dopracowania, być może zrezygnuję z serializowania i deserializowania na rzecz klasycznego odczytu z bazy albo wymyślę coś innego. Jak tylko uporam się z problemami wydajności i uznam, że klasa jest gotowa zamieszczę na forum. -------------------- Słyszałem, że macie tutaj jakieś takie php... fajne to, dobre to jest?
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
System, którego używa acztery jest korzystny przy usuwaniu i uaktualnianiu rekordów. Tyle, że w świecie www o wiele częściej dane muszą być wyświetlone niż uaktualnione. Zajrzyj tutaj: http://www.sitepoint.com/article/1105 i zapoznaj się z drugim sposobem. Jest już mniej wygodny dla usuwania i update'owania, ale za to o wiele bardziej efektywny dla pobierania rekordów. Poza tym w sieci znajdziesz różne wariacje tej metody, która pozwoli na zwiększenie wydajności.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 18:59 |