Portál AbcLinuxu, 1. května 2025 14:10

Návrh pre abclinuxu.cz

31.10.2006 11:08 | Přečteno: 2333×

Malý návrh pre tvorcov tohoto servera :-) (Java bŕŕ, tak aspoň takto)

Príspevky

Jedna tabuľka pre všetky príspevky:
Entry
 - id, int4, autoincrement, primary key)
 - parent, reference Entry, default null
 - type, reference EntryType,
 - account, reference Uzivatel, default null
 - anonym, text, default null
 - time_insert, time,
 - time_modify, time,
 - time_deploy, time, default null,
 - status, reference EntryStatus
 - subject, text, default null
 - uvod, text, default null
 - content, text, default null
parent ... nadradený príspevok, null pre root Entry

Tabuľka stromu:

EntryTree
 - id
 - ancestor, reference Entry
 - descendant, reference Entry
 - depth, int

index (ancestor)
index (descendant)
vytvorenie nového Entry
entry = new Entry;
"insert into entry_tree (ancestor, descendant, depth)
   select select ancestor, entry.id, depth + 1
   from entry_tree
   where descendant = entry.parent
"
"insert into entry_tree (ancestor, descendant, depth)
    values (entry.id, entry.id, 0)
"
Vysvetlenie:
EntryTree sleduje všetky cesty v strome (a ich dĺžku), ak ich budeme považovať za jednosmerné.
Príklady:
celý podstrom zadaného rootid:
select A.descendant parent, B.descendant child
  from tree_node_path A, tree_node_path B
 where A.ancestor = rootid
   and A.descendant = B.ancestor
   and B.depth = 1
 order by parent, child
pri predpoklade, že Entry.id je trvale rastúce, môžeme strom budovať:
map[rootid] = new Entry (rootid);
while ((parent, child) = fetch_row) {
  map[parent].add_child (child);
  map[child] = new Entry (child);
}
map je asociatívne pole

výber cesty po leafid:

select ancestor
  from entry_tree
 where descendant = leafid
 order by depth asc
Entry je každý príspevok (článok, správička, blog, komentár, ako i napr "sekcia hardware" alebo "sekcia "Software/alternatívy").
Výhody:
užívateľ si môže nastaviť sledovanie ľubovoľného stromu (napr i časti diskusie).

Entry::Status
enumerácia s hodnotami NEW, ENABLED, LOCKED, DELETED

Entry::Type
typ príspevku, enumerácia napr: ARTICLE, NEWS, COMMENT, BLOG, CATEGORY, POLL

Sledovanie

AccountWatch
 - id
 - account, reference Account (uzivatel)
 - entry, reference Entry
Výber prihlásených pri vložení príspevku (resp pri jeho publikovaní):
entry = new Entry;

select account
  from account_watch, entry_tree
 where account.entry = entry_tree.ancestor
   and entry_tree.descendant = entry.id

Posielanie mailov

Navrhoval by som vypĺňať hlavičku In-Reply-To a Message-ID. In-Reply-To podľa entry.parent (ak nie je null), Message-ID podľa entry.id. Postačovať by mal tvar 1234watch@abclinuxu.cz

V prípade záujmu môžem pokračovať návrhom systému hodnotenia príspevkov.        

Hodnocení: 67 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

31.10.2006 18:48 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Odpovědět | Sbalit | Link | Blokovat | Admin
Možná jsem nepochopil ten fígl, ale Abíčko data do databáze ukládá ve stromové struktuře – tj. jsou jednotlivé entity a ty mají mezi sebou vztahy rodič – potomci. Viz stránku se zdrojáky, kde je odkaz na články o datové struktuře i samotný SQL dump.
31.10.2006 19:39 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
ak máte na mysli stĺpec data, je to niečo magické, nad ktorými sa potom nedajú robiť databázové operácie, nedá sa na ne odkazovať, ich update znamená cyklus decode-encode.
Zdrojáky som si samozrejme prešiel, preto som tento návrh napísal. :-)
31.10.2006 20:00 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
V odkazovaných článcích Leoš popisoval, proč se rozhodl použít zrovna tenhle způsob. Je to taková simulace skoro-XML databáze nad relační databází. Pokud by se s tím mělo hýbat, tak jsou asi jen dvě možnosti: opravdová XML databáze (a je otázka, zda dnes existuje taková, které by bylo možné svěřit data Abíčka), nebo klasická relační databáze, kde bude jedna tabulka pro články, jedna pro komentáře atd. Nevidím žádný přínos toho rozšiřovat tabulku Entry o sloupce, které se někdy použijí a jindy ne a jindy stejně nebudou stačit…

Nechci odmítat cokoliv jiného (ostatně já jsem tu databázi nenavrhoval a databáze navrhuji jiným stylem), ale nevidím mezi vaším návrhem a současným stavem prakticky žádný rozdíl.
31.10.2006 20:23 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
zjednotenie všetkých typov do jednej tabuľky umožňuje použiť na každý typ rovnaké operácie, napríklad hodnotenie, komentovanie, sledovanie (napr sledovanie časti diskusie, alebo časti diskusie). Pri pridaní nového typu, tento zdedí túto funkcionalitu. To by zabezpečila tabuľka
EntryWatch
 - id
 - account
 - entry
Rozšírenie tabuľky Entry o null-able stĺpce je z dôvodu spätného selectu, napr. pri funkcii "čo sa napísalo v označených/navštívených Entry, odkedy som tu nebol", tabuľky EntryMark, EntrySeen (rovnaké ako EntryWatch).

Rozdiel je jednoznačný, súčastný stav funguje :-D

31.10.2006 20:30 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Aha :-) Takže to celé by umožnilo označovat zprávičky, články, zápisy v blogu a záznamy v HW a SW od mé poslední návštěvy? To mi dělá RSS :-)
31.10.2006 20:43 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
nielen, platí to pre ľubovoľný Entry.
Rozdiel je v jednom: ak by malo existovať ekvivalentné RSS, muselo by existovať pre každé Entry.
Josef Kufner avatar 31.10.2006 18:52 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Odpovědět | Sbalit | Link | Blokovat | Admin
Stromy je výhodnější vylepšit o sloupce left a right. Které budou obsahovat taková podivná čísílka. Pak totiž stačí na vykreslení celého stromu jeden jediný select. Také sečtení přečtených nepřečtených příspěvků na titulní stránce je pak o jednom joinu a group by. A aby nebyly ztráty výkonu při přidávání příspěvků tak velké, stačí mít ještě u každého uloženo id stromu (diskuze), takže update běží jen na relativně malém množství záznamů.
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 31.10.2006 18:57 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
A pokud to chce někdo vidět hotové, tak tohle to používá.
Hello world ! Segmentation fault (core dumped)
31.10.2006 19:34 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
left-right má dosť vysokú réžiu na rebuild stromu pri pridaní, ktorá zároveň musí byť atomická.
Josef Kufner avatar 1.11.2006 00:06 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Ve srovnání s rekurzivním procházením stromu při každém zobrazení to i tak vyjde výrazně lépe.
Hello world ! Segmentation fault (core dumped)
31.10.2006 21:35 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Proč Atlantis ?
Quando omni flunkus moritati
Josef Kufner avatar 1.11.2006 00:00 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Mě se neptej, tuhle část názvu jsem převzal.
Hello world ! Segmentation fault (core dumped)
31.10.2006 20:00 Pavel 'lingeek' Szalbot | skóre: 54 | Třinec
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Psal jsem tu o tom článek...
Math, as Barbie says, is hard.
Josef Kufner avatar 1.11.2006 00:03 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
A nechceš napsat ještě nějaký? Tohle se děsně blbě hledá... ;-)
Hello world ! Segmentation fault (core dumped)
1.11.2006 08:34 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Stromy v SQL

Hint: kliknout na jméno autora komentáře a pak na "Seznam příspěvků na abclinuxu.cz" :-)
Josef Kufner avatar 1.11.2006 17:30 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
O tom jednom vím (došel jsem k němu včera tou cestou co píšeš), právě proto říkám, že by byl fajn ještě nějaký další.

Teda, že mi někdo z redakce bude rozmlouvat výzvu k napsání článku, jsem fakt nečekal :-D
Hello world ! Segmentation fault (core dumped)
1.11.2006 09:39 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Odpovědět | Sbalit | Link | Blokovat | Admin
Diky za snahu, ale na zasadni zmeny backendu je pozde asi tak o 6 let. ;-)

Rekurzivni monitory mam v planu, jsou i v bugzille a pujdou udelat relativne snadno i v soucasnem modelu. Akorat mi jeste neni jasne, jak bych udelal sledovani vlaken v diskusi, nicmene sledovani na urovni celych objektu bude snadne.

Jenze nasledne bude vhodne udelat i dalsi zpusoby informovani o novych udalostech. Ted kdyz si date sledovat nejaky flamewar, muzete za hodinu dostat desitky emailu. Pri rekurzivni sledovani muzete dostavat stovky mailu za den. Proto je treba napsat alternativy k InstantSender, napriklad BatchSender (poslat souhrnny email jednou za den) nebo InternalMessageBox (ukladani zprav do abicka, neco jako Mate 4 nove zpravy, dalo by se zobecnit i pro posilani zprav mezi uzivateli, kteri nemaji platnou emailovou adresu).
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
1.11.2006 18:22 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
hmm, abc instant message ? :-)
Nebude jednoduchšie import/export cez jabeer, nntp ?

čo sa týka emailov a flame ... podľa mňa stačí správne vypĺňať hlavičku, aby sa správy zgrupovali. V mailing listoch sa bežne stáva veľa mailov za den.

1.11.2006 21:48 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Pokud vim, tak hlavicku vyplnujeme spravne a vlakna v pohode funguji. Nicmene na kazdemu se libi, kdyz mu dorazi behem kratke doby par desitek emailu a s tim podpora vlaken nema zadnou souvislost ;-) NNTP podporujeme uz davno pres gmane.org, viz stranka diskusniho fora. XMPP nekdo zadal, muze to byt dalsi alternativni implementace InstantSenderu. AbcInstant message nebude, mel jsem na mysli jen schranku se vzkazy, nekdo to po mne z adminu nedavno chtel, ze by to preferoval misto emailu.
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
Josef Kufner avatar 2.11.2006 13:13 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Návrh pre abclinuxu.cz
Tak ať si ten někdo pořídí ke své schránce webmail ;-)
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.