Aaye data Messenger (apakan 2): ipin “fun ere”

A ti ṣe apẹrẹ ni aṣeyọri ti igbekalẹ data data PostgreSQL wa fun titoju awọn ifọrọranṣẹ, ọdun kan ti kọja, awọn olumulo n kun ni itara, ati ni bayi o ni ninu milionu ti igbasilẹ, ati... nkankan bẹrẹ lati fa fifalẹ.

Aaye data Messenger (apakan 2): ipin “fun ere”
Otitọ ni pe Bi iwọn tabili ṣe n dagba, bẹ naa ni “ijinle” ti awọn atọka. - botilẹjẹ logarithmically. Ṣugbọn lẹhin akoko eyi fi agbara mu olupin naa lati ṣe awọn iṣẹ-ṣiṣe kika/kikọ kanna ilana ọpọlọpọ igba siwaju sii awọn oju-iwe ti dataju ni ibẹrẹ.

Eyi ni ibi ti o wa si igbala ipin.

Jẹ ki n ṣe akiyesi pe a ko sọrọ nipa sharding, iyẹn ni, pinpin data laarin awọn oriṣiriṣi infomesonu tabi awọn olupin. Nitori paapaa pinpin data sinu pupọ awọn olupin, iwọ kii yoo yọ kuro ninu iṣoro ti awọn atọka "wiwu" ni akoko pupọ. O han gbangba pe ti o ba ni anfani lati fi olupin tuntun kan si iṣẹ ni gbogbo ọjọ, lẹhinna awọn iṣoro rẹ kii yoo dubulẹ rara ni ọkọ ofurufu ti data data kan pato.

A yoo ṣe akiyesi kii ṣe awọn iwe afọwọkọ kan pato fun imuse ipin “ni ohun elo”, ṣugbọn ọna funrararẹ - kini ati bii o ṣe yẹ ki o “ge sinu awọn ege”, ati kini iru ifẹ naa yori si.

Erongba

Jẹ ki a ṣalaye ibi-afẹde wa lekan si: a fẹ lati rii daju pe loni, ọla, ati ni ọdun kan, iye data ti PostgreSQL ka lakoko iṣẹ kika / kikọ eyikeyi wa ni isunmọ kanna.

Fun eyikeyi chronologically akojo data (awọn ifiranṣẹ, awọn iwe aṣẹ, awọn akọọlẹ, awọn ile ifi nkan pamosi, ...) yiyan adayeba bi bọtini ipin jẹ iṣẹlẹ ọjọ / akoko. Ninu ọran wa, iru iṣẹlẹ bẹẹ jẹ akoko ti fifiranṣẹ ifiranṣẹ naa.

Akiyesi pe awọn olumulo fere nigbagbogbo ṣiṣẹ nikan pẹlu awọn “titun”. iru data - wọn ka awọn ifiranṣẹ tuntun, ṣe itupalẹ awọn akọọlẹ tuntun,… Rara, nitorinaa, wọn le yi lọ siwaju sẹhin ni akoko, ṣugbọn wọn ṣe eyi ṣọwọn.

Lati awọn ihamọ wọnyi o han gbangba pe ojutu ifiranṣẹ ti o dara julọ yoo jẹ awọn apakan "ojoojumọ". - lẹhinna, olumulo wa yoo fẹrẹ ka nigbagbogbo ohun ti o wa si “loni” tabi “lana”.

Ti a ba kọ ati ka fere nikan ni apakan kan nigba ọjọ, lẹhinna eyi tun fun wa siwaju sii daradara lilo ti iranti ati disk Niwọn igba ti gbogbo awọn atọka apakan ni irọrun wọ inu Ramu, ni idakeji si awọn “nla ati ọra” jakejado tabili naa.

igbese-nipasẹ-Igbese

Ni gbogbogbo, ohun gbogbo ti a wi loke dun bi ọkan lemọlemọfún èrè. Ati pe o ṣee ṣe, ṣugbọn fun eyi a yoo ni lati gbiyanju lile - nitori ipinnu lati pin ọkan ninu awọn ile-iṣẹ yori si iwulo lati “ri” nkan ti o somọ.

Ifiranṣẹ, awọn ohun-ini rẹ ati awọn asọtẹlẹ

Niwọn igba ti a pinnu lati ge awọn ifiranṣẹ nipasẹ awọn ọjọ, o jẹ oye lati tun pin awọn nkan-ini ti o dale lori wọn (awọn faili ti o somọ, atokọ ti awọn olugba), ati tun nipa ọjọ ti ifiranṣẹ.

Niwọn igba ti ọkan ninu awọn iṣẹ-ṣiṣe aṣoju wa ti n wo awọn iforukọsilẹ ifiranṣẹ ni deede (a ko ka, ti nwọle, gbogbo), o tun jẹ ohun ti o bọgbọnmu lati “fa wọn sinu” sinu ipin nipasẹ awọn ọjọ ifiranṣẹ.

Aaye data Messenger (apakan 2): ipin “fun ere”

A ṣafikun bọtini ipin (ọjọ ifiranṣẹ) si gbogbo awọn tabili: awọn olugba, faili, awọn iforukọsilẹ. O ko ni lati ṣafikun si ifiranṣẹ funrararẹ, ṣugbọn lo DateTime ti o wa tẹlẹ.

Awọn koko-ọrọ

Niwọn igba ti koko-ọrọ kan wa fun ọpọlọpọ awọn ifiranṣẹ, ko si ọna lati “ge” ni awoṣe kanna; o ni lati gbẹkẹle nkan miiran. Ninu ọran wa o jẹ apẹrẹ ọjọ ti ifiranṣẹ akọkọ ni ifọrọranṣẹ - eyini ni, akoko ti ẹda, ni otitọ, ti koko-ọrọ naa.

Aaye data Messenger (apakan 2): ipin “fun ere”

Ṣafikun bọtini ipin (ọjọ koko) si gbogbo awọn tabili: koko, alabaṣe.

Ṣugbọn nisisiyi a ni awọn iṣoro meji ni ẹẹkan:

  • Ninu apakan wo ni MO yẹ ki n wa awọn ifiranṣẹ lori koko naa?
  • Ninu apakan wo ni MO yẹ ki n wa koko-ọrọ lati ifiranṣẹ naa?

A le, nitorinaa, tẹsiwaju lati wa ni gbogbo awọn apakan, ṣugbọn eyi yoo jẹ ibanujẹ pupọ ati pe yoo kọ gbogbo awọn ere wa. Nitorinaa, lati le mọ ibiti o ti wo ni deede, a yoo ṣe awọn ọna asopọ ọgbọn / awọn itọka si awọn apakan:

  • a yoo fi kun ninu ifiranṣẹ naa koko ọjọ aaye
  • jẹ ki a fi kun si koko ṣeto ọjọ ifiranṣẹ Ifiweranṣẹ yii (le jẹ tabili lọtọ, tabi titobi awọn ọjọ)

Aaye data Messenger (apakan 2): ipin “fun ere”

Niwọn bi awọn iyipada diẹ yoo wa si atokọ ti awọn ọjọ ifiranṣẹ fun ifọrọranṣẹ kọọkan (lẹhinna, gbogbo awọn ifiranṣẹ ṣubu ni awọn ọjọ 1-2 nitosi), Emi yoo dojukọ aṣayan yii.

Lapapọ, eto data data wa gba fọọmu atẹle, ni akiyesi ipin:

Awọn tabili: RU, ti o ba ni ikorira si alfabeti Cyrillic ni awọn orukọ ti awọn tabili/awọn aaye, o dara lati ma wo.

-- секции по дате сообщения
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
);

Fi Penny lẹwa kan pamọ

O dara, kini ti a ko ba lo Ayebaye apakan aṣayan da lori pinpin awọn iye aaye (nipasẹ awọn okunfa ati ogún tabi PARTITION BY), ati “pẹlu ọwọ” ni ipele ohun elo, iwọ yoo ṣe akiyesi pe iye bọtini ipin ti wa ni ipamọ tẹlẹ ni orukọ tabili funrararẹ.

Nitorina ti o ba wa bẹ Ṣe o ni aniyan pupọ nipa iye data ti o fipamọ bi?, lẹhinna o le yọkuro awọn aaye “afikun” wọnyi ati adirẹsi awọn tabili kan pato. Lootọ, gbogbo awọn yiyan lati awọn apakan pupọ ninu ọran yii yoo ni lati gbe si ẹgbẹ ohun elo.

orisun: www.habr.com

Fi ọrọìwòye kun