abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 20:44 | Nová verze

    Svobodný a otevřený multiplatformní editor EPUB souborů Sigil (Wikipedie, GitHub) byl vydán ve verzi 2.5.0. Stejně tak doprovodný vizuální EPUB XHTML editor PageEdit (GitHub).

    Ladislav Hagara | Komentářů: 0
    včera 12:22 | IT novinky

    Na základě národního atribučního procesu vláda České republiky označila Čínskou lidovou republiku za zodpovědnou za škodlivou kybernetickou kampaň proti jedné z neutajovaných komunikačních sítí Ministerstva zahraničních věcí ČR. Tato škodlivá aktivita, která trvala od roku 2022 a zasáhla instituci zařazenou na seznam české kritické infrastruktury, byla provedena kyberšpionážní skupinou APT31, veřejně spojovanou se zpravodajskou službou Ministerstvo státní bezpečnosti (MSS).

    Ladislav Hagara | Komentářů: 16
    včera 00:11 | Nová verze

    Google Chrome 137 byl prohlášen za stabilní. Nejnovější stabilní verze 137.0.7151.55 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 11 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 1
    27.5. 19:22 | Nová verze

    Byl vydán AlmaLinux OS 10 s kódovým názvem Purple Lion. Podrobnosti v poznámkách k vydání. Na rozdíl od Red Hat Enterprise Linuxu 10 nadále podporuje x86-64-v2.

    Ladislav Hagara | Komentářů: 1
    27.5. 15:11 | Nová verze

    Byl vydán Mozilla Firefox 139.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 139 je již k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 8
    27.5. 10:44 | Komunita

    Byly publikovány výsledky průzkumu mezi uživateli Blenderu uskutečněného v říjnu 2024. Zúčastnilo se více než 7000 uživatelů. Téměř 93 % z nich například používá uživatelské rozhraní v angličtině.

    Ladislav Hagara | Komentářů: 17
    26.5. 23:55 | Zajímavý článek

    Lukáš Růžička v článku RamaLama aneb vyháníme lamy na vlastní louku na MojeFedora.cz představuje open source nástroj RamaLama umožňující spouštět jazykové modely v izolovaných OCI kontejnerech, a to bezpečně, bez potřeby mít root přístup k počítači, s podporou GPU či CPU a bez zbytečných obtížností kolem.

    Ladislav Hagara | Komentářů: 2
    26.5. 22:55 | Nová verze

    Byl vydán Sublime Text 4 Build 4200. Sublime Text (Wikipedie) je proprietární multiplatformní editor textových souborů a zdrojových kódů. Ke stažení a k vyzkoušení je zdarma. Pro další používání je nutná licence v ceně 99 dolarů. Spolu se Sublime Merge je cena 168 dolarů.

    Ladislav Hagara | Komentářů: 0
    26.5. 18:00 | Nová verze

    Multiplatformní open source voxelový herní engine Luanti byl vydán ve verzi 5.12.0. Podrobný přehled novinek v changelogu. Původně se jedná o Minecraftem inspirovaný Minetest v říjnu loňského roku přejmenovaný na Luanti.

    Ladislav Hagara | Komentářů: 0
    26.5. 16:11 | Nová verze

    Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 25.5. Přehled novinek v Changelogu.

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (55%)
     (31%)
     (8%)
     (3%)
     (0%)
     (0%)
     (3%)
    Celkem 149 hlasů
     Komentářů: 12, poslední včera 18:42
    Rozcestník

    Ako (ne)používať stromy v djangu

    4.5.2018 10:38 | Přečteno: 1634× | Programovanie | poslední úprava: 18.5.2019 18:37

    Existuje mnoho knižníc pre django, ktoré riešia ukladanie stromov do relačnej databázy. Najpoužívanejšie sú django-mptt a django-treebeard. Doteraz som vždy používal django-mptt. Keď django-cms prešlo z mptt na treebeard rozhodol som sa, že začnem používat treebeard aj ja.

    Prehľad spôsobu uloženia

    django-mptt

    Táto knižnica používa pre uloženie stromu 5 polí. Konrétne je to parent_id, lft, rght, level, a tree_id. Podrobne vysvetlený význam atribútov lft a rght je v tomto blogu. Výber podstromov, rodičov, ciest ... je pri tomto type stromu veľmi elegantný. Na druhej strane modifikácia stromu je dosť zložitá.

    djang-treebeard

    Treebeard implementuje niekoľko spôsobov uloženia stromu. Pozrime sa na preferovaný teda materialized path. V tabuľke nám pribudnú polia path, depth a numchild. Cesta sa skladá z ascii znakov, ktoré sa líšia v závislosti od použitej databázy. Cesty teda vyzerajú takto: 0000 (prvá položka), 0001 (druhá položka), 00010000 (prvý potomok druhej položky). Výbery sa uskutočňujú pomocou operátora LIKE. Inserty môžu vyžadovať prepísanie značnej časti ciest ak sa uskutočňujú blízko koreňa v hornej časti stromu. Vkladanie hlboko do stromu je pomerne rýchle.

    Skúsenosti

    S django-mptt pracujem dlho. Je to odskúšaná, stabilná, dobre zdokumentovaná knižnica. Na problémy s výkonom som ja osobne nenarazil, ale nerobím nič tak náročné, kde by sa to malo prejaviť. V dokumentácii je upozornenie na nutnosť obaliť operácie do transakcie (treba na to dávať pozor inak sa budú diať zlé veci).

    Dokumentácia django-treebeard mi neprišla ktovie ako užitočná. V čase písania blogu bola neaktuálna a nereflektovala zmeny v zdrojových kódoch, takže som väčšinou skončil pri čítaní zdrojových kódov namiesto dokumentácie.

    Prvý závažný problém, na ktorý som pri django-treebeard narazil na produkčnom serveri bolo zoradenie. Totiž používali sme slovenské texty a databáza mala nastavená collation na slovenčinu. Tá má však také špecifiká ako "CH", takže sa zoradenie podľa path rozbilo na prvý pohľad nepochopiteľným spôsobom. Varujem teda všetkých, ktorí by chceli použíavať django-treebeard - skontrolujte si na serveri collation pre stĺpec path, v prípade potreby ho zmnňte (ALTER TABLE tabulka ALTER path TYPE character varying(255) COLLATE "C"; v postgrese).

    API django-treebeard je podľa mňa miestami obskurné, miestami nepoužiteľné a miestami oboje. Ako príklad uvediem rendervoanie stromu v šablóne - django-treebeard. Atribút close je pekne obskurný a ako bonus obsahuje čísla 0..n (teda nie level ktorý daný záznam zatvára). Vďaka tomu nie je možné napríklad vyrenderovať strom, ktorý by mal v druhej úrovni trochu inú štruktúru než v prvej. Pre titeto prípady som si musel napísať filter, ktorý do close doplní level.

    @register.filter_tag
    def add_level(items):
        for __, info in items:
            info['close'] = [info['level'] - c for c in info['close']]
        return items

    Pre porovnanie django-mptt to má vyriešené pomocou tagu recurstree, takže nie je potrebné nič dohackovať.

    Ďalej som dnes zistil, že django-treebeard nie je schopný vyrenderovať formulár s vlastným layoutom (to fakt nikto za tú dobu nepotreboval?), pri zobrazení formulára generuje cez 10 000 selectov (ah hlanve, že sa autor chváli benchmarkami) ...

    Moje odporúčanie teda znie - kašlite na to, čo je práve populárne. Používajte radšej to, čo je dobré. Ja zatiaľ skúsim pretlačiť pár svojich úprav do django-treebeard ;)

           

    Hodnocení: 100 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    Josef Kufner avatar 4.5.2018 14:03 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Ako (ne)používať stromy v djangu
    Stromy v SQL databázi pomocí Nested Sets (parent_id, tree_left, tree_right, tree_depth, a tree_root_id) používám dlouho a funguje to skvěle. Není to stavěné na časté vkládání a modifikace obecně, ale jinak to je velice elegantní a praktický způsob uložení stromu, který umožňuje jedním selectem vytáhnout cokoliv je potřeba – podstrom, všechny rodiče ke kořeni, potomky, sousedy.

    Teoreticky sice stačí jen left a right, ale je robustnější používat primárně parent_id, na kterém není co zkazit, a ty ostatní 4 hodnoty si dopočítat. Hloubka se hodí pro jednodušší vykreslování stromu. ID kořene pak umožní optimalizovat aktualizace left a right při úpravách stromu (pokud je v DB mnoho malých stromů je pak rychle, neboť se přepočítá jen jeden).
    Hello world ! Segmentation fault (core dumped)
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.