Takže to má jinak a připouští duplicitu klíče, viz klíč '49'. Jak by z tohoto měl jít udělat distinct jinak, než poctivým traverzováním?
Myslím, že není potřeba diskusi zacyklovat. Už se to tu řešilo.
2) V minulém mailu jsem asi potřetí zopakoval usecase, na který je potřeba mít seznam všech štítků - ten usecase se reálně používá (mohu doložit). Jaká je Tvá reakce? Aniž bys ten usecase jakkoli rozporoval, tak napíšeš, todle.
To je usecase „aplikace něco neumí, je potřeba dát všechna data k dispozici uživateli, aby si to vyřešil v jiné aplikaci nebo ručně“. O tom už jsem psal, jako řešení jsem navrhoval napsat aplikaci, která bude řešit skutečné požadavky uživatele.
Seznam štítků je třeba pravidelně revidovat, protože jinak i v nejgeniálněji napsaném systému dřív nebo pozdějc někdo založí štítky
"novikny", "novinka" "novynka"....
Výborně, zadání máte, Tak si teď zkuste odpovědět na otázku: Kdo bude lepší v hledání duplicit ve stovkách štítků? Člověk, který bude číst jeden štítek za druhým, nebo počítač, který udělá podobnostní vyhledávání a nabídne uživateli: „Štítky novinky, novikny, novinka a novynka jsou podobné, chcete některé sloučit?“ Mimochodem, když pro přiřazování štítků použijete našeptávač, těchto případů bude existovat minimum, a nejspíš je někdo opraví daleko dřív, než by se k tomu dostal nějaký správce.
Prostě se smiř s tím, že indexy na tento typ úlohy nejsou dělané
Indexy na tento typ úlohy jsou dělané. Např. Lucene (NoSQL databáze pro fulltext) má speciální operátor „vrať mi všechny unikátní hodnoty daného atributu“. Ten operátor opravdu neposkytují proto, že by to byl snadný způsob, jak zatížit databázi. Poskytují ho proto, že je to často požadovaná funkce a je velmi snadné nad používaným indexem to implementovat.
V realitě jsou spellcheck algoritmy implementovány nikoli pomocí seznamu slov, ale pomocí generativních gramatik.
Ano, to je jedna z možných implementací. Ovšem co má společného s indexy? Vůbec nic. Takže jsem logicky psal o té další možné implementaci, kterou ve skutečnosti používá každý spellchecker, minimálně pro uživatelský slovník – o podobnostním vyhledávání v seznamu slov.
Víš, my nejsme teoretici, co evidentně v DB toho moc nenaprogramovali
No, pokud to programujete tak, že uživateli neposkytnete našeptávač štítků, protože ho neumíte udělat, a místo toho nutíte admina, aby se jednou za měsíc vypsal nestránkovaný seznam všech štítků a ručně tam hledal duplicity, pak upřímně lituju uživatele vašich aplikací.
Tvoje argumentace, že by to nějaká DB umět mohla.
Na argument Miroslava Šilhavého „nejde to“ je to validní protiargument. Pokud mi někdo bude argumentovat tím, že našeptávání štítků v aplikaci neudělá, protože to jeho databáze neumí, budu hledat jiný nástroj, který to umí. V tomto případě to dokonce bude ještě jednodušší, stačí dotyčnému vysvětlit, že ty databáze to umí, akorát musí použít správný typ indexu.
A Btw - ony good practices mají smysl. Uvědom si, kolik by si již při vývoji ztratil času - když sis vymyslel svoje "úžasné řešení", a teď zjišťoval, že ale vlastně B-Tree indexem to nejde indexovat.
Já jsem to nenavrhoval jako úžasné řešení, napsal jsem to jako příklad, který někdy může dávat smysl. Nepsal jsem nic takového, že to většinou bude nejlepší řešení, že to je best practice pro implementaci štítků, nic takového. Dostali jsem se k tomu v debatě o tom, jestli má JOIN popisovat strukturu získávaných dat, nebo jestli má kopírovat strukturu tabulek. Jenže místo abyste se drželi tématu debaty, tohle byla vítaná záminka jak odvést debatu jinam.
Mimochodem, s použitím B-Tree indexu pro indexování štítků jsem nepřišel já, ale vy. Já jsem jenom ukázal, že i ten B-Tree index pomůže i v té hloupé implementaci, kdy chcete seznam všech štítků, pokud ten seznam budete alespoň stránkovat. Ale vy trváte na tom, že když už uživatel musí používat vaši hloupou aplikaci, ať si to vyžere až do dna.
BUĎTO UKAŽ NA KONKRÉTNÍM ŘEŠENÍ V ROZUMNÉ DATABÁZI, ŽE TO JDE a ukaž nám, jak použít fulltext index na akceleraci výpisu šítků, anebo i jen na to tvoje našeptávání ANEBO PŘESTAŇ ŠÍŘIT BLUDY.
Nevím, jestli pořád ještě trváte na relační databázi. Tip pro to, jak vytvořit našeptávač se Solr (nadstavba nad Lucene) najdete třeba
zde. Relační databáze jsou ve vyhledávání textu tradičně slabší, ale dnes už většinou mají použitelné fulltextové indexy, které se na to dají použít. Zvlášť když štítků nejspíš budou stovky a ne desítky milionů.
Dobrej junior používá osvědčená řešení. Dobrej senior je schopen použít originální správná řešení, když ty osvědčená se z nějakého důvodu nehodí. Ale junior, který bez znalosti problematiky se vrhá do neprozkoumaných vod (mýdlo, z odpadků, ale skvost) je k nezaplacení (rozumněj, vyjde firmu pěkně draho).
Jenže v této diskusi je jiný problém. Že se někdo tváří jako expert, ale juniorovi doporučuje velmi nestandardní řešení – např. INNER JOIN psát pomocí OUTER JOINu + spojovací podmínky do WHERE (kterou navíc napíše špatně). Nebo se jako úplně normální prezentuje vypsat uživateli nestránkovaný seznam všech štítků, ať si v nich hledá duplicity očima.