Nawonso database ya Messenger (gawo 2): kugawa "popeza phindu"

Tapanga bwino dongosolo la database yathu ya PostgreSQL yosungira makalata, chaka chatha, ogwiritsa ntchito akudzaza, ndipo tsopano ili ndi mamiliyoni a zolemba, ndipo... chinachake chinayamba kuchepa.

Nawonso database ya Messenger (gawo 2): kugawa "popeza phindu"
Point ndi kuti Pamene kukula kwa tebulo kumakula, momwemonso "kuya" kwa ma index. - ngakhale logarithmically. Koma pakapita nthawi izi zimakakamiza seva kuti igwire ntchito zowerengera / kulemba zomwezo konza masamba ochulukirapo nthawi zambirikuposa pachiyambi.

Apa ndi pamene zimabwera kudzapulumutsa magawo.

Ndiloleni ndizindikire kuti sitikulankhula za sharding, ndiko kuti, kugawa deta pakati pa ma database osiyanasiyana kapena ma seva. Chifukwa ngakhale kugawa deta mu angapo ma seva, simudzachotsa vuto la indexes "kutupa" pakapita nthawi. Zikuwonekeratu kuti ngati mutha kuyika seva yatsopano tsiku lililonse, ndiye kuti mavuto anu sadzakhalanso mu ndege ya database inayake.

Sitidzalingalira zolemba zenizeni zogwiritsira ntchito magawo "mu hardware", koma njira yokhayokha - zomwe ziyenera "kudulidwa mu magawo", ndi zomwe chilakolako choterocho chimatsogolera.

Malingaliro

Tiyeni tifotokozenso cholinga chathu: tikufuna kuwonetsetsa kuti lero, mawa, ndi chaka chimodzi, kuchuluka kwa deta yowerengedwa ndi PostgreSQL pa ntchito iliyonse yowerengera / kulemba imakhalabe yofanana.

Kwa aliyense deta yosonkhanitsidwa motsatira nthawi (mauthenga, zikalata, zipika, zosungidwa, ...) kusankha kwachilengedwe ngati kiyi yogawa ndi tsiku/nthawi. Kwa ife, chochitika choterocho ndi mphindi yotumiza uthenga.

Dziwani kuti ogwiritsa ntchito pafupifupi nthawi zonse gwirani ntchito ndi "zaposachedwa". deta yotere - amawerenga mauthenga aposachedwa, amasanthula zipika zaposachedwa,... Ayi, ndithudi, amatha kupitilira mmbuyo nthawi, koma amachita izi kawirikawiri.

Kuchokera pazovuta izi zikuwonekeratu kuti yankho labwino kwambiri la uthenga lingakhale magawo "tsiku". - pambuyo pake, wogwiritsa ntchito nthawi zonse amawerenga zomwe zidabwera kwa iye "lero" kapena "dzulo".

Ngati timalemba ndikuwerenga pafupifupi gawo limodzi masana, ndiye kuti izi zimatipatsanso kugwiritsa ntchito bwino kukumbukira ndi disk - popeza magawo onse amalozera mosavuta mu RAM, mosiyana ndi "zazikulu ndi zonenepa" patebulo lonselo.

mwatsatane-tsatane

Kawirikawiri, zonse zomwe zanenedwa pamwambapa zikuwoneka ngati phindu limodzi lopitirira. Ndipo ndizotheka, koma chifukwa cha izi tiyenera kuyesetsa kwambiri - chifukwa chigamulo chogawa chimodzi mwa mabungwewo kumabweretsa kufunikira "kuona" zomwe zikugwirizana nazo.

Uthenga, katundu wake ndi zoyerekeza

Popeza tinaganiza zodula mauthenga ndi madeti, ndizomveka kugawanso zinthu zomwe zimadalira iwo (mafayilo ophatikizidwa, mndandanda wa olandila), ndi komanso ndi tsiku la uthenga.

Popeza imodzi mwa ntchito zomwe timachita ndikuwonera zolemba zamauthenga (zosawerengeka, zobwera, zonse), ndizomveka "kuwakokera" kuti agawane ndi masiku a uthenga.

Nawonso database ya Messenger (gawo 2): kugawa "popeza phindu"

Timawonjezera kiyi yogawa (tsiku lauthenga) kumatebulo onse: olandila, fayilo, zolembetsa. Simuyenera kuwonjezera pa uthenga womwewo, koma gwiritsani ntchito DateTime yomwe ilipo.

ulusi

Popeza pali mutu umodzi wokha wa mauthenga angapo, palibe njira "yodula" mu chitsanzo chomwecho; muyenera kudalira chinachake. Kwa ife ndi abwino tsiku la uthenga woyamba m'makalata - ndiko kuti, nthawi yolenga, kwenikweni, ya mutuwo.

Nawonso database ya Messenger (gawo 2): kugawa "popeza phindu"

Onjezani kiyi yogawa (tsiku la mutu) kumatebulo onse: mutu, wophunzira.

Koma tsopano tili ndi mavuto awiri nthawi imodzi:

  • Ndi gawo liti lomwe ndiyenera kuyang'ana mauthenga pamutuwu?
  • Ndi gawo liti lomwe ndiyenera kuyang'ana mutu wa uthengawu?

Tikhoza, ndithudi, kupitiriza kufufuza m'magawo onse, koma izi zidzakhala zachisoni kwambiri ndipo zidzanyalanyaza zopambana zathu zonse. Chifukwa chake, kuti tidziwe komwe tikuyenera kuyang'ana, tipanga maulalo / zolozera zomveka ku zigawo:

  • tidzawonjezera mu uthengawo tsiku la mutu
  • tiwonjeze pamutuwu tsiku la uthenga lakhazikitsidwa makalata awa (atha kukhala tebulo lapadera, kapena masiku angapo)

Nawonso database ya Messenger (gawo 2): kugawa "popeza phindu"

Popeza padzakhala zosintha zochepa pamndandanda wamasiku a mauthenga a aliyense payekhapayekha (pambuyo pa zonse, pafupifupi mauthenga onse amagwera masiku 1-2 oyandikana nawo), ndidzayang'ana pankhaniyi.

Pazonse, kapangidwe ka nkhokwe yathu idatenga mawonekedwe awa, poganizira kugawa:

Matebulo: RU, ngati mumadana ndi zilembo za Cyrillic m'maina a matebulo / minda, ndibwino kuti musayang'ane

-- сСкции ΠΏΠΎ Π΄Π°Ρ‚Π΅ сообщСния
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
);

Sungani khobiri lokongola

Chabwino, bwanji ngati sitigwiritsa ntchito classic sectioning njira kutengera kugawa kwamitengo yamunda (kudzera zoyambitsa ndi cholowa kapena GAWO BY), ndi "pamanja" pamlingo wofunsira, mudzazindikira kuti mtengo wa kiyi yogawa wasungidwa kale m'dzina la tebulo lomwe.

Ndiye ngati muli choncho Kodi mukuda nkhawa kwambiri ndi kuchuluka kwa data yomwe yasungidwa?, ndiye mutha kuchotsa minda "yowonjezera" ndikuyika matebulo enieni. Zowona, zisankho zonse m'magawo angapo pankhaniyi ziyenera kusamutsidwa ku mbali yofunsira.

Source: www.habr.com

Kuwonjezera ndemanga