Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB

I korero tata nei ahau ki a koe me pehea, ma te whakamahi i nga tohutao paerewa whakanuia te mahinga o nga patai panui SQL mai i te pātengi raraunga PostgreSQL. I tenei ra ka korero tatou me pehea he pai ake te mahi tuhi i roto i te patengi raraunga me te kore e whakamahi i nga "twists" i roto i te whirihora - ma te whakarite tika i nga rerenga raraunga.

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB

#1. Wehenga

He tuhinga mo te pehea me te take he pai te whakarite te wehewehenga "i roto i te ariā" kua puta ke, i konei ka korero tatou mo te tikanga o te whakamahi i etahi huarahi i roto i a tatou ratonga aroturuki mo nga rau o nga tūmau PostgreSQL.

"Nga mea o nga ra kua pahemo..."

I te timatanga, pera i nga MVP katoa, i timata ta matou kaupapa i raro i te taumahatanga ngawari - ko te aroturuki i mahia mo nga kaitoro tino nui kotahi tekau, he ahua totika nga tepu katoa... Engari ka haere te wa, ka piki haere te maha o nga kaihautu i aroturukitia. , a ka ngana ano matou ki te mahi ki tetahi o nga ripanga 1.5TB te rahi, i mohio matou ahakoa ka taea te noho penei tonu, he tino raruraru.

He rite tonu nga wa ki nga wa epic, he rereke nga momo putanga o PostgreSQL 9.x, no reira me mahi nga wehewehenga katoa "ma te ringa" - ma tuku iho tepu me nga keu ararere me te hihiri EXECUTE.

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB
Ko te otinga i puta mai i te ao katoa ka taea te whakamaori ki nga ripanga katoa:

  • I whakapuakihia he ripanga matua "pane" kau, i whakaahua katoa nga tohu me nga keu e tika ana.
  • Ko te rekoata mai i te tirohanga a te kiritaki i mahia ki te ripanga "pakiaka", me te whakamahi i roto keu ararere BEFORE INSERT i whakauruhia te rekoata "a-tinana" ki te waahanga e hiahiatia ana. Mena kaore ano he mea pera, ka mau i a maatau he tuunga ka...
  • … mā te whakamahi CREATE TABLE ... (LIKE ... INCLUDING ...) i hangaia i runga i te tauira o te ripanga matua wāhanga me te rāhuitanga i te rā e hiahiatia anakia tae mai nga raraunga, ka mahia te panui ki roto anake.

PG10: ngana tuatahi

Engari ko te wehewehe i roto i nga taonga tuku iho kaore i tino pai ki te whakahaere i tetahi awa tuhi kaha, te maha ranei o nga wehewehenga tamariki. Hei tauira, ka mahara koe ko te algorithm mo te kowhiri i te waahanga e hiahiatia ana matatini tapawhā, e mahi ana me nga waahanga 100+, kei te mohio koe me pehea ...

I roto i te PG10 i tino arotauhia tenei ahuatanga ma te whakatinana i te tautoko wehewehe maori. Na reira, ka ngana tonu matou ki te tono i muri tonu i te hekenga o te rokiroki, engari...

I te mea i puta mai i muri i te keri i roto i te pukapuka, ko te teepu wehewehe i roto i tenei putanga ko:

  • e kore e tautoko i nga whakaahuatanga taupū
  • e kore e tautoko i nga keu kei runga
  • e kore e taea te "whakaheke" o tetahi
  • kaua e tautoko INSERT ... ON CONFLICT
  • kaore e taea te whakaputa aunoa i tetahi waahanga

I te whiu mamae ki te rae me te rake, ka mohio matou ka kore e taea te mahi me te kore e whakarereke i te tono, me te hiki i etahi atu rangahau mo te ono marama.

PG10: tupono tuarua

Na, i timata taatau ki te whakaoti i nga raru i puta takitahi:

  1. No te mea keu me ON CONFLICT I kitea e matou kei te hiahia tonu matou ki konei, ki reira, no reira i hanga e matou he waahi takawaenga ki te mahi tepu takawaenga.
  2. Kua whakakorehia te "whakahaere" in triggers - ara, mai EXECUTE.
  3. I tangohia motuhaketia e ratou tepu tauira me nga tohu katoakia kore ratou e noho i roto i te tepu takawaenga.

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB
Ka mutu, i muri i enei mea katoa, ka wehewehea e matou te teepu matua. Ko te hanga i tetahi waahanga hou ka waiho tonu ki te hinengaro o te tono.

“Sawing” papakupu

Pērā i roto i tetahi punaha tātari, i a maatau ano "meka" me "tapahi" (papakupu). I roto i a maatau, i runga i tenei mana i mahi ratou, hei tauira, tinana tauira he rite nga patai puhoi, te tuhinga ranei o te patai ake.

Ko nga "Meka" kua wehea i te awatea mo te wa roa, no reira ka whakakorea marietia e matou nga waahanga tawhito, kaore i whakararuraru i a maatau (rakau!). Engari he raru ki nga papakupu...

Ehara i te kii he maha o raatau, engari tata tonu 100TB o "meka" ka puta he papakupu 2.5TB. Kaore e taea e koe te whakakore i tetahi mea mai i te tepu penei, kaore e taea e koe te kopiri i roto i te wa tika, ka tere haere te tuhi ki a ia.

Pērā i te papakupu... kei roto, kia kotahi rite tonu te whakaatu o ia urunga... a he tika tenei, engari!.. Karekau he tangata e aukati i a tatou ki te whai. he papakupu motuhake mo ia ra! Ae, ka kawea mai e tenei he taapiri, engari ka taea:

  • tere ake te tuhi/te panui na te iti ake o te waahanga
  • pau te mahara iti na roto i te mahi me nga taupū kiato
  • rokiroki iti ake nga raraunga na te kaha ki te tango tere i nga tawhito

Ko te hua o te matatini katoa o nga mehua Kua heke te uta CPU ma te ~30%, te uta kōpae ma te ~50%:

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB
I taua wa ano, i haere tonu matou ki te tuhi i te mea rite tonu ki roto i te papaa raraunga, me te iti o te utaina.

#2. Te whanaketanga pātengi raraunga me te refactoring

Na ka whakatauhia e matou nga mea kei a matou kei ia ra tana ake waahanga me nga raraunga. Tena, CHECK (dt = '2018-10-12'::date) — kei reira he taviri wehewehe me te tikanga kia taka te rekoata ki tetahi waahanga motuhake.

I te mea ko nga purongo katoa i roto i ta maatau ratonga i hangaia i roto i te horopaki o te ra motuhake, ko nga tohu mo ratou mai i nga "wa kore-waahanga" he momo katoa. (Tumautuku, , Tauira Mahere), (Tumautuku, , Mahere kōpuku), (, akomanga Hapa, Tūmau)...

Inaianei kei te noho ratou ki ia wahanga o kape ia taurangi penei... A i roto i ia wahanga he tau tonu te ra... Te ahua nei kei roto tatou i ia taurangi penei tomo noa he tamau hei tetahi o nga mara, e whakanui ana i tona rōrahi me te wa rapu mo taua mea, engari kaore he hua. I waiho e ratou te rake ki a ratou ano, aue...

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB
He maamaa te ahunga o te arotautanga - ngawari tangohia te āpure rā mai i ngā taupū katoa i runga i nga tepu wehewehe. I runga i o maatau pukapuka, ka tata te whiwhinga 1TB/wiki!

Inaianei me tuhi ano tenei terabyte me pehea. Ara, ko tatou ano me iti ake te uta o te kōpae! Ko tenei pikitia e whakaatu marama ana i te painga i puta mai i te horoi, i whakapaua e matou mo te wiki:

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB

#3. "Horapa" te pikaunga teitei

Ko tetahi o nga raru nui o nga punaha utaina ko tukutahitanga nui etahi mahi kaore e hiahiatia. I etahi wa "no te mea kaore ratou i kite", i etahi wa "he maamaa ake te huarahi", engari i muri mai me whakakorehia e koe.

Me toro atu ki runga i te pikitia o mua ka kite he kōpae to tatou "pumps" i raro i te kawenga me te kaha kaha rua i waenganui i nga tauira e patata ana, e tino marama ana "i nga tatauranga" kia kaua e pa ki te maha o nga mahi:

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB

He tino ngawari tenei ki te whakatutuki. Kua timata ano matou ki te aroturuki tata 1000 tūmau, ka tukatukahia e tetahi miro arorau motuhake, ka tautuhi ano ia miro i nga korero kua whakaemihia kia tukuna ki te papaaarangi i etahi waa, penei:

setInterval(sendToDB, interval)

Ko te raruraru i konei kei roto i te meka e ka timata nga miro katoa i te wa kotahi, no reira, ko nga wa tuku i nga wa katoa ka rite tonu "ki te waahi." Aue #2...

Waimarie, he tino ngawari tenei ki te whakatika, te taapiri i te "tupurangi" oma-ake i te wa:

setInterval(sendToDB, interval * (1 + 0.1 * (Math.random() - 0.5)))

#4. Ka huna e matou nga mea e hiahiatia ana e matou

Ko te tuatoru o nga raru uta teitei tuku iho kahore keteroki kei hea ia taea hei.

Hei tauira, i taea e matou te tātari i runga i nga waahanga mahere (ko enei katoa Seq Scan on users), engari whakaaro tonu ko ratou, mo te nuinga, he rite tonu - kua wareware ratou.

Kao, o te akoranga, kaore he mea i tuhia ano ki te papaaarangi, ka tapahia te keu ki te INSERT ... ON CONFLICT DO NOTHING. Engari ka tae tonu enei raraunga ki te papaarangi, kaore e tika panui ki te tirotiro mo te raruraru me mahi. Aue #3...

Ka kitea te rerekeetanga o te maha o nga rekoata ka tukuna ki te patengi raraunga i mua/i muri i te whakahohea o te keteroki:

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB

A koinei te hekenga o te kawenga rokiroki:

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB

Te tapeke

"Terabyte-ia-ra" he tangi whakamataku noa. Mena ka mahia e koe nga mea katoa, he tika tenei 2^40 paita / 86400 hēkona = ~12.5MB/ska mau tonu nga IDE papamahi. 🙂

Engari he mea nui, ahakoa he tekau nga wa o te kawenga i te ra, ka taea e koe te whakatutuki i nga kaha o nga SSD hou.

Ka tuhi matou i roto i te PostgreSQL i runga i te marama: 1 ope, 1 ra, 1TB

Source: will.com

Tāpiri i te kōrero