Ke fana ka maikutlo a hore u bale sengoloa sa tlaleho ea Vladimir Sitnikov ho tloha qalong ea 2016, "PostgreSQL le JDBC: Ho Petetsa Mero Kaofela"


Lumela! Lebitso la ka ke Vladimir Sitnikov. Ke qetile lilemo tse 10 ke sebeletsa NetCracker. 'Me haholo-holo ke sebetsana le tshebetso. Ntho e 'ngoe le e' ngoe e amanang le Java, ntho e 'ngoe le e' ngoe e amanang le SQL - ke seo ke se ratang.
'Me kajeno ke tla u bolella ka seo re ileng ra kopana le sona k'hamphaning ha re qala ho sebelisa PostgreSQL e le seva sa database. 'Me haholo-holo re sebetsa le Java. Empa seo ke tla u bolella sona kajeno ha se amane le Java feela. Joalokaha tloaelo e bontšitse, sena se etsahala le lipuong tse ling.

Re tla bua:
- mabapi le sampole ya data.
- Mabapi le ho boloka data.
- Le ka tlhahiso.
- Le ka liraka tse ka tlas'a metsi tse patiloeng moo.

A re qaleng ka potso e bonolo. Re khetha mola o le mong ho tloha tafoleng ka senotlolo sa mantlha.

Database e ho moamoheli a le mong. 'Me lintho tsena kaofela li nka 20 milliseconds.

Li-milliseconds tsena tse 20 li ngata. Haeba u na le likopo tse joalo tse 100, joale u qeta nako ka motsotsoana ho phetla likopo tsena, ke hore, re senya nako.
Ha re rate ho etsa sena mme re sheba hore na database e re fa eng bakeng sa sena. Database e re fa likhetho tse peli tsa ho botsa lipotso.

Khetho ea pele ke kopo e bonolo. Ke eng e ntle ka eona? Hobane rea e nka ebe rea e romela, eseng letho hape.

Database e boetse e na le potso e atolositsoeng, e tsoetseng pele empa e sebetsa haholoanyane. O ka romella potso ka thoko bakeng sa ho arola, ho etsa, ho tlamahanngoa ka mokhoa o fapaneng, joalo-joalo.
Potso e atolositsoeng haholo ke ntho eo re ke keng ra e bua tlalehong ea hajoale. Re ka 'na ra batla ho hong ho tswa ho database mme ho na le lethathamo la litakatso tse entsoeng ka mokhoa o itseng, ke hore sena ke seo re se batlang, empa ha se khonehe hona joale le selemong se tlang. Ka hona, re e ngotse feela mme re tla potoloha re sisinya batho ba ka sehloohong.

Mme seo re ka se etsang ke potso e bonolo le potso e atolositsoeng.
Ke eng e ikhethang ka mokhoa o mong le o mong?
Potso e bonolo e loketse ho etsoa hang feela. E mathe hang 'me u lebale ka eona. 'Me bothata ke hore ha e tšehetse mofuta oa data oa binary, ke hore ha o tšoanelehe bakeng sa mekhoa e meng e phahameng ea ts'ebetso.

Potso e atolositsoeng - e u lumella ho boloka nako ha u bala. Sena ke seo re se entseng mme ra qala ho se sebelisa. E re thusitse haholo. Ha ho bolokehe feela ha ho arola. Ho na le chelete e bolokiloeng phetisong ea data. Ho fetisetsa data ka sebopeho sa binary ho sebetsa hantle haholo.

Ha re tsoeleng pele ho itloaetsa. Sena ke seo sesebelisoa se tloaelehileng se shebahalang ka sona. E ka ba Java, joalo-joalo.
Re entse polelo. Re phethile taelo. Re entse qeto. Phoso e kae moo? Bothata ke bofe? Ha ho bothata. Ke kamoo ho ngodilweng kateng dibukeng tsohle. Ke kamoo e lokelang ho ngoloa kateng. Haeba u batla ts'ebetso e phahameng ka ho fetisisa, ngola ka tsela ena.

Empa tloaelo e bontšitse hore sena ha se sebetse. Hobaneng? Hobane re na le mokhoa o bitsoang "haufi". 'Me ha re etsa sena, ho tloha sebakeng sa polokelo ea boitsebiso hoa bonahala - ho tšoana le motho ea tsubang ea sebetsang le database. Re itse "PARSE EXECUTE DEALLOCATE".
Ke hobane'ng ha lipolelo tsee tse ling li etsoa le ho laolloa? Ha ho motho ea li hlokang. Empa hangata ho PreparedStatement ho etsahala hore ha re li koala, li koala ntho e 'ngoe le e' ngoe ho database. Sena ha se seo re se batlang.

Re batla ho sebetsa le database joalo ka batho ba phetseng hantle. Re nka le ho lokisa polelo ea rona hang, ebe re e phetha hangata. Ebile, hangata ho bolela hore re e hlahlobile hanngoe bophelong bohle ba ts'ebeliso. 'Me re sebelisa id ea polelo e tšoanang ho REST e fapaneng. Sena ke sepheo sa rona.

Re ka finyella see joang?

Ho bonolo haholo - ha ho hlokahale ho koala lipolelo. Re ngola tjena: "lokisa" "phetha".


Haeba re thakhola ntho e kang ena, ho hlakile hore ho na le ntho e tla khaphatseha kae-kae. Haeba e sa hlaka, joale re ka e lekanya. Ha re nkeng le ho ngola benchmark, eo ho eona mokhoa o bonolo joalo. Re etsa polelo. Re e qala ka mofuta o mong oa mokhanni mme re fumana hore e senyeha ka potlako ka tahlehelo ea memori eohle eo re nang le eona.
Ho hlakile hore liphoso tse joalo li lokisoa habonolo. Nke ke ka bua ka tsona. Empa ke tla re phetolelong e ncha e sebetsa ka potlako haholo. Mokhoa o booatla, empa leha ho le joalo.

Mokhoa oa ho sebetsa hantle? Re lokela ho etsa eng bakeng sa see?
Ha e le hantle, likopo li lula li koala lipolelo. Libuka tsohle li re li koale, ho seng joalo mohopolo o tla lutla.
'Me PostgreSQL ha e khone ho boloka lipotso. Seboka se seng le se seng se hloka ho iketsetsa cache ena.
'Me le rona ha re batle ho senya nako ka ho bala.

'Me joalo ka tloaelo re na le likhetho tse peli.
Khetho ea pele ke hore re re, ha re phuthele tsohle ho PgSQL. Ho na le cache moo. E boloka tsohle. E tla sebetsa hantle. Re ile ra sheba sena. Re na le lipotso tse 100500. Ha e sebetse. Ha re lumellane le ho fetola lipotso hore e be litsamaiso. Che, che.
Re na le khetho ea bobeli - ho nka le ho e bona ka borona. Re bula khoutu ea mohloli, qala ho seha. Re ile ra bona le ho bona. Ho ile ha fumaneha hore ha ho thata hakaalo ho e etsa.

E hlahile ka Phato 2015. Hona joale ke mofuta oa sejoale-joale. Mme tsohle di ntle. E sebetsa hantle hoo re sa fetoleng letho ts'ebelisong. Mme re bile ra emisa ho nahana ka PgSQL, ke hore, sena se ne se lekane ho rona ho fokotsa litšenyehelo tsohle ho fihla ho zero.
Ka lebaka leo, lipolelo tse lokiselitsoeng ke Seva li kenngoa ts'ebetsong ea 5th e le hore li se ke tsa senya mohopolo sebakeng sa polokelo bakeng sa kopo e 'ngoe le e' ngoe ea nako e le 'ngoe.

Nka botsa - linomoro li kae? U fumana eng? 'Me mona nke ke ka fana ka linomoro, hobane kopo e' ngoe le e 'ngoe e na le ea eona.
Re bile le lipotso hoo re ileng ra sebelisa li-milliseconds tse ka bang 20 ho hlalosa lipotso tsa OLTP. Ho ne ho e-na le 0,5 milliseconds bakeng sa ho bolaoa, 20 milliseconds bakeng sa tlhaloso. Potso ke 10 KB ea mongolo, mela e 170 ea moralo. Ena ke potso ea OLTP. E kopa 1, 5, 10 mela, ka linako tse ling ho feta.
Empa re ne re sa batle ho senya 20 milliseconds ho hang. Re e fokolitse ho 0. Tsohle li ntle haholo.
U ka tlosa eng ho see? Haeba u na le Java, joale u nka mofuta oa sejoale-joale oa mokhanni 'me u thabe.
Haeba u na le puo e 'ngoe, nahana ka eona - mohlomong le uena u e hloka? Hobane ho ea ka pono ea puo ea ho qetela, ka mohlala, haeba PL 8 kapa u na le LibPQ, joale ha ho totobetse ho uena hore ha u sebelise nako ea ho bolaoa, empa ka ho arola 'me sena se lokela ho hlahlojoa. Joang? Tsohle di lokolohile.

Ntle le hore ho na le liphoso, ba bang ba peculiarities. Mme re tla bua ka tsona hona jwale. Boholo ba eona e tla ba ka ho epolloa ha lintho tsa khale tsa indasteri, mabapi le seo re se fumaneng, seo re se fumaneng.

Haeba potso e hlahisoa ka matla. Sena se etsahala. Motho e mong o kopanya likhoele, 'me sephetho ke potso ea SQL.
Phoso ke efe ka eona? Ho fosahetse hobane nako le nako re qetella re e-na le khoele e fapaneng.
'Me khoele ena e fapaneng e hloka hore hashCode ea eona e baloe bocha. Ha e le hantle ona ke mosebetsi oa CPU - ho fumana mongolo o molelele oa potso esita le hash e teng ha ho bonolo hakaalo. Kahoo sephetho se bonolo - u se ke ua hlahisa lipotso. Li boloke boemong bo le bong. Mme o thabe.

Bothata bo latelang. Mefuta ea data e bohlokoa. Ho na le li-ORM tse reng ha ho tsotellehe hore na NULL ke eng, e ke e be leha e le efe. Haeba e le Int, joale re re setInt. Mme haeba e le NULL, e ke e be VARCHAR kamehla. Hona ho etsa phapang efe hore na NULL ke eng? Database e tla itlhalosa ka boeona. 'Me setšoantšo sena ha se sebetse.
Ha e le hantle, database e tsotella. Haeba u boletse lekhetlo la pele hore e ne e le nomoro, 'me lekhetlo la bobeli e le VARCHAR, joale ho ke ke ha khoneha ho sebelisa lipolelo tse lokiselitsoeng tsa Seva hape. 'Me tabeng ena, re tlameha ho tsosolosa polelo ea rona.

Haeba u ntse u botsa potso e tšoanang, etsa bonnete ba hore mefuta ea data e kholomong ha e kopane. U tlameha ho ela hloko NULL. Ena ke phoso e tloaelehileng eo re bileng le eona kamora hore re qale ho sebelisa PreparedStatements

Ho lokile, re ile ra e bulela. Re nkile, mohlomong, mokhanni. Mme tshebetso e ile ya theoha. Ntho e 'ngoe le e 'ngoe e ile ea mpefala.
See se etsahala joang? Na ke bothata kapa ke tšobotsi? Ka bomalimabe, ha rea ka ra tseba hore na ke bothata kapa ke tšobotsi. Empa ho na le boemo bo bonolo haholo ba ho hlahisa bothata bona hape. E ile ea re lalla ho hang re sa lebella. 'Me e kenyelletsa ho khetha ka ho toba tafoleng e le' ngoe. Ehlile, re ne re e-na le lipotso tse ngata tse joalo. Hangata li ne li kenyelletsa litafole tse peli kapa tse tharo, empa ho na le boemo bo joalo ba ho ikatisa. Nka mofuta ofe kapa ofe oa database ea hau 'me u e hlahise hape.

Taba ke hore re na le litšiea tse peli, e 'ngoe le e 'ngoe e na le indexed. Khomong e le 'ngoe, ho na le mela e milione ka boleng ba NULL. 'Me kholomong ea bobeli, ho na le mela e 20 feela. Ha re etsa ntle le mefuta e hokahantsoeng, tsohle li sebetsa hantle.
Haeba re qala ho phethahatsa ka mefuta e fapaneng, ke hore, re etsa "?" saena kapa "$1" bakeng sa potso ea rona, re qetella re e-na le eng?

Phethahatso ea pele e joalo ka ha ho lebelletsoe. Ea bobeli e batla e potlakile. Ho na le ntho e bolokiloeng. Ea boraro-ea bone-bohlano. Ebe bam - le ntho e kang eo. Mme ntho e mpe ka ho fetisisa ke hore e etsahala ka phethahatso ya botshelela. Ke mang ea neng a tseba hore u hloka ho etsa lipolao tse tšeletseng hantle e le hore u utloisise hore na morero oa sebele oa polao ke ofe?

Ke mang ea molato? Ho etsahetse eng? Database e na le optimization. 'Me e ntlafalitsoe bakeng sa kesi ea generic. 'Me, ka hona, ho tloha ka nako e itseng e fetohela ho moralo oa generic, oo, ka bomalimabe, o ka fapaneng. E ka 'na ea tšoana, kapa ea fapana. 'Me ho na le tekanyo e itseng e lebisang boitšoarong bo joalo.
Ho ka etsoa eng ka see? Mona, ha e le hantle, ho thata ho nahana letho. Ho na le tharollo e bonolo eo re e sebelisang. Ke +0, OFFSET 0. Ka sebele, u tseba litharollo tse joalo. Re nka feela ebe re eketsa "+0" ho kopo mme tsohle li lokile. Ke tla u bontša hamorao.
'Me ho na le khetho e' ngoe - sheba merero ka hloko haholoanyane. Moqapi ha aa lokela ho ngola kopo feela, empa hape o re "hlalosa sekaseka" makhetlo a 6. Haeba 5, e ke ke ea sebetsa.
'Me ho na le khetho ea boraro - ho ngolla pgsql-hackers lengolo. Ke ngotse, leha ho le joalo, ha ho so hlake hore na ke phoso kapa ke tšobotsi.

Ha re ntse re nahana hore na ena ke bothata kapa ke tšobotsi, ha re e lokise. Ha re nke potso ea rona mme re kenye "+0". Tsohle di lokile. Matšoao a mabeli 'me ha ho hlokahale hore u nahane ka mokhoa oo le hore na ho na le eng. Ho bonolo haholo. Re sa tsoa hanela database ho sebelisa index kholomong ena. Ha re na index holim'a kholomo ea "+0" 'me ho joalo, database ha e sebelise index, ntho e' ngoe le e 'ngoe e hantle.

Ona ke molao oa 6 hlalosa. Hona joale liphetolelong tsa morao-rao u tlameha ho e etsa ka makhetlo a 6 haeba u na le mefuta-futa e tlamiloeng. Haeba ha u na li-varietives tse tlamiloeng, re li etsa tjena. 'Me qetellong, ena ke kopo e senyehang. Ha se ntho e qhekellang hakaalo.
Ho ka bonahala eka, ke bokae ho ka khonehang? Kotsi mona, kokoanyana mono. Ho hlile ho na le kokoanyana hohle.

Ha re shebeng hape. Ka mohlala, re na le merero e 'meli. Sekema sa A se nang le tafole Y le sekema sa B se nang le tafole Y. Potso ke ho khetha data ho tsoa tafoleng. Re tla ba le eng? Re tla ba le phoso. Re tla ba le tsohle tse ka holimo. Molao ke - kokoanyana e hohle, re tla ba le tsohle tse ka holimo.

Joale potso ke: "Hobane'ng?" Ho ka bonahala eka ho na le litokomane tsa hore haeba re na le schema, joale ho na le "search_path" e fapaneng e re bolellang hore na re batle tafole hokae. Ho ka bonahala eka phapang e teng.
Bothata ke eng? Bothata ke hore lipolelo tse lokiselitsoeng seva ha li belaelle hore search_path e ka fetoloa ke motho e mong. Boleng bona bo lula joalo ka ha eka bo lula bo le teng bakeng sa database. 'Me likarolo tse ling li ka' na tsa se ke tsa nka litekanyetso tse ncha.

Ehlile, ho ipapisitse le mofuta oo u lekang ho ona. Ho ipapisitse le hore na litafole tsa hau li fapana hakae. Mme mofuta oa 9.1 o tla tsamaisa lipotso tsa khale. Liphetolelo tse ncha li ka lemoha ho tšoasa 'me tsa u bolella hore u na le kokoana.

Joang ho tšoara see? Ho na le recipe e bonolo - u se ke ua etsa sena. Se ke oa fetola search_path ts'ebelisong. Haeba u e fetola, ho molemo ho theha khokahano e ncha.
Re ka buisana ka eona, ke hore, bula, buisana, eketsa tse ling. Mohlomong re ka kholisa baetsi ba li-database hore ha motho a fetola boleng, database e lokela ho bolella mofani: "Bona, u na le boleng bo ntlafalitsoeng mona. Mohlomong u hloka ho tsosolosa lipolelo, ho li etsa hape? ". Hona joale database e itšoara ka sekhukhu 'me ha e tlalehe ka tsela leha e le efe hore kae-kae ka hare ho lipolelo li fetohile.
'Me ke tla hatisa hape - sena ke ntho e sa tloaelehang bakeng sa Java. Re tla bona ntho e tšoanang ho PL/pgSQL ho isa ho e 'ngoe. Empa e tla hlahisoa hape moo.

Ha re leke ho khetha data hape. Re khetha ebe re khetha. Re na le tafole e nang le mela e milione. Mola o mong le o mong ke kilobyte. Hoo e ka bang gigabyte ea data. Mme re na le mohopolo o sebetsang mochining oa Java oa megabyte tse 128.
Rona, joalo ka ha ho khothalelitsoe libukeng tsohle, re sebelisa ts'ebetso ea molapo. Ke hore, re bula resultSet ebe re bala lintlha tse tsoang moo hanyane ka hanyane. Na e tla sebetsa? Na e ke ke ea oela mohopolong? Na e tla baloa hanyane ka hanyane? Ha re lumele ho database, re lumele ho Postgres. Ha re lumele. Na OutOfMemory e tla oa? Ke mang ea kileng a oela OutOfMemory? Mme ke mang ya kgonneng ho e lokisa ka mora moo? Ho na le motho ea ileng a khona ho e lokisa.
Haeba u na le mela e milione, u ke ke ua khetha feela. Ka sebele u hloka OFFSET/LIMIT. Ke mang bakeng sa khetho ee? Mme ke mang bakeng sa khetho eo u hlokang ho e bapala ka AutoCommit?
Mona, joalo ka tloaelo, khetho e sa lebelloang ka ho fetesisa e fetoha e nepahetseng. 'Me haeba ka tšohanyetso u tima AutoCommit, ho tla thusa. Hobaneng ha ho le joalo? Saense ha e tsebe ka eona.

Empa ka ho sa feleng, bareki bohle ba hokelang polokelong ea polokelo ea Postgres ba lata data kaofela. PgJDBC ha se mokhelo, e lata mela eohle.
Ho na le phapang holim'a sehlooho sa FetchSize, ke hore, u ka bua boemong ba polelo e fapaneng hore mona, ka kopo, khetha data ka 10, 50. Empa sena ha se sebetse ho fihlela u tima autoCommit. Tima AutoCommit - e qala ho sebetsa.
Empa ho sebelisa khoutu le ho beha setFetchSize hohle ha ho na tšitiso. Ke kahoo re entseng peakanyo e tla bolela boleng ba kamehla bakeng sa khokahano eohle.

Kahoo re boletse joalo. Re theha parameter. Mme re fumane eng? Haeba re khetha tse nyane, haeba, ka mohlala, re khetha mela e 10, joale re na le litšenyehelo tse kholo haholo. Ka hona, re hloka ho beha boleng bona ho ba ka bang lekholo.

Ka nepo, ehlile, re ntse re tla hloka ho ithuta ho e fokotsa ka li-byte, empa risepe ke ena: beha defaultRowFetchSize ho tse fetang lekholo mme o natefeloe.

Ha re tsoeleng pele ho kenya data. Ho kenya ho bonolo, ho na le likhetho tse fapaneng. Mohlala, INSERT, VALUES. Ena ke khetho e ntle. U ka re "INSERT KHETHA". Ka ts'ebetso, hoa tšoana. Ha ho phapang ts'ebetsong.
Libuka li re u hloka ho etsa polelo ea Batch, libuka li re u ka etsa litaelo tse rarahaneng ka li-brackets tse ngata. 'Me Postgres e na le tšobotsi e ntle haholo - o ka COPY, ke hore, e etse kapele.

Haeba re e lekanya, re ka etsa litšibollo tse ling tse khahlisang hape. Re batla hore e sebetse joang? Ha re batle ho hlalosa le ho se phethise litaelo tse sa hlokahaleng.

Ka ts'ebetso, TCP ha e re lumelle ho etsa sena. Haeba moreki a ntse a phathahane ho romella kopo, joale database ha e bale likopo ha a ntse a leka ho re romella likarabo. Ka lebaka leo, moreki o emetse database hore a bale kopo, mme database e emetse hore moreki a bale karabo.

Ka hona, moreki o tlameha ho romella pakete ea ho hokahanya nako le nako. Litšebelisano tse eketsehileng tsa marang-rang, tahlehelo e eketsehileng ea nako.
Mme ha re ntse re di eketsa, di mpefala le ho feta. Mokhanni ha a na tšepo 'me o li eketsa hangata, hoo e ka bang hanngoe meleng e meng le e meng e 200, ho itšetlehile ka boholo ba mela, joalo-joalo.

Hoa etsahala hore u lokise mola o le mong feela 'me ntho e' ngoe le e 'ngoe e potlakile ka makhetlo a 10. Sena se etsahala. Hobaneng? Joalo ka tloaelo, kamehla e ne e se e sebelisoa kae-kae. 'Me boleng "128" bo ne bo bolela - u se ke ua sebelisa batching.

Ho hotle hore ha ea ka ea kena molemong oa semmuso. E ile ea fumanoa pele ba qala ho e lokolla. Litlhaloso tsohle tseo ke fanang ka tsona li thehiloe liphetolelong tsa morao-rao.

A re lekanye. Re lekanya InsertBatch e bonolo. Re lekanya InsertBatch e mengata, ke hore ntho e tšoanang, empa ho na le litekanyetso tse ngata. Motsamao o bohlale. Ha se motho e mong le e mong ea ka etsang sena, empa ke mohato o bonolo, o bonolo ho feta COPY.

U ka etsa KOPI.

'Me u ka etsa sena ka mehaho. Hlalosa mofuta oa kamehla oa Mosebelisi, fetisa lethathamo 'me u kenye ka kotloloho tafoleng.
Haeba u bula sehokelo: pgjdbc/ubenchmsrk/InsertBatch.java, joale khoutu ena e ho GitHub. U ka bona hantle hore na ke lipotso life tse hlahisoang moo. Ha ho na taba.

Re e thakhotse. 'Me ntho ea pele eo re e hlokometseng ke hore ho se sebelise batch ha ho khonehe. Likhetho tsohle tsa batching ke zero, ke hore, nako ea ts'ebetso e batla e le zero ha e bapisoa le ts'ebetso e le 'ngoe.

Re kenya data. Ke tafole e bonolo haholo. Litšiea tse tharo. Mme re bona eng moo? Rea bona hore likhetho tsena tse tharo li batla li bapisoa. 'Me COPY, ehlile, e betere.

Ke ha re kenya likotoana. Ha re re boleng bo le bong ba VALUES, lipalo tse peli tsa VALUES, tse tharo tsa VALUES, kapa re hlalositse tse 10 tsa tsona tse arotsoeng ka lifeeloana. Sena se hantle jwale ka ho rapama. 1, 2, 4, 128. U ka bona hore Batch Insert, e takiloeng ka boputsoa, e imolohile haholo ke sena. Ke hore ha u kenya ka bonngoe kapa le ha u kenya four by four, e fetoha e ntle habeli, hobane feela re kentse hanyenyane HO VALUES. Ts'ebetso e fokolang ea EXECUTE.
Ho sebelisa COPY meqolong e menyenyane ha ho tšepise haholo. Ha kea ka ka taka le ho tse peli tsa pele. Ba ea leholimong, ke hore linomoro tsena tse tala bakeng sa COPY.
COPY e lokela ho sebelisoa ha bophahamo ba data ba hau bo feta mela e fetang lekholo. Taba ea ho bula khokahano ena e kholo. 'Me, ho bua 'nete, ha ke e-s'o cheke ntlheng ena. Ke ntlafalitse Batch, empa eseng COPY.
Re etsa’ng ka mor’a moo? Rea lekanya. Re utloisisa hore re hloka ho sebelisa libopeho kapa bacth e bohlale e kopanyang meelelo e mengata.

Re lokela ho nka eng tlalehong ea kajeno?
- PreparedStatement ke tsohle tsa rona. E fana ka haholo bakeng sa tshebetso. E fana ka moqomo o moholo oa sekontiri.
- 'Me u lokela ho etsa HLALOSA HLAHLOBA makhetlo a 6.
- 'Me re hloka ho hlapolla OFFSET 0 ka maqheka a kang +0 ho lokisa liperesente tse setseng tsa lipotso tsa rona tse nang le mathata.
Source: www.habr.com
