Kaydka Messenger (qaybta 2): qaybinta "faa'iido"

Waxaan si guul leh u qaabeynay qaab dhismeedka xogtayada PostgreSQL ee kaydinta waraaqaha, sanad ayaa ka soo wareegay, isticmaalayaashu si firfircoon ayay u buuxinayaan, oo hadda waxay ka kooban tahay malaayiin diiwaan, iyo... wax baa bilaabay in uu gaabinayo.

Kaydka Messenger (qaybta 2): qaybinta "faa'iido"
Point waa in Marka cabbirka miiska uu korayo, sidoo kale "qoto-dheer" ee tusmooyinka. - inkastoo logarithmically. Laakiin waqti ka dib tani waxay ku qasbaysaa server-ku inuu qabto hawlo la mid ah akhrinta/qorista ka baaraandegto marar badan oo ka badan bogag xog ahmarka loo eego bilowgii.

Tani waa meesha ay timaado samatabbixinta qaybinta.

Aan xuso in aynaan ka hadlayn sharding, taas oo ah, qaybinta xogta u dhaxaysa database-yada kala duwan ama server-yada. Sababtoo ah xitaa qaybinta xogta dhowr ah server-yada, kama takhalusi doontid dhibaatada tusmooyinka "barar" waqti ka dib. Way caddahay in haddii aad awoodid inaad maalin kasta geliso server cusub, markaa dhibaatooyinkaagu mar dambe kuma sii jiri doonaan diyaaradda xog gaar ah.

Ma tixgelin doonno qoraallo gaar ah oo loogu talagalay hirgelinta qaybinta "hardware", laakiin habka laftiisa - waxa iyo sida loo gooyo xaleef", iyo waxa rabitaanka noocaas ahi uu keeno.

Fikradda

Aan qeexno yoolkeena mar kale: waxaan rabnaa inaan hubinno in maanta, berri, iyo sanad gudaheed, qadarka xogta uu akhriyay PostgreSQL inta lagu jiro hawlgal kasta oo wax-akhris/qorid ah ayaa ahaan doona qiyaastii isku mid.

Mid kasta xog urursan oo taariikhaysan (farriimaha, dukumentiyada, diiwaannada, kaydka, ...) doorashada dabiiciga ah furaha qaybinta taariikhda/waqtiga dhacdada. Xaaladeena, dhacdadan oo kale waa daqiiqad dirida fariinta.

Ogsoonow in isticmaalayaashu had iyo jeer la shaqee oo kaliya kuwa "ugu dambeeyay". xogta noocan oo kale ah - waxay akhriyaan farriimaha ugu dambeeyay, falanqeeyaan qoraalada ugu dambeeyay,... Maya, dabcan, waxay dib u rogi karaan wakhti dheer, laakiin waxay sameeyaan tan aad dhif u ah.

Caqabadahan waxaa iska cad in xalka fariinta ugu fiican uu noqon doono qaybaha "maalinle". - Ka dib oo dhan, isticmaaleyaheygu wuxuu had iyo jeer akhrin doonaa waxa isaga u yimid "maanta" ama "shalay".

Haddii aan wax ku qorno oo aan akhrino ku dhawaad ​​hal qayb oo keliya inta lagu jiro maalinta, markaa tani waxay sidoo kale ina siinaysaa isticmaalka waxtarka badan ee xusuusta iyo diskka - maadaama dhammaan tusmooyinka qaybaha ay si fudud ugu habboon yihiin RAM-ka, si ka duwan kuwa "weyn iyo baruurta" ee miiska oo dhan.

talaabo talaabo

Guud ahaan, wax kasta oo kor lagu sheegay waxay u eg yihiin hal faa'iido oo joogto ah. Waana mid la gaari karo, laakiin tan waa inaan si adag isku daynaa - sababtoo ah Go'aanka ah in la qaybiyo mid ka mid ah hay'adaha waxay keenaysaa baahida loo qabo in la "arka" la xidhiidha.

Fariinta, hantideeda iyo saadaalinteeda

Tan iyo markii aan go'aansanay inaan farriimaha ku jarno taariikho, waxaa macno leh in sidoo kale loo qaybiyo hay'adaha-hantiyada iyaga ku xiran (faylalka ku lifaaqan, liiska qaatayaasha), iyo sidoo kale taariikhda fariinta.

Maadaama mid ka mid ah hawlaheenna caadiga ah uu si sax ah u daawanayo diiwaanka fariimaha (aan akhrin, soo galaya, dhammaan), sidoo kale waa macquul in "lagu sawiro" qaybinta taariikhaha fariinta.

Kaydka Messenger (qaybta 2): qaybinta "faa'iido"

Waxaan ku darnaa furaha qaybinta (taariikhda fariinta) dhammaan jadwallada: qaatayaasha, fayl-garaynta, diiwaan-gelinta. Uma baahnid inaad ku darto fariinta lafteeda, laakiin isticmaal DateTime jira.

threads

Maaddaama ay jirto hal mowduuc oo dhowr fariimo ah, ma jirto si loo "gooyo" isla qaab isku mid ah; waa inaad ku tiirsan tahay wax kale. Xaaladeena way ku habboon tahay taariikhda fariinta koowaad ee waraaqaha - taasi waa, xilliga abuurista, dhab ahaantii, mawduuca.

Kaydka Messenger (qaybta 2): qaybinta "faa'iido"

Ku dar furaha qaybinta (taariikhda mawduuca) dhammaan shaxanka: mawduuca, ka qaybqaataha.

Laakiin hadda laba dhibaato ayaa ina haysata.

  • Qaybtee ayaan ka raadiyaa fariimaha mowduuca?
  • Qaybtee ayaan mawduuca ka raadiyaa fariinta?

Waan awoodnaa, dabcan, inaan sii wadno raadinta dhammaan qaybaha, laakiin tani waxay noqon doontaa mid murugo leh waxayna diidi doontaa dhammaan guulahayaga. Sidaa darteed, si aan u ogaano meesha saxda ah ee la eego, waxaan samayn doonaa xiriiriye / tilmaamo macquul ah qaybaha:

  • waxaan ku dari doonaa fariinta goobta taariikhda mawduuca
  • aan ku daro mawduuca dhigay taariikhda fariinta waraaqahan (waxay noqon karaan miis gaar ah, ama taariikho kala duwan)

Kaydka Messenger (qaybta 2): qaybinta "faa'iido"

Maadaama ay jiri doonaan wax ka beddel yar oo lagu sameeyay liiska taariikhaha farriinta ee waraaq kasta oo gaar ah (ka dib oo dhan, ku dhawaad ​​dhammaan farriimaha waxay dhacaan 1-2 maalmood oo isku xigta), waxaan diiradda saari doonaa doorashadan.

Isku soo wada duuboo, qaab-dhismeedka xog-ururintayadu waxa uu qaatay qaabkan soo socda, iyada oo la tixgelinayo qaybinta:

Shaxanada: RU, haddii aad nacayb u qabto xarfaha Cyrillic ee magacyada miisaska/beeraha, waxa fiican inaadan eegin

-- сСкции ΠΏΠΎ Π΄Π°Ρ‚Π΅ сообщСния
CREATE TABLE "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅_YYYYMMDD"(
  "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅"
    uuid
      PRIMARY KEY
, "Π’Π΅ΠΌΠ°"
    uuid
, "Π”Π°Ρ‚Π°Π’Π΅ΠΌΡ‹"
    date
, "Автор"
    uuid
, "ДатаВрСмя" -- ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π°Ρ‚Ρƒ
    timestamp
, "ВСкст"
    text
);

CREATE TABLE "АдрСсат_YYYYMMDD"(
  "ДатаБообщСния"
    date
, "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅"
    uuid
, "ΠŸΠ΅Ρ€ΡΠΎΠ½Π°"
    uuid
, PRIMARY KEY("Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅", "ΠŸΠ΅Ρ€ΡΠΎΠ½Π°")
);

CREATE TABLE "Π€Π°ΠΉΠ»_YYYYMMDD"(
  "ДатаБообщСния"
    date
, "Π€Π°ΠΉΠ»"
    uuid
      PRIMARY KEY
, "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅"
    uuid
, "BLOB"
    uuid
, "Имя"
    text
);

CREATE TABLE "РССстрБообщСний_YYYYMMDD"(
  "ДатаБообщСния"
    date
, "Π’Π»Π°Π΄Π΅Π»Π΅Ρ†"
    uuid
, "ВипРССстра"
    smallint
, "ДатаВрСмя"
    timestamp
, "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅"
    uuid
, PRIMARY KEY("Π’Π»Π°Π΄Π΅Π»Π΅Ρ†", "ВипРССстра", "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅")
);
CREATE INDEX ON "РССстрБообщСний_YYYYMMDD"("Π’Π»Π°Π΄Π΅Π»Π΅Ρ†", "ВипРССстра", "ДатаВрСмя" DESC);

-- сСкции ΠΏΠΎ Π΄Π°Ρ‚Π΅ Ρ‚Π΅ΠΌΡ‹
CREATE TABLE "Π’Π΅ΠΌΠ°_YYYYMMDD"(
  "Π”Π°Ρ‚Π°Π’Π΅ΠΌΡ‹"
    date
, "Π’Π΅ΠΌΠ°"
    uuid
      PRIMARY KEY
, "Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚"
    uuid
, "НазваниС"
    text
);

CREATE TABLE "УчастникВСмы_YYYYMMDD"(
  "Π”Π°Ρ‚Π°Π’Π΅ΠΌΡ‹"
    date
, "Π’Π΅ΠΌΠ°"
    uuid
, "ΠŸΠ΅Ρ€ΡΠΎΠ½Π°"
    uuid
, PRIMARY KEY("Π’Π΅ΠΌΠ°", "ΠŸΠ΅Ρ€ΡΠΎΠ½Π°")
);

CREATE TABLE "Π”Π°Ρ‚Ρ‹Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉΠ’Π΅ΠΌΡ‹_YYYYMMDD"(
  "Π”Π°Ρ‚Π°Π’Π΅ΠΌΡ‹"
    date
, "Π’Π΅ΠΌΠ°"
    uuid
      PRIMARY KEY
, "Π”Π°Ρ‚Π°"
    date
);

Keydso dinaar qurux badan

Waa hagaag, ka waran haddii aan la isticmaalin xulashada qaybta classic iyadoo lagu saleynayo qaybinta qiyamka goobta (iyada oo loo marayo kiciyeyaasha iyo dhaxalka ama PARTITION BY), iyo "gacan" heerka codsiga, waxaad ogaan doontaa in qiimaha furaha qaybinta uu horayba ugu kaydsan yahay magaca miiska laftiisa.

Markaa haddii aad sidaas tahay Miyaad aad uga welwelsan tahay tirada xogta la kaydiyay?, markaa waxaad ka takhalusi kartaa meelahan "dheeraad ah" oo aad wax ka qabato miisaska gaarka ah. Run, dhammaan xulashooyinka dhowr qaybood ee kiiskan waa in loo wareejiyo dhinaca codsiga.

Source: www.habr.com

Add a comment