BETA
My accountGet started
Dec 042023
CodeCon
5 min read

Od surových dát k užívateľovi: ako udržiavať a rýchlo sprístupniť stovky gigabajtov živých dát

Databáza FinStat.sk obsahuje dáta o stovkách tisícov slovenských spoločností a podnikateľských subjektov. Svojim klientom umožňuje prehliadať informácie rôzneho charakteru z desiatok dátových zdrojov.

Od surových dát k užívateľovi: ako udržiavať a rýchlo sprístupniť stovky gigabajtov živých dát

Databáza FinStat.sk obsahuje dáta o stovkách tisícov slovenských spoločností a podnikateľských subjektov. Svojim klientom umožňuje prehliadať informácie rôzneho charakteru z desiatok dátových zdrojov.

Okrem vyhľadávania, prehliadania a filtrovania v spoločnostiach poskytuje aj službu monitorovania, pri ktorej dostane užívateľ pri akejkoľvek zmene v spoločnostiach, o ktoré má záujem, informáciu mailom.

Spracovať takéto veľké množstvo rôznorodých zdrojov a udržať to všetko aktuálne a rýchle prináša rôzne špecifické výzvy. Poďme sa na tieto výzvy pozrieť.

Zo zdroja do databázy

Na počiatku každého dielika dátového puzzle o spoločnostiach sú surové dáta viacerých dátových zdrojov. Môže to byť obchodný register, obchodný vestník, register úpadcov, či zoznam neplatičov zdravotného poistenia.

Rôzne zdroje poskytujú dáta v rozličných formátoch. Často to bývajú strojovo spracovateľné formáty, ako napríklad XML, ale niekedy treba dáta dolovať z textov podaní, stránok, alebo dokonca PDF dokumentov.

Z tejto surovej formy sa dáta predspracujú do štruktúrovanej podoby a uložia do databázy. Pre rôzne prípady použitia existujú zabehnuté patterny ukladania dát: ak treba pridať k subjektu jednoduchú vlastnosť, môže ísť o jednoduché rozšírenie entity. Ak je vlastností viac, bude treba pridať nový komplexný dokument. Ak treba informácie evidovať historicky, takýto dokument musí podporovať historický formát, ktorý vedia spracovať ostatné systémy.

To všetko sa pri pravidelných importoch ukladá do databázy, ktorá postupným pridávaním dátových zdrojov a dát rastie na objeme.

Aktuálna veľkosť databázy je v stovkách gigabajtov dát, a rýchlosť rastu ani po rokoch neustáva.

Z primárneho úložiska do indexov

286976235-d0511001-2d6f-43f5-90fb-ba3c56827b3d.png

Použitá terminológia naznačuje, že na ukladanie dát sa nepoužíva SQL databáza, tabuľky, stĺpce a riadky, ale NoSQL databáza a dokumenty. V prípade FinStatu je to databáza RavenDB, ktorá okrem základných funkcionalít (uloženie dokumentu, načítanie dokumentu), poskytuje široké spektrum funkcionalít, ktoré sa v rôznej miere podieľajú na fungovaní celého projektu.

Jedným z najdôležitejších aspektov spracovania dát je indexácia. Aby bolo možné obsluhovať požiadavky užívateľov dostatočne rýchlo, je potrebné všetky relevantné dáta zduplikovať do indexov, ktoré umožňujú dostatočne rýchlo dáta filtrovať, zoraďovať a následne zobraziť užívateľovi.

Veľká väčšina dát je spracovaná pomocou vstavaných map-reduce indexov, ktoré dokážu zobrať dáta rôznych tvarov a veľkostí, a zosumarizovať ich podľa naprogramovanej logiky do jedného logického celku. Ako príklad poslúži dokument firmy so základnými registračnými údajmi, k nemu prislúchajúci osobitný dokument obsahujúci historické dlhy voči verejným inštitúciám, a ďalej množina ďalších dokumentov, ktoré obsahujú informácie o prebiehajúcom konkurznom konaní.

Map časť postupne načítava dokumenty všetkých zdrojových kolekcií, a tieto namapuje do spoločného tvaru. V reduce kroku sú tieto dáta agregované do skupín, typicky podľa identifikačného čísla spoločnosti.

Analógiou reduce v SQL svete je GROUP BY. Počas tejto agregácie sa môžu dáta spracúvať podľa potreby - pre dlhy sa spočíta celková suma dlhov, pre konkurzné konanie sa vyberie najrelevantnejší dátum začiatku a konca konania, spracuje sa zoznam veriteľov, atď.

286976278-ed214693-261b-42a4-9da0-851dbe91d0ce.png

Výsledkom sú zindexované dáta, nad ktorými je možné veľmi rýchlo a efektívne vyhľadávať, filtrovať a zoraďovať získané dáta.

Indexy potom v databázach FinStatu zaberajú približne dvojnásobné množstvo diskového priestoru oproti pôvodným dátam. Z celkovej veľkosti databázy viac ako 1 TB je to až 600 GB dát určených len pre indexy.

Ukladanie dát duplicitne a denormalizovane je v tomto prípade daňou za rýchlosť čítania, flexibilitu a možnosť škálovania.

Z databázy na obrazovku

Celý technologický stack FinStatu je postavený na .NET ekosystéme, a ten sa neustále vyvíja. Pravidelne investujeme čas do vývoja, aby sme aplikácie udržiavali na aktuálnych verziách frameworkov a knižníc. Nie je to nevyhnutná práca, odmenou za to ale je zvýšenie výkonu pri každej novej verzii. Okrem toho aj zlepšenie čitateľnosti a udržiateľnosti kódu pri využívaní noviniek, ktoré prináša jazyk a celé prostredie .NET.

Okrem hlavnej aplikácie webového portálu (ASP.NET Core) sa o funkčnosť stará plejáda importovacích a spracúvajúcich programov. Tiež aj niekoľko pomocných programov pre správu súčastí systému a odosielanie mailových notifikácií, ktoré nevyužívajú len NoSQL databázu RavenDB, ale aj klasické databázy MSSQL a PostgreSQL.

Produkčná infraštruktúra je kompletne hostovaná v Microsoft Azure, čo odstraňuje potrebu riešiť problémy, ktoré nesúvisia s doménou finančných a firemných dát, a priamo so spracovaním dát.

Ďalšie ciele

Okrem slovenského portálu FinStat.sk je aktuálne rozpracovaná česká verzia, ktorá má ambíciu spracovať otvorené dáta v Česku, a sprístupniť ich ľuďom podobným spôsobom, ako sa to podarilo na Slovensku.

Technologické výzvy sú aj tu podobné, a preto sú zvolené riešenia analógiou tých, ktoré sú úspešne použité na slovenskej verzii.

Firma FinStat ale nezostale len pri slovenských a českých dátach. V rámci expanzie na zahraničné trhy vznikol projekt HitHorizons.com, ktorého cieľom je poskytovať registračné dáta firiem v celoeurópskom meradle, a v budúcnosti možno celosvetovo. Dostupnosť dát v globálnom kontexte je rozdielna a aj rozsah dát je zásadne iný. Preto aj náš prístup bol k ich spracovaniu musel byť rozdielny.

Databáza obsahuje rádovo vyššie množstvo záznamov, čo je bohužiaľ vyvážené menším rozsahom dát o konkrétnom subjekte. V súhrne ide o ohromné množstvo dát, ktoré nás donútilo zmeniť spôsob ukladania dát, ako aj spôsob ich sprístupnenia zákazníkom. Zákazník dostáva do ruk nástroje, ktoré mu umožnia zorientovať sa v enormnom množstve dát a dostať sa k informáciám, ktoré potrebuje.

Nástroje zahŕňajú jednoduché vyhľadávanie a prezeranie subjektov, API pre integráciu do vlastných systémov, pokročilé nástroje na segmentáciu a analýzu trhu, ako aj niekoľko špecifických riešení pre riešenie konkrétnych problémov pri hromadnom alebo individuálnom prieskume spoločností.