Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB

Na nso nso a, m gwara gị otú, na-eji ọkọlọtọ Ezi ntụziaka mụbaa arụmọrụ nke ajụjụ ọgụgụ SQL site na nchekwa data PostgreSQL. Taa, anyị ga-ekwu maka otú Enwere ike ịme ndekọ nke ọma na nchekwa data na-ejighi "mgbagha" ọ bụla na nhazi - naanị site na ịhazi data nke ọma.

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB

#1. Nkebi

Otu akụkọ gbasara otu na ihe kpatara o ji baa uru ịhazi etinyere nkewa "na tiori" adịlarị, ebe a anyị ga-ekwu maka omume nke itinye ụfọdụ ụzọ n'ime anyị ọrụ nlekota maka narị narị sava PostgreSQL.

"Ihe ụbọchị gara aga..."

Na mbido, dị ka MVP ọ bụla, ọrụ anyị malitere n'okpuru ibu dị mfe - a na-eme nyocha naanị maka sava iri kachasị dị egwu, tebụl niile dị obere kọmpat… , ọzọ anyị gbalịrị ime ihe na otu n'ime tebụl 1.5TB n'ogo, anyị ghọtara na ọ bụ ezie na ọ ga-ekwe omume ịnọgide na-adị ndụ otú a, ọ dị nnọọ mfe.

Oge ndị ahụ fọrọ nke nta ka ọ bụrụ oge egwu, ụdị dị iche iche nke PostgreSQL 9.x dị mkpa, ya mere a ga-eji aka mee nkewa niile "iji aka" - site na. table nketa na triggers na-ebugharị na ike EXECUTE.

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB
Ngwọta sipụtara wee bụrụ nke zuru ụwa ọnụ nke na enwere ike ịtụgharị ya na tebụl niile:

  • Ekwuwapụtara tebụl nne na nna “nkụnye isi” efu, nke kọwara ihe niile mkpa indexes na triggers.
  • Edere ndekọ sitere na echiche nke onye ahịa na tebụl "mgbọrọgwụ", na-eji n'ime mkpagharị ụzọ BEFORE INSERT etinyere ndekọ ahụ "anụ ahụ" n'ime ngalaba achọrọ. Ọ bụrụ na ọ nweghị ihe dị otú ahụ, anyị wepụrụ iche na ...
  • … site na iji CREATE TABLE ... (LIKE ... INCLUDING ...) e kere dabere na ndebiri nke tebụl nne na nna ngalaba nwere mmachi na ụbọchị achọrọnke mere na mgbe eweghachiri data, a na-agụ naanị na ya.

PG10: mbọ mbụ

Mana ikewa site na ihe nketa adabaghị na akụkọ ihe mere eme nke ọma maka imekọ ihe na iyi ederede na-arụsi ọrụ ike ma ọ bụ ọnụ ọgụgụ buru ibu nke akụkụ ụmụaka. Dịka ọmụmaatụ, ị nwere ike icheta na algọridim maka ịhọrọ ngalaba achọrọ nwere mgbagwoju anya anọ, na ọ na-arụ ọrụ na 100+ ngalaba, gị onwe gị ghọtara otú ...

Na PG10 ọnọdụ a kachasị mma site na itinye nkwado nkebi obodo. Ya mere, anyị gbalịrị ozugbo itinye ya ozugbo ka ịkwaga nchekwa ahụ, mana ...

Dịka ọ siri pụta mgbe gwuchara akwụkwọ ntuziaka ahụ, tebụl nke kewara ekewa na ụdị a bụ:

  • anaghị akwado nkọwa index
  • anaghị akwado mkpali na ya
  • enweghị ike ịbụ "mkpụrụ obi" onye ọ bụla
  • akwadola INSERT ... ON CONFLICT
  • enweghị ike ịmepụta ngalaba na-akpaghị aka

N'ịbụ onye natara ọkpọ na-egbu mgbu na ọkpọiso, anyị chọpụtara na ọ gaghị ekwe omume ime n'emeghị ka ngwa ahụ gbanwee, ma yigharịrị nyocha ọzọ ruo ọnwa isii.

PG10: ohere nke abụọ

Ya mere, anyị malitere idozi nsogbu ndị bilitere n'otu n'otu:

  1. N'ihi na-akpalite na ON CONFLICT Anyị chọpụtara na anyị ka chọrọ ha ebe a na ebe ahụ, n'ihi ya, anyị mere usoro etiti iji rụpụta ha tebụl nnọchiteanya.
  2. Etufuru "routing" na mkpali - ya bụ, si EXECUTE.
  3. Ha wepụrụ ya iche Tebụl template nwere ndeksi niilenke mere na ha anọghị na tebụl proxy.

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB
N'ikpeazụ, mgbe ihe a nile gasịrị, anyị kewara okpokoro isi na obodo. A ka na-ahapụ imepụta ngalaba ọhụrụ na akọnuche ngwa ahụ.

Akwụkwọ ọkọwa okwu "ịcha".

Dị ka ọ bụla usoro nyocha, anyị nwekwara "eziokwu" na "mbelata" (akwụkwọ ọkọwa okwu). N'ọnọdụ anyị, na ikike a, ha mere ihe atụ, ahụ template ajuju ajuju dika nwayo ma obu ederede nke ajuju n'onwe ya.

A na-ekesa "Eziokwu" site n'ụbọchị ruo ogologo oge, n'ihi ya, anyị jiri nwayọọ hichapụ akụkụ oge ochie, ha enyeghịkwa anyị nsogbu (akwụkwọ ndekọ!). Mana enwere nsogbu na akwụkwọ ọkọwa okwu...

Ọ bụghị na-ekwu na e nwere ọtụtụ n'ime ha, ma ihe dị ka 100TB nke “eziokwu” rụpụtara akwụkwọ ọkọwa okwu 2.5TB. Ị nweghị ike ihichapụ ihe ọ bụla na tebụl dị otú ahụ nke ọma, ị nweghị ike ịpịkọta ya n'oge zuru oke, na iji nwayọọ na-edegara ya akwụkwọ ozi.

Dị ka akwụkwọ ọkọwa okwu ... n'ime ya, a ga-egosipụta ntinye ọ bụla kpọmkwem otu ugboro ... na nke a bụ eziokwu, ma!... Ọ dịghị onye na-egbochi anyị inwe. akwụkwọ ọkọwa okwu dị iche iche maka ụbọchị ọ bụla! Ee, nke a na-eweta ụfọdụ redundancy, ma ọ na-enye ohere:

  • dee/gụọ ngwa ngwa n'ihi nta ngalaba size
  • eri obere ebe nchekwa site na iji ndenye kọmpat ndị ọzọ na-arụ ọrụ
  • na-echekwa obere data n'ihi ike ngwa ngwa wepụ ihe ochie

N'ihi nke dum mgbagwoju nke jikoro Ibu CPU belatara site ~ 30%, ibu disk site ~ 50%:

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB
N'otu oge ahụ, anyị nọgidere na-ede otu ihe ahụ kpọmkwem na nchekwa data, dị nnọọ obere ibu.

#2. Database evolushọn na refactoring

Ya mere, anyị kpebiri n'ihe anyị nwere ụbọchị ọ bụla nwere ngalaba nke ya na data. N'ezie, CHECK (dt = '2018-10-12'::date) - ma enwere igodo nkebi na ọnọdụ maka ndekọ ịdaba n'otu akụkụ.

Ebe ọ bụ na a na-ewu akụkọ niile dị na ọrụ anyị n'ọnọdụ nke otu ụbọchị, ndenye aha maka ha kemgbe "oge ndị na-abụghị nkebi" bụ ụdị niile. (Serva, Ụbọchị, Atụmatụ Atụmatụ), (Serva, Ụbọchị, Atụmatụ ọnụ), (Ụbọchị, Klas mperi, nkesa)...

Ma ugbu a, ha bi na ngalaba ọ bụla oyiri gị nke ọ bụla dị otú ahụ index... Na n'ime nke ọ bụla ngalaba ụbọchị bụ mgbe niile... Ọ na-apụta na ugbu a, anyị nọ na nke ọ bụla dị otú ahụ index naanị tinye a mgbe niile dị ka otu n'ime ubi, nke na-abawanye ma olu ya na oge ọchụchọ maka ya, ma ọ dịghị eweta nsonaazụ ọ bụla. Ha hapụrụ onwe ha rake, oop...

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB
Ntuziaka nke njikarịcha doro anya - dị mfe wepụ mpaghara ụbọchị na ndeksi niile na tebụl ndị kewara ekewa. Nyere mpịakọta anyị, uru bụ ihe 1TB / izu!

Ugbu a, ka anyị mara na terabyte a ka ga-edekọ n'ụzọ ụfọdụ. Ya bụ, anyị onwe anyị diski kwesịrị ibu ugbu a obere! Foto a gosipụtara n'ụzọ doro anya mmetụta a na-enweta site na nhicha, nke anyị tinyere otu izu:

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB

#3. "Na-agbasa" ibu kacha elu

Otu n'ime nnukwu nsogbu nke loaded sistem bụ ngakọrịta ugboro ugboro ụfọdụ arụmọrụ na-adịghị achọ ya. Mgbe ụfọdụ "n'ihi na ha achọpụtaghị", mgbe ụfọdụ "ọ dị mfe otú ahụ", ma n'oge na-adịghị, ị ga-ekpochapụ ya.

Ka anyị bugharịa na foto gara aga wee hụ na anyị nwere diski "nfuli" n'okpuru ibu na njupụta okpukpu abụọ n'etiti ihe atụ ndị dị n'akụkụ, nke doro anya na "ọnụọgụ" ekwesịghị ime n'ọtụtụ ọrụ:

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB

Nke a dị nnọọ mfe iji nweta. Anyị amalitela nlekota ihe fọrọ nke nta ka ọ bụrụ 1000 sava, A na-ahazi nke ọ bụla site na eriri ezi uche dị iche iche, na nke ọ bụla na-emezigharị ozi a chịkọbara nke a ga-eziga na nchekwa data n'oge ụfọdụ, ihe dị ka nke a:

setInterval(sendToDB, interval)

Nsogbu ebe a dabere kpọmkwem n'eziokwu ahụ eri niile na-amalite n'ihe dịka otu oge, ya mere oge izipu ha na-adakọ mgbe niile “ruo n'ókè.” Ehee #2...

Ọ dabara nke ọma, nke a dị mfe idozi, na-agbakwụnye ọsọ ọsọ "random". site na oge:

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

#4. Anyị na-echekwa ihe anyị chọrọ

Nsogbu dị elu nke ọdịnala nke atọ bụ enweghị oghere ebe ọ nọ nwere ike bụrụ.

Dịka ọmụmaatụ, anyị mere ka o kwe omume nyochaa n'usoro nke atụmatụ ọnụ (ihe ndị a niile Seq Scan on users), ma ozugbo chere na ha bụ, maka ọtụtụ akụkụ, otu - ha chefuru.

Mba, n'ezie, ọ dịghị ihe edere na nchekwa data ọzọ, nke a na-ebipụ ihe na-akpalite ya INSERT ... ON CONFLICT DO NOTHING. Mana data a ka na-erute na nchekwa data, ọ dịghịkwa mkpa ịgụ akwụkwọ iji lelee esemokwu ga-eme. Ehee #3...

Ọdịiche dị na ọnụọgụ ndekọ ezigara na nchekwa data tupu/mgbe emechara caching bụ ihe doro anya:

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB

Ma nke a bụ mgbada ibu nchekwa na-esote:

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB

Ọnụ

"Terabyte-kwa ụbọchị" na-ada nnọọ egwu. Ọ bụrụ na ị na-eme ihe niile nke ọma, mgbe ahụ nke a bụ naanị 2^40 bytes / 86400 sekọnd = ~ 12.5MB/sna ọbụna IDE skru desktọpụ jidere. 🙂

Mana nke ọma, ọbụlagodi na “skew” ibu dị okpukpu iri n'ụbọchị, ị nwere ike izute ike nke SSD nke oge a.

Anyị na-ede na PostgreSQL na sublight: 1 onye ọbịa, ụbọchị 1, 1TB

isi: www.habr.com

Tinye a comment