Angon-drakitra Messenger (fizarana 2): fizarana "ho tombony"

Namboarina tamim-pahombiazana ny firafitry ny angon-drakitra PostgreSQL ho an'ny fitehirizana ny taratasim-panoratana, herintaona no lasa, mameno azy io ny mpampiasa, ary izao dia misy rakitsoratra an-tapitrisany, ary... nisy zavatra nanomboka nihena.

Angon-drakitra Messenger (fizarana 2): fizarana "ho tombony"
Point dia Rehefa mitombo ny haben'ny latabatra, dia mitombo koa ny "halalin'ny" fanondroana. - na dia logaritma aza. Saingy rehefa mandeha ny fotoana dia manery ny mpizara hanao asa mamaky/manoratra mitovy manodina pejy im-betsaka ny angonanoho ny tamin’ny voalohany.

Eto no tonga ny famonjena fizarana.

Marihiko fa tsy resaka sharding no resahina, izany hoe fizarana angon-drakitra eo amin'ny angon-drakitra na mpizara samihafa. Satria na mizara ny angon-drakitra ho maro servers, dia tsy hanaisotra ny olan'ny indexes "mivonto" ianao rehefa mandeha ny fotoana. Mazava fa raha azonao atao ny mametraka mpizara vaovao amin'ny fiasana isan'andro, dia tsy handainga intsony ny olanao ao amin'ny fiaramanidina misy angona manokana.

Tsy hojerentsika ny script manokana amin'ny fampiharana ny fizarazarana "amin'ny hardware", fa ny fomba fiasa - inona ary ahoana no tokony ho "tapa-kazo", ary inona no mahatonga izany faniriana izany.

foto-kevitra

Andeha hofaritana indray ny tanjonay: tianay ho azo antoka fa anio, rahampitso, ary amin'ny herintaona, ny habetsaky ny angon-drakitra vakian'ny PostgreSQL mandritra ny asa mamaky/manoratra dia tsy miova.

Na inona na inona angona voaangona ara-potoana (hafatra, antontan-taratasy, logs, archives, ...) ny safidy voajanahary ho fanalahidin'ny fisarahana dia daty/ora hetsika. Amin'ny tranga misy antsika, ny hetsika toy izany dia fotoana fandefasana ny hafatra.

Mariho fa ny mpampiasa saika foana miasa miaraka amin'ireo "vaovao" ihany angon-drakitra toy izany - mamaky ny hafatra farany izy ireo, mamakafaka ny diary farany,... Tsia, mazava ho azy, afaka mikoriana lavidavitra kokoa amin'ny fotoana izy ireo, saingy tsy dia manao izany izy ireo.

Avy amin'ireo teritery ireo dia mazava fa ny vahaolana tsara indrindra amin'ny hafatra fizarana "isan'andro". - raha ny marina, ny mpampiasa anay dia saika hamaky izay tonga taminy "anio" na "omaly".

Raha manoratra sy mamaky saika amin'ny fizarana iray ihany isika mandritra ny andro, dia manome antsika koa izany mahomby kokoa ny fampiasana ny fahatsiarovana sy ny kapila - satria ny indeksan'ny fizarana rehetra dia mora miditra amin'ny RAM, mifanohitra amin'ny "lehibe sy matavy" manerana ny latabatra.

tsikelikely

Amin'ny ankapobeny, ny zavatra rehetra voalaza etsy ambony dia toa tombony tsy tapaka. Ary azo tratrarina izany, fa noho izany dia tsy maintsy hiezaka mafy isika - satria ny fanapahan-kevitra hanasaraka ny iray amin'ireo sampana dia mitarika ho amin'ny filΓ na "mahita" ny mifandray.

Hafatra, ny toetrany ary ny vinavina

Koa satria nanapa-kevitra ny hanapaka ny hafatra amin'ny daty izahay, dia mitombina ihany koa ny mizara ireo singa-fananana izay miankina amin'izy ireo (rakitra mipetaka, lisitry ny mpandray), ary koa amin'ny datin'ny hafatra.

Satria ny iray amin'ireo asa mahazatra ataontsika dia ny mijery ny rejisitra hafatra (tsy voavaky, miditra, ny rehetra), dia lojika ihany koa ny "misintona azy ireo" amin'ny fizarana amin'ny datin'ny hafatra.

Angon-drakitra Messenger (fizarana 2): fizarana "ho tombony"

Ampio ny fanalahidin'ny fisarahana (daty hafatra) amin'ny latabatra rehetra: mpandray, rakitra, rejisitra. Tsy mila manampy azy amin'ny hafatra ianao, fa ampiasao ny DateTime efa misy.

kofehy

Satria tsy misy afa-tsy lohahevitra iray ho an'ny hafatra maromaro, tsy misy fomba ahafahana "manapaka" azy amin'ny modely mitovy; tsy maintsy miantehitra amin'ny zavatra hafa ianao. Amin'ny tranga misy antsika dia idealy izany datin'ny hafatra voalohany amin'ny fifanekena β€” izany hoe ny fotoana famoronana, raha ny marina, ny lohahevitra.

Angon-drakitra Messenger (fizarana 2): fizarana "ho tombony"

Ampio ny fanalahidin'ny fizarana (daty lohahevitra) amin'ny tabilao rehetra: lohahevitra, mpandray anjara.

Saingy izao dia manana olana roa miaraka isika:

  • Amin'ny fizarana inona no tokony hikaroka hafatra momba ny lohahevitra?
  • Any amin'ny fizarana inona no tokony hikaroka ny lohahevitra avy amin'ny hafatra?

Azontsika atao, mazava ho azy, ny manohy mikaroka amin'ny fizarana rehetra, saingy tena mampalahelo izany ary hanalavitra ny fandresena rehetra. Noho izany, mba hahafantarana hoe aiza marina no hijerena, dia hanao rohy / tondro lojika amin'ny fizarana izahay:

  • ampianay ny hafatra saha datin'ny lohahevitra
  • ndao ampio ny lohahevitra napetraka ny datin'ny hafatra ity taratasim-pifandraisana ity (mety ho latabatra misaraka, na daty maromaro)

Angon-drakitra Messenger (fizarana 2): fizarana "ho tombony"

Satria hisy fanovana vitsivitsy amin'ny lisitry ny datin'ny hafatra ho an'ny taratasim-pifandraisana tsirairay (na izany aza, saika ny hafatra rehetra dia latsaka amin'ny 1-2 andro mifanakaiky), hifantoka amin'ity safidy ity aho.

Amin'ny fitambarany, ny firafitry ny angon-drakitray dia nandray ity endrika manaraka ity, raha jerena ny fizarazarana:

Tabilao: RU, raha toa ianao ka manana aversion amin'ny abidy cyrillic amin'ny anaran'ny latabatra / saha, dia tsara kokoa ny tsy mijery

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

Tehirizo vola kely

Ahoana raha tsy mampiasa isika safidy fizarana mahazatra mifototra amin'ny fizarana ny soatoavin'ny saha (amin'ny alΓ lan'ny trigger sy lova na PARTITION BY), ary "manana" amin'ny ambaratonga fampiharana, ho hitanao fa efa voatahiry amin'ny anaran'ny latabatra mihitsy ny sandan'ny fanalahidin'ny fisarahana.

Koa raha izany ianao Tena manahy momba ny habetsaky ny angona voatahiry ve ianao?, dia azonao atao ny manala ireo saha "fanampiny" ireo ary mametraka tabilao manokana. Marina fa ny safidy rehetra avy amin'ny fizarana maromaro amin'ity tranga ity dia tsy maintsy afindra amin'ny lafiny fampiharana.

Source: www.habr.com

Add a comment