Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB

Talu ai nei na ou taʻu atu ai ia te oe pe faʻafefea, faʻaaogaina fua masani faʻateleina le faʻatinoga o fesili faitau SQL mai PostgreSQL database. O le asō o le a tatou talanoa e uiga i le auala e mafai ona sili atu ona lelei le pueina i totonu o faʻamaumauga e aunoa ma le faʻaogaina o soʻo se "twists" i le config - na o le faʻatulagaina saʻo o faʻamaumauga.

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB

#1. Vaevaega

O se tala e uiga i le auala ma pe aisea e aoga ai le faʻatulagaina fa'aaogaina vaeluaga "i le talitonuga" ua uma, iinei o le a tatou talanoa e uiga i le masani o le faaaogaina o nisi auala i totonu o tatou 'au'aunaga mata'ituina mo le faitau selau o 'au'aunaga PostgreSQL.

"O mea o aso ua mavae..."

I le taimi muamua, e pei o soʻo se MVP, o la matou poloketi na amata i lalo o se avega mama - o le mataʻituina na faia naʻo le sefulu pito sili ona taua, o laulau uma e fai si faʻatusatusa ... Ae a o faagasolo taimi, o le numera o tagata mataʻituina na faʻateleina ma sili atu. , ma sa matou toe taumafai e fai se mea i se tasi o laulau 1.5TB le tele, na matou iloa ai e ui lava sa mafai ona faaauau pea ona ola faapena, ae sa matuā lē faigofie.

O taimi e toetoe lava pei o taimi mataʻutia, eseese faʻaliliuga o le PostgreSQL 9.x sa talafeagai, o lea na tatau ai ona faia uma le vaeluaga "ma le lima" - e ala i tofi laulau ma fa'aoso ta'avale ma le fa'amalosi EXECUTE.

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB
O le taunuuga o le fofo na foliga mai ua lava lautele e mafai ona faaliliuina i laulau uma:

  • Na fa'ailoa mai se laulau fa'amatua gaogao, lea na fa'amatala uma fa'ailoga mana'omia ma fa'aoso.
  • O faamaumauga mai le vaaiga a le tagata o tausia na faia i le laulau "a'a", ma le faaaogaina i totonu fa'aoso auala BEFORE INSERT o le faamaumauga na "faaletino" faʻaofi i totonu o le vaega manaʻomia. Afai e leai se mea faapena, na matou maua se tuusaunoaga ma ...
  • … e ala i le faaaogaina CREATE TABLE ... (LIKE ... INCLUDING ...) na faia e fa'atatau i le fa'ata'ita'iga o le laulau matua vaega ma se tapulaa i le aso e manaʻomiaina ia maua mai faʻamatalaga, faitau naʻo totonu e faia ai.

PG10: taumafaiga muamua

Ae o le vaeluaga e ala i tofi e le'i fetaui lelei i le taimi e feagai ai ma se tafega tusitusi malosi po'o se numera tele o vaeluaga a tamaiti. Mo se faʻataʻitaʻiga, e mafai ona e manatua o le algorithm mo le filifilia o le vaega manaʻomia quadratic lavelave, e galue i le 100+ vaega, o oe lava e malamalama i le auala...

I le PG10 o lenei tulaga na sili ona lelei e ala i le faʻatinoina o le lagolago vaeluaga o le atunuu. O le mea lea, na vave ona matou taumafai e faʻaoga i le taimi lava e maeʻa ai le faimalaga i le teuina, ae ...

E pei ona i ai ina ua uma ona eli i totonu o le tusi lesona, o le laulau vaeluaga masani i lenei lomiga o:

  • e le lagolagoina fa'amatalaga fa'asino
  • e le lagolagoina fa'aoso i luga
  • e le mafai ona avea ma "tupuga" a se tasi
  • aua le lagolagoina INSERT ... ON CONFLICT
  • e le mafai ona gaosia otometi se vaega

O le mauaina o se tui tiga i le muaulu ma se rake, na matou iloa ai e le mafai ona faia e aunoa ma le suia o le talosaga, ma tolopoina nisi suʻesuʻega mo le ono masina.

PG10: avanoa lona lua

O lea, na amata ona matou foia faʻafitauli na tulaʻi mai taʻitasi:

  1. Aua fa'aoso ma ON CONFLICT Na matou iloa o loʻo matou manaʻomia pea i latou i lea ma lea mea, o lea na matou faia ai se tulaga vavalalata e faʻatautaia ai laulau sui.
  2. Ave'esea le "auala" i fa'aoso - o lona uiga, mai EXECUTE.
  3. Sa latou ave ese ese laulau fa'atusa ma fa'asino igoa umaina ia latou le i ai foi i le laulau sui.

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB
Mulimuli ane, ina ua uma nei mea uma, sa matou vaevaeina le laulau autu i le natura. O le fausiaina o se vaega fou o loʻo tuʻuina pea i le lotofuatiaifo o le talosaga.

“Sawing” lomifefiloi

E pei o soʻo se faiga suʻesuʻe, sa matou iai foi "mea moni" ma "tipi" ( lomifefiloi). I lo matou tulaga, i lenei tulaga sa latou galulue ai, mo se faataitaiga, tino mamanu fesili lemu tutusa po'o le anotusi o le fesili lava ia.

"Faʻamatalaga" na vaeluaina i le aso mo se taimi umi, o lea na matou tapeina filemu ai vaega tuai, ma latou le faʻalavelaveina i matou (logs!). Ae sa iai se faʻafitauli i lomifefiloi...

E le faapea e tele naua, ae tusa lava 100TB o "mea moni" na maua ai se lomifefiloi 2.5TB. E le mafai ona e tapeina lelei soʻo se mea mai se laulau faapena, e le mafai ona e faʻapipiʻiina i se taimi talafeagai, ma o le tusitusi i ai na faasolosolo malie lava.

E pei o se lomifefiloi... i totonu, e tatau ona tasi lava ona tu'uina atu fa'amatalaga ta'itasi... ma e sa'o lea, ae!.. E leai se tasi e taofia i tatou mai le mauaina. se lomifefiloi eseese mo aso taitasi! Ioe, o lenei mea e aumaia ai se faʻatonuga, ae e mafai ai:

  • tusi/faitau vave ona o le laititi o vaega
  • fa'aitiitia le manatua e ala i le galue i fa'asino igoa sili atu
  • teuina itiiti faʻamatalaga ona o le mafai ona vave aveese tuai

O se taunuuga o le lavelave atoa o fua Fa'aitiitia le uta CPU e ~30%, uta fa'avevela e ~50%:

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB
I le taimi lava e tasi, na matou faʻaauau pea ona tusia le mea lava e tasi i totonu o faʻamaumauga, naʻo le itiiti ifo o le uta.

#2. Fa'asologa o fa'amaumauga ma toe fa'afouina

O lea na matou faʻamautu i mea ua matou maua o aso taitasi e iai lana vaega ma fa'amaumauga. O le mea moni, CHECK (dt = '2018-10-12'::date) - ma o loʻo i ai se ki vaeluaga ma le tulaga mo se faʻamaumauga e pa'ū i totonu o se vaega patino.

Talu ai o lipoti uma i la matou auaunaga o loʻo fausia i totonu o le tala o se aso faʻapitoa, o faʻasinomaga mo i latou talu mai "taimi e le o vaeluaga" o ituaiga uma lava. (Sauvaa, Aso, Fa'ata'ita'iga Fuafuaga), (Sauvaa, Aso, Fuafua node), (Aso, Vasega sese, Server), ...

Ae o lea ua latou ola i vaega taitasi au kopi ta'itasi faapena faasinoupu... Ma i totonu o vaega taitasi aso e tumau... E foliga mai o lea ua tatou i ai i ia faasinoupu taitasi na o le ulufale atu i se tumau e pei o se tasi o fanua, lea e faʻateleina ai lona voluma ma le taimi suʻesuʻe mo ia, ae leai se taunuuga. Na latou tuua le salu ia i latou lava, oops...

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB
E manino le itu o le fa'ata'ita'iga - faigofie aveese le fanua aso mai fa'asino igoa uma i luga o laulau vaelua. Tuuina atu a tatou voluma, o le tupe maua e tusa 1TB/vaiaso!

Ia tatou maitauina o lenei terabyte sa tatau lava ona faamaumauina i se auala. O lona uiga, o tatou foi ua tatau nei ona laititi le utaina o le tisiki! O lenei ata o loʻo faʻaalia manino ai le aʻafiaga na maua mai le faʻamamaina, lea na matou tuuto atu i le vaiaso:

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB

#3. "Faasalalauina" le uta maualuga

O se tasi o faʻafitauli tele o faiga faʻapipiʻi o fa'amaopoopo fa'atasi nisi gaioiga e le manaʻomia. O nisi taimi "ona latou te leʻi matauina", o nisi taimi "sa faigofie i lena auala", ae o se taimi mulimuli ane e tatau ona e faʻaumatia.

Se'i o tatou fa'ailo i le ata muamua ma va'ai o lo'o i ai sau tisiki "pamu" i lalo o le uta ma le amplitude faalua i le va o faʻataʻitaʻiga lata ane, lea e manino "faʻamaufaʻailoga" e le tatau ona tupu i se numera o gaioiga:

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB

E fai lava si faigofie ona ausia. Ua uma ona matou mataituina toetoe lava 1000 servers, o lo'o fa'agasoloina ta'itasi e se filo fa'atatau, ma toe fa'atūina e filo ta'itasi le fa'aputuga o fa'amatalaga e lafo i le fa'amaumauga i se taimi fa'apitoa, e pei o lenei:

setInterval(sendToDB, interval)

O le faafitauli iinei o loo taoto tonu lava i le mea moni e faapea e amata uma filo ile taimi e tasi, o lea la, e toetoe lava o taimi uma e auina atu ai i latou e fetaui “i le mea moni.” Ioe #2...

O le mea e lelei ai, e faigofie lava ona faʻaleleia, fa'aopoopoina se fa'asologa "fa'afuase'i". i le taimi:

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

#4. Matou te teuina mea matou te manaʻomia

O le fa'afitauli maualuga fa'aleaganu'u lona tolu o le leai se cache o fea o iai o ia mafai avea.

Mo se faʻataʻitaʻiga, matou te mafaia ona faʻavasegaina i tulaga o nodes fuafuaga (o nei mea uma Seq Scan on users), ae vave mafaufau o latou, mo le tele o vaega, tutusa - latou galo.

Leai, ioe, e leai se mea e toe tusia i le database, e tipi ese ai le faʻaoso ma INSERT ... ON CONFLICT DO NOTHING. Ae o nei faʻamatalaga e oʻo lava i le database, ma e le manaʻomia faitau e siaki ai fete'ena'iga tatau ona fai. Ioe #3...

O le eseesega i le numera o faʻamaumauga na lafoina i le database aʻo leʻi faʻaogaina le caching e manino:

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB

Ma o le pa'ū faʻatasi lea o le uta teuina:

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB

Aofaʻi

"Terabyte-per-day" e foliga taufaafefe. Afai e te faia mea uma sa'o, ona sa'o lea 2^40 paita / 86400 sekone = ~12.5MB/se o'o lava i sikuli IDE desktop na uu. 🙂

Ae o le mea moni, e tusa lava pe faʻasefulu "skew" o le uta i le aso, e faigofie ona e faʻafetaui le gafatia o SSD faʻaonaponei.

Matou te tusia i PostgreSQL i lalo: 1 talimalo, 1 aso, 1TB

puna: www.habr.com

Faaopoopo i ai se faamatalaga