Soovitan tutvuda 2017. aasta aruande tõlgendusega, autor Igor Strychar „ClickHouse – visuaalselt kiire ja selge andmeanalüüs Tabixis”.
Veebiliides ClickHouse'ile projektis Tabix.
Põhifunktsioonid:
- Töötab ClickHouse'iga otse brauserist, ilma et oleks vajalik täiendava tarkvara installation;
- Küsimuste redaktor süntaksi esiletõstmisega;
- Käskude automaatne täiendamine;
- Graafilise analüüsi tööriistad päringute täitmise kohta;
- Valitavad värviskeemid.



Olen tehniline direktor СМИ2. Oleme uudiste vahetuse agregaat. Meie salvestame palju andmeid, mille saame oma partneritelt ja registreerime need ClickHouse'is – ligi 30 000 päringut sekundis.
Need andmed on näiteks:
- Uudiste klikkide arv.
- Uudiste näitamised agregaatis.
- Reklaamide näitamised meie võrgustikus.
- Ja registreerime sündmusi meie enda loendurist, mis on sarnane Yandex.Metrika’le. See on meie enda mikroanalüütika.

Meie elu ClickHouse'ile eelnenud ajal oli väga tormiline. Me põdesime suurel määral, püüdes need andmed kuhugi paigutada ja neid analüüsida.
Elu enne ClickHouse'i — infiniDB
Esimene, mis meil oli, oli infiniDB. See oli meil neli aastat. Käivitasime selle suure vaevaga.
- See ei toeta klasterdamist ega shardimist. Ei ole mingeid selliseid „tarku asju”, mis oleks vaikimisi sisse lülitatud.
- Talon andmete laadimises. Ainult spetsiifiline konsooli utiliit, mis suutis laadida ainult CSV-faile ja seda väga segaselt.
- Andmebaas on ühe niidiotsaga. Võimalik oli kas kirjutada või lugeda. Kuid see võimaldas töödelda suurt andmehulka.
- Ja sellel oli ka huvitav lahendus. Iga öö pidi serverit taaskäivitama, muidu see ei töötanud.
See töötas meil kuni 2016. aasta lõpuni, mil me täielikult ClickHouse'ile üle läksime.
Elu enne ClickHouse'i — Cassandra
Kuna infiniDB oli ühe niidiotsaga, otsustasime, et vajame mingit mitme niidiotsaga andmebaasi, kuhu saame kirjutada väga palju üheaegselt.
Proovisime palju huvitavaid asju. Siis otsustasime proovida Cassandra't. Cassandra'ga oli meil kõik hästi. 10 000 päringut sekundi kohta kirjutamisel. 2 000 päringut kusagil lugemisel.
Aga ka sellel olid omad huvitavad omadused. Korra kuus või kaks kuus juhtus andmebaasi desünkroniseerumine. Ja tuli ärgata ja kiiresti Cassandra'd parandama. Taaskäivitasime servereid järjekorras. Ja kõik muutus sujuvaks ja ilusaks.
Elu enne ClickHouse – Druid
Siis mõistsime, et peame veel rohkem andmeid kirjutama. 2016. aastal hakkasime Druidile vaatama.
Druid on avatud andmebaas, mis on kirjutatud Java keeles. Väga spetsiifiline. See sobis clickstream’ile, kui pidime salvestama mingit sündmuste voogu ja seejärel nende põhjal aggregatsioonima või analüütilisi aruandeid tegema.
Druidil oli versioon 0.9.X.
Andmebaasi üles seadmine iseenesest on väga keeruline. See on infrastruktuuri keerukus. Selle seadmiseks tuli paigaldada palju-ja palju riistvara. Iga riistvara vastutas oma eraldi rolli eest.
Andmete sinna laadimiseks tuli rakendada mingit šamanismi. On OpenSource projekt – Tranquility, mis voos kaotas meilt andmeid. Kui me laadisime sinna andmeid, siis ta kaotas neid.
Kuid mingil moel hakkasime seda rakendama. Me olime nagu siilid, kes end torkavad, aga jätkavad kaktuse söömist, hakkasime seda rakendama. Me vajasime umbes kuud, et kogu infrastruktuur selle jaoks ette valmistada. Ehk tellida serverid, seadistada rollid, teostada täielik automatiseerimine ülesseadmise puhul. Ehk, kui klaster kukub, et automaatselt üles seataks teine klaster.

Aga siis juhtus ime. Olin puhkusel ja mu kolleegid saatsid mulle lingi , kus räägiti, et Yandex otsustas avada ClickHouse’i. Ma ütlesin, et proovime.
Ja ainult 2 päeva jooksul seadsime üles testklastri ClickHouse. Hakkasime andmeid sinna laadima. Võrreldes infiniDB-ga – see on elementaarne, võrreldes Druidiga – see on elementaarne. Võrreldes Cassandra’ga ka elementaarne. Sest kui php-st Cassandra’sse andmeid laadida, siis see ei ole elementaarne.

Mida me saime? Suurenenud jõudlus kiirusest. Suurenenud jõudlus andmete salvestamisest. Ehk kasutatakse märkimisväärselt vähem kettaruumi. ClickHouse on kiire, see on teiste toodetega võrreldes väga kiire.

Käivitamise hetkel, kui Yandex avaldas ClickHouse’i OpenSource’is, oli ainult konsooliklient. Meie ettevõttes СМИ2 otsustasime proovida teha natiivset klienti veebis, et saaks brauserist avada lehe, kirjutada päringu ja saada tulemus, sest me hakkasime palju päringuid kirjutama. Kirjutamine konsoolis on keeruline. Ja me tegime oma esimese versiooni.

Ja kusagil eelmise aasta talve lähedal hakkasid ilmuma kolmandate osapoolte tööriistad ClickHouse’iga töötamiseks. Sellised tööriistad nagu:
- .
- .
- . (Nüüd )
- .
- .
Vaatan mõningaid neist tööriistadest, st neid, millega ma olen töötanud.

Hea tööriist, kuid Druidile. Kui Druidit juurutati, siis ma proovisin SuperSeti. See meeldis mulle. Druidile töötab see väga kiiresti.
ClickHouse'i jaoks ei sobi. St. see sobib, see töötab, aga suudab töödelda ainult elementaarseid päringuid nagu: SELECT event, GROUP BY event. See ei toeta keerukamat ClickHouse'i süntaksit.

Järgmine tööriist on Apache Zeppelin. See on hea ja huvitav asi. Töötab. Toetab märkmikke, juhtpaneele, toetab muutujaid. Tean, et mõni ClickHouse'i kogukonnast kasutab seda.
Kuid ClickHouse'i süntaksit ei toeta, st. päringud tuleb kirjutada kas konsoolis või kuskil mujal. Edasi peab kontrollima, et kõik see töötab. See on lihtsalt ebamugav. Kuid juhtpaneelite tugi on tal hea.

Järgmine tööriist on Redash.IO. Redash on internetis hostitud. St. erinevalt eelmistest tööriistadest ei pea seda installima. Ja see on selline juhtpaneel, mis võimaldab andmete konsolideerimist erinevatest andmeallikatest. St. saate eksportida ClickHouse'ist, MySQL'ist, PostgreSQL'ist ja muudest andmebaasidest.

Tõeliselt kuu aega tagasi (märtsis 2017) ilmus Grafana tugi. Kui ehitate aruandeid Grafanas, näiteks oma riistvara seisundi või mõnede mõõdikute kohta, siis nüüd on võimalik koostada sama graafik või mõni paneel ClickHouse'i andmete põhjal otse. See on väga mugav, ja me kasutame seda enda juures. See aitab leida anomaaliaid. St. kui midagi juhtub ja mõni riistvara kukub või pinge tõuseb, siis saab vaadata põhjust, kui need andmed on ClickHouse'i jõudnud.

Mul oli nende tööriistade või konsooli kasutamine väga ebamugav. Ja otsustasin täiendada meie esimest liidest. Ja piilusin ideed EventSQL, SeperSet'i, Zeppelin'i juurest.

Mida soovis? Soovisime saada graafikud, täiustatud redaktori, rakendada sõnastike jaotuse toetust. Sest ClickHouse'il on suurepärane funktsioon – need on sõnastikud. Kuid sõnastikega on keeruline töötada, sest tuleb mäletada salvestatud väärtuste formaati, st. kas see on number või string jne. Kuna me kasutame sageli sõnastikke nende erinevates variatsioonides, siis oli päringute kirjutamine piisavalt keeruline.

Kolm kuud on möödunud meie esimese versiooni väljalaskmisest. Olen teinud umbes 330 commit'i suletud harusse ja valminud on Tabix.
Erinevalt eelmisest versioonist, mis kandis nime ClickHouse-Frontend, otsustasin ma anda sellele lihtsama nime. Nii sündis Tabix.
Mis on uut?
Joonistab graafikuid. Toetab ClickHouse'i SQL süntaksit. Annavad vihjeid funktsioonide osas ja palju muud huvitavat oskab teha.

Nii näeb välja Tabix'i üldskeem. Vasakul on puu. Keskosas – see on päringuredaktor. Ja allpool – see on selle päringu tulemus.

Edasi näitan, kuidas päringuredaktor töötab.

Siin töötab automaatne täiendamine tabeliga ja pakub vastavalt välja täiendust. Ja vihjed funktsioonidele. Kui vajutad ctrl ja sisestada, siis päring täidetakse või läheb vea peale. Lihtsaim päring saadetakse Tabix'ile ja saadakse tulemus, st on kiire töötada ClickHouse'iga.

Sõnastikud, nagu juba ütlesin, on väga huvitav asi, millega me palju töötame. Ja see on võimaldanud teha palju asju. Näiteks, sõnastikes salvestame kõik linnad. Salvestame linna identifikaatori ja linna nime, selle laius- ja pikkuskraadid. Ja andmebaasis salvestame ainult linna identifikaatori. Seega, me komprimeerime andmeid väga palju.

See võib tunduda lihtne asi, kuid ClickHouse'is aitab see väga huvitavalt. Kuna ClickHouse toetab ainult pesastatud join'e, venib päring allapoole ja laiemaks väga tugevalt. Ja kui sulg avatakse ning mõni pikk väljend käib, siis selline, tundub lihtne asi nagu päringu kokkukokkutõmbamine aitab lihtsamalt ise päringuga töötada. Sest kui päring on 200-300 rida pikk ja laiuselt väga ulatuslik, siis päringu kokkukokkutõmbamine päästab tõeliselt ning hiljem on lihtsam leida mõni koht või lokaliseerida seda.
Objektide puu, mitme päringuga ja vahekaartidega (Video 13:46) )

Järgmisteks näitan puu ja vahekaartide kohta. Vasakul – see on puu, ülal on mitu vahekaartide loomise võimalust. Vahekaart – see on nagu tööruum. Sa saad luua mitu vahekaart ja igasuguseid neid omamoodi nimetada. See on nagu mini-süsteem aruande koostamiseks.
Vahekaartide salvestamine toimub automaatselt. Kui sa värskendad brauserit, sulged või avad Tabix'i, siis kõik see salvestub.
Kuumad klahvid – mugavad (Video 14:39) )
On kuumad klahvid ja neid on piisavalt palju. Olen siia mõned neist välja toonud näitena. Need on vahekaartide vahetus, päringu täitmine või mitme päringu täitmine.

Näitan, kuidas tulemusega töötada. Saame päringu ja siia joonistan sin, cos ja tg. Saame välja tuua tulemuse, st joonistada tüüpiline kaart veerule. Saame rõhutada positiivseid või negatiivseid väärtusi. Või lihtsalt värvida mõnda konkreetset tabelielementi. See on mugav, kui tabel on tohutu ja peab silmadega leidma mingi anomaalia. Kui ma otsisin anomaaliaid, rõhutasin mõnda rida, mõnda elementi rohelise või punase värviga.

Seal on palju huvitavaid asju. Näiteks, kuidas kopeerida Redmine'i Markdowni. Kui on vaja kuskile tulemust kopeerida, on see väga mugav. Saame lihtsalt ala välja valida, öelda 'Kopeeri Redmine'i' ja see kopeerib Redmine'i Markdowni või loob päringu Where.

Edasi - päringute optimiseerimine. Ühel korral unustasin märkida välja 'date'. Ja mu päring ClickHouse'is töötles andmeid mitte väga-väga kiiresti, vaid kiiresti, st vähem kui sekundiga. Kui ma nägin, kui palju ridu ta töötleb, siis ehmatasin. Me kirjutame ühe päevaga nii palju ridu sellesse tabelisse. Hakkasin päringut analüüsima ja nägin, et üksikasjalikult kuupäeva mainimist ei olnud. St unustasin märkida, et andmed on vajalikud mitte kogu tabeli kohta, vaid mingi konkreetse perioodi kohta.
Tabixis on vahekaart 'Stats', kus hoitakse kogu saadetud päringute ajalugu, st seal saab vaadata, kui palju ridu selle päringuga on loetud ja kui kaua see kestis. See võimaldab optimeerida.
Päringu tulemuste põhjal saab koostada kokkuvõtete tabeli. Saatsite päringu ClickHouse'i, said mingid andmed. Ja siis saab neid andmeid hiirega liigutada ja koostada mingi kokkuvõtete tabeli.

Järgmine huvitav asi on graafikute koostamine. Oletame, et meil on selline päring: sin, cos vahemikus 0 kuni 299. Ja selle joonistamiseks tuleb valida vahekaart 'Joonista' ja saate oma sin ja cos graafiku.

Seda saab jagada erinevateks telgedeks, st saab joonistada korraga kaks graafikut kõrvuti. Kirjutada ühe käsu ja teise käsu.

Saame joonistada histogramme.

Saame jagada see graafikute maatriksiks.

Saame koostada soojuskaardi.

Saame koostada soojuskalendri. Muide, see on väga mugav asi, kui on vaja analüüsida anomaaliaid aasta jooksul, st leida kas tõusud või langused. See andmete visualiseerimine aitas mind selles.

Järgmine on Treemap.


Sankeys – huvitav graafik. See on kas Streamgraphs või River. Kuid ma kutsun seda Riveriks. See võimaldab samuti otsida teatud anomaaliaid. See on väga mugav. Soovitan seda kasutada otsimiseks.

Järgmine huvitav asi on dünaamilise kaardi joonistamine. Kui teie andmebaasis on talletatud laiuskraad, pikkuskraad ja näiteks sihtkoht, näiteks kui teil on autoveod või lennukid, siis saab joonistada sihtkohtade teid. Samuti on võimalik määrata objektide kiirus ja suurus, kuhu nad maanduvad.
Kuid selle kaardi probleem on see, et see joonistab ainult maailma kaardi, puudub detailitus.

Hiljem lisasin Google'i kaardi. Kui te salvestate laiuskraadi ja pikkuskraadi, siis saab tulemuse joonistada Google'i kaardile, kuid ilma lennukite toeta.
Olulised funktsioonid, millega töötada tulemuste ja päringuga Tabix'ist, oleme arutanud.

Järgmine on teie ClickHouse serveri analüüs. On eraldi vahekaart „Mõõdikud“, kus saab vaadata, kui suur on talletatud teave igas veerus. Ekraanipildil on näha, et see väli „referrer“ võtab umbes 730 Gb. Kui me loobume sellest väljast, säästame kolm shardi, igaüks 700 GB, st kokku umbes 2 TB, mis on meile üleliigne.
Meil on ka väli „request_id“, mille salvestame stringina. Kuid kui me hakkame seda salvestama numbriliselt, siis vähendab see väljade suurust oluliselt.
Siin on näidatud serveri konfiguratsioon ja teie klastri node'id.

Järgmine vahekaart on mõõdikud. Need võtavad reaalajas andmeid ClickHouse'ist ja võimaldavad lihtsalt analüüsida serveri seisundit ning mõista, mis sellega juhtub. See ei asenda täit Grafanat. See on vajalik kiireks analüüsiks.

Järgmine vahekaart on protsessid. Nende kaudu saab aru, mis serveris toimub. Aru saada, mis seal toimub. Mul oli päring, mis söönud 200 GB lugemiseks iga kord. Nägin seda tänu sellele liidesele. Leidsin selle ja kohandasin. Ja tulemuseks on umbes 30 GB, st jõudlus on mitmeid kordi paranenud.

Aitäh! Ja see on OpenSource.
Ma lõpetasin. Ja muide, see on OpenSource, tasuta ja ei vajata isegi allalaadimist. Avage oma brauser ja kõik töötab.
Küsimused
Igor, mis edasi? Kuhu sa kavatseme seda tööriista arendada?
Edasi ilmub armatuurlaud, st tõenäoliselt ilmub armatuurlaud. Integreerimine teiste andmebaasidega. Selle tegin ma, aga ei ole veel open source'is avaldanud. See on MySQL ja tõenäoliselt PostgreSQL. St saab Tabixist teha päringuid mitte ainult ClickHouse'i, vaid ka teiste tööriistade poole.
On näha, et on tehtud tohutult tööd. Tuli välja üsna terviklik idee. Brauseris on tehtud, ilmselt selleks, et välistada erinevad probleemid ja kiiresti kogu see asi kokku panna. Ma olen kuulnud, et te töötate, seega on kõige lihtsam see brauserisse kokku panna ja kõikjal töötab. php Sellega ei ole küsimusi. Seal on tõeliselt palju tehtud. Kui palju inimesi selle kallal töötas? Ja kui palju aega kõik see võttis? Sest tavaliselt ei oma tööriistad nii suurt funktsionaalsust.
Suve algusest sügiseni töötas meie meeskonnast üks inimene. See oli esimene versioon. Siis tegin ma üksi 330 commit'i. Seda, mida te näete, tegime kolleegiga pooleks. Kolme kuu jooksul esimesest versioonist viimasele tegin peamiselt üksi. Aga ma tunnen Javascripti väga halvasti. See oli minu ainus ja, loodetavasti, viimane projekt Javascriptis, millega ma töötasin. See tuli mulle kätte, vaatasin - oh jummel. Aga ma tõeliselt tahtsin toote lõpule viia ja see on tulemus.
Aitäh suurepärase ettekande eest! See on suurepärane tööriist. Kas olete võrrelnud *Tableau*? Aitäh. Seetõttu nagu Tabix nimi, kuna esimesed tähed langevad kokku.
Kas konkurents on põhjus?
Tuleb palju investeeringuid, me konkureerime.
Kuidas soovitate müüa sisemistele analüütikutele, et see tööriist asendab täielikult
*Tableau*? Töötab natiivselt ClickHouse'iga. Olen proovinud Tableau't, aga seal ei saa kirjutada sõnastike toetust ja nii edasi.? Какие будут аргументы?
Ma tean, kuidas inimesed Tabixiga töötavad. Nad kirjutavad päringu, laadivad välja CSV-sse ja laadivad BI-sse. Ja seal nad teevad midagi. Aga ma kujutan vaevalt ette, kuidas nad seda teevad, sest see on graafiline tööriist. See võib välja laadida 5000 rida, maksimaalselt 6000 rida, aga mitte rohkem, muidu brauser ei pea vastu. St andmete mahu osas on ikka tõsised piirangud, jah?
Jah. Ma ei kujuta ette, et soovite 10 000 rida endale brauseri ekraanile laadida. Miks?
Eeldatakse, et see on liides kiireks andmete vaatamiseks? Natuke keerutada, veeretada?
Kas see on liides, et andmeid kiiresti vaadata? Natuke keerata ja pöörata?
Jah, vaatan kiiresti, kuidas see töötab ja ehitan lihtsalt kokkuvõttegraafiku. Edasi annan kuhugi. Meil on oma raportite süsteem, kust ma lihtsalt selle päringu võtan. Joonistan Tabixis ja saadan meie raporteerimisse.
Ja veel küsimus. Kogumianalüüs?
Kui on soove, lisame.
Kui me alles hakkasime kasutama ClickHouse'i, kui kaua võttis aega rakendamine ClickHouse ja toomine tootmisolekusse?
Nagu ma ütlesin, rakendasime testklastri väga lühikese ajaga. Kahest päevast piisab selle ülesseadmise jaoks. Ning paar nädalat me testisime seda. Tootmiseni jõudsime umbes kolme kuuga. Kuid meil oli oma ETL, st andmete sissekirjutamise tööriist. See suudab kirjutada kõikjal, kuhu võimalik. See suudab kirjutada MongoDB-sse, Cassandra'sse, MySQL-i. Õpetada seda kirjutama ClickHouse'i oli lihtne. Meil oli olemasolev infrastruktuur kiireks rakendamiseks. Umbes kolme kuuga hakkasime esimest komponenti välja viskama. Kuue kuu jooksul loobusime täielikult kõigest muust. Meil jäi alles ainult ClickHouse.
Igor, suur tänu ettekande eest. Mulle väga meeldis teede loomise funktsionaalsus kaartide põhjal. Kas on plaanis integreerida Yandex.Mapped'ega ning eelkõige kohandatud Yandex kaartidega?
Ma proovisin integreeruda Google Maps'i asemel, kuid ma ei leidnud Yandex.Mapped'il tumedat teemat. Ma ei rääkinud ühest osast. Rullin tagasi, et täiendada.
Slidil - Google Maps. Seal on käsk „DRAW_GMAPS”, mis joonistab kaardi. On käsk „DRAW_YMAPS”, st saab joonistada Yandex kaardi. Ja tegelikult on selle käsu taga Javascript, st andmed, mida te ClickHouse'ist saate, saab edastada Javascripti, mille te siin kirjutate. Ja teil on väljundiks ala, kuhu see peab joonistuma. Iga graafiku saab joonistada, st igasugune graafik, kaardi, võite oma komponendi joonistada. Mul oli varem teine teek graafikute joonistamiseks.
St seal on tööriist funktsionaalsuse kohandamiseks?
Igaüks. Võib võtta ja värvida need punktid punastest sinisteks, rohelisteks.
Aitäh ettekande eest! Teil oli slaid, kus oli esitatud alternatiivsed tööriistad päringutele ClickHouse dashboardide ja analüüsiraportite koostamiseks. Ma sain aru, et hetkel, kui te hakkasite töötama, ClickHouse'ile pole nendele tööriistadele adapteerijaid kirjutatud. Ja mind huvitab, miks otsustasite luua oma tööriista, selle asemel et kirjutada adapter mõne olemasoleva tööriista jaoks? Arvan, et testredaktori kohandamine on kiire protsess. Miks otsustasite teha nii palju tööd?
Siin on huvitav nüanss – asi on selles, et ma olen tehniline direktor, mitte andmete teadlane. Sel hetkel, kui me hakkasime Druidit juurutama, oli mu tegevusplaanis umbes 50% ülesandeid – arvestame seda või analüüsime seda, või seda. Ja nii juhtus, et me juurutasime ClickHouse'i. Ja hakkasin kõike kiiresti ehitama, arvutama, sulgesin kiiresti oma tegevusplaani. Ja sel hetkel sain aru, et mul on puudu teadmised andeteadusest, andmete visualiseerimisest. Tabix on omamoodi minu kodutöö andmete visualiseerimise õppimiseks. Vaatasin, kuidas Zeppelinit täiendada. Mul on selle programmeerimise suhtes kerge antipaatia. Redash'i vaatasin, kuidas täiendada, aga seal jäi puudu normaalne redaktor. Ja SuperSet on samuti kirjutatud keeles, mida ma väga ei armasta. Seega otsustasin ise midagi luua, ja siin on tulemused.
Igor, kas te võtate Pull request'e vastu?
Jah.
Suur aitäh ettekande eest! Ja kaks küsimust. Esimene – te ei räägi eriti kiitvalt Javascriptist. Kas kirjutasite puhtal Javascriptil või oli siiski tegemist mingi raamistikuga?*
Parem on puhtal Javascriptil.
Nii et milline raamistik?
Angular.
Selge. Ja teine küsimus. Kas olete kaalunud R ja *Shiny**?*
Kaalusin. Katsetasin.
Olid ju ka võimalused lihtsalt adapter kirjutada.
See on olemas. Näiteks on selle teinud selgelt kogukond, kuid nagu ma vastasin eelnevale küsimusele, tahtsin ma ise proovida.
*Ei, mis puudutab visualiseerimist, seal on ju olemas.
Sa ütled, et selline asi on ja see joonistab sulle diagrammi. Ma avasin raamatu andmete visualiseerimisest. Ja mõtlesin: "Proovin neid andmeid visualiseerida. Kirjutan ise, et need jõuaksid kohale." Ja hakkasin paremini aru saama andmete esitamise tehnoloogiast. Ja kui ma oleksin kasutanud valmis komponenti, oleksin hinnanguliselt halvemini õppinud sellega töötama, st juuri visualiseerimisse. Kuid kuna nii on – jah, mulle meeldis R, aga ma pole veel lugenud raamatut "R algajatele".
Aitäh!
Lihtne küsimus. Kas on võimalusi kiiresti tabelit, diagrammi välja eksportida?
Saab eksportida CSV-sse, Excelisse.
Ei andmed, vaid valmis tabel, valmis diagramm? Näiteks, et näidata ülemusele.
On the button «Download» and the button «Download chart in png, in jpg».
Aitäh!
P.S. Mini installation guide for tabix
- Laadi alla
- Unpack, copy the directory
buildinto nginx root_path - Configure nginx
Allikas: habr.com

