Messenger database (bahin 1): pagdesinyo sa base framework

Giunsa nimo paghubad ang mga kinahanglanon sa negosyo sa piho nga istruktura sa datos gamit ang panig-ingnan sa pagdesinyo sa usa ka database sa messenger gikan sa wala.

Messenger database (bahin 1): pagdesinyo sa base framework
Ang among base dili ingon kadako ug maapod-apod, sama sa VKontakte o Badoo, apan "mao nga kini", apan kini maayo - functional, paspas ug angay sa usa ka server PostgreSQL - aron mahimo nimong i-deploy ang usa ka lahi nga pananglitan sa serbisyo sa usa ka lugar sa kilid, pananglitan.

Busa, dili kami magtandog sa mga isyu sa sharding, replication ug geo-distributed nga mga sistema, apan mag-focus sa mga solusyon sa sirkito sulod sa database.

Lakang 1: Pipila ka mga detalye sa negosyo

Dili kami magdesinyo sa among mensahe nga abstract, apan i-integrate kini sa palibot corporate social network. Sa ato pa, ang atong mga tawo dili "nagsinabtanay lang," apan nakigsulti sa usag usa sa konteksto sa pagsulbad sa pipila nga mga problema sa negosyo.

Ug unsa ang mga buluhaton sa usa ka negosyo?.. Atong tan-awon ang panig-ingnan ni Vasily, ang pangulo sa departamento sa pagpauswag.

  • "Nikolai, alang niini nga buluhaton kinahanglan namon ang usa ka patch karon!"
    Kini nagpasabot nga ang mga sulat mahimong ipahigayon sa konteksto sa pipila dokumento.
  • β€œKolya, moadto ka ba sa Dota karong gabii?”
    Sa ato pa, bisan ang usa ka parisan sa mga interlocutors mahimo nga mag-istoryahanay nga dungan sa lain-laing mga topiko.
  • β€œPeter, Nikolay, tan-awa sa attachment ang listahan sa presyo sa bag-ong server.”
    Busa, mahimong adunay usa ka mensahe pipila ka nakadawat. Sa kini nga kaso, ang mensahe mahimong adunay sulod Gilakip nga mga file.
  • β€œSemyon, tan-awa sab.”
    Ug kinahanglan adunay usa ka higayon sa pagsulod sa kasamtangan nga mga sulat pagdapit ug bag-ong membro.

Atong hisgotan kini nga listahan sa "klaro" nga mga panginahanglan sa pagkakaron.

Kung wala'y pagsabut sa gipadapat nga mga detalye sa problema ug ang mga limitasyon nga gihatag niini, disenyo epektibo database schema sa pagsulbad niini mao ang hapit imposible.

Lakang 2: Minimal Logic Circuit

Sa pagkakaron, ang tanan nagtrabaho nga susama kaayo sa email nga sulat - usa ka tradisyonal nga himan sa negosyo. Oo, "algorithmically" daghang mga problema sa negosyo parehas sa usag usa, busa ang mga himan alang sa pagsulbad niini magkapareho sa istruktura.

Atong ayuhon ang nakuha na nga lohikal nga diagram sa mga relasyon sa mga entidad. Aron mas dali masabtan ang among modelo, among gamiton ang labing karaan nga kapilian sa pagpakita Mga modelo sa ER walay mga komplikasyon sa UML o IDEF notation:

Messenger database (bahin 1): pagdesinyo sa base framework

Sa among pananglitan, ang tawo, dokumento ug binary nga "lawas" sa file mga "eksternal" nga mga entidad nga naglungtad nga independente nga wala ang among serbisyo. Busa, lantawon ra nato sila sa umaabot isip pipila ka mga link nga "sa usa ka dapit" sa UUID.

Pagdrowing mga diagram nga yano kutob sa mahimo - kadaghanan sa mga tawo nga imong ipakita kanila dili eksperto sa pagbasa sa UML/IDEF. Apan siguroha ang pagdrowing.

Lakang 3: Pag-sketch sa istruktura sa lamesa

Mahitungod sa mga ngalan sa lamesa ug umaAng "Russian" nga mga ngalan sa mga uma ug mga lamesa mahimong pagtratar sa lahi, apan kini usa ka butang sa lami. Tungod kay ang dinhi sa Tensor walay langyaw nga developers, ug PostgreSQL nagtugot kanato sa paghatag og mga ngalan bisan sa hieroglyphs, kon sila gilakip sa mga kinutlo, unya mas gusto namo nga hinganlan ang mga butang nga dili klaro ug klaro aron walay mga kalainan.
Tungod kay daghang mga tawo ang nagsulat kanamo sa usa ka higayon, ang pipila kanila mahimo pa gani nga mobuhat niini offline, unya ang pinakasimple nga kapilian mao gamita ang mga UUID isip mga identifier dili lamang alang sa mga eksternal nga entidad, apan alang usab sa tanan nga mga butang sa sulod sa among serbisyo. Dugang pa, mahimo silang mamugna bisan sa bahin sa kliyente - makatabang kini kanamo nga suportahan ang pagpadala sa mga mensahe kung ang database temporaryo nga wala magamit, ug ang posibilidad sa usa ka pagbangga gamay kaayo.

Ang draft nga istraktura sa lamesa sa among database mahimong ingon niini:
Mga lamesa : RU

CREATE TABLE "Π’Π΅ΠΌΠ°"(
  "Π’Π΅ΠΌΠ°"
    uuid
      PRIMARY KEY
, "Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚"
    uuid
, "НазваниС"
    text
);

CREATE TABLE "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅"(
  "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅"
    uuid
      PRIMARY KEY
, "Π’Π΅ΠΌΠ°"
    uuid
, "Автор"
    uuid
, "ДатаВрСмя"
    timestamp
, "ВСкст"
    text
);

CREATE TABLE "АдрСсат"(
  "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅"
    uuid
, "ΠŸΠ΅Ρ€ΡΠΎΠ½Π°"
    uuid
, PRIMARY KEY("Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅", "ΠŸΠ΅Ρ€ΡΠΎΠ½Π°")
);

CREATE TABLE "Π€Π°ΠΉΠ»"(
  "Π€Π°ΠΉΠ»"
    uuid
      PRIMARY KEY
, "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅"
    uuid
, "BLOB"
    uuid
, "Имя"
    text
);

Mga lamesa: EN

CREATE TABLE theme(
  theme
    uuid
      PRIMARY KEY
, document
    uuid
, title
    text
);

CREATE TABLE message(
  message
    uuid
      PRIMARY KEY
, theme
    uuid
, author
    uuid
, dt
    timestamp
, body
    text
);

CREATE TABLE message_addressee(
  message
    uuid
, person
    uuid
, PRIMARY KEY(message, person)
);

CREATE TABLE message_file(
  file
    uuid
      PRIMARY KEY
, message
    uuid
, content
    uuid
, filename
    text
);

Ang pinakasimple nga butang kung naghulagway sa usa ka format mao ang pagsugod sa "pagtangtang" sa koneksyon graph gikan sa mga lamesa nga wala gi-refer sa ilang kaugalingon sa walay bisan kinsa.

Lakang 4: Pangitaa ang dili klaro nga mga panginahanglan

Mao ra kana, nagdisenyo kami usa ka database diin mahimo nimong isulat ang hingpit ug sa bisan unsa basaha.

Ibutang nato ang atong kaugalingon sa posisyon sa tiggamit sa atong serbisyo - unsay gusto natong buhaton niini?

  • Katapusan nga mga mensahe
    kini kronolohikal nga pagkahan-ay usa ka rehistro sa "akong" mga mensahe base sa lain-laing mga criteria. Diin ako usa sa mga nakadawat, diin ako ang tagsulat, diin sila misulat kanako ug ako wala motubag, diin sila wala motubag kanako, ...
  • Mga partisipante sa sulat
    Kinsa man ang nag-apil niining taas, taas nga chat?

Ang among istruktura nagtugot kanamo sa pagsulbad sa duha niini nga mga problema "sa kinatibuk-an," apan dili dayon. Ang problema mao nga alang sa paghan-ay sulod sa unang buluhaton dili makahimo sa index, angay alang sa matag usa sa mga partisipante (ug kinahanglan nimong kuhaon ang tanan nga mga rekord), ug aron masulbad ang ikaduha nga kinahanglan nimo kuhaa ang tanan nga mga mensahe sa niini nga hilisgutan.

Ang wala tuyoa nga mga buluhaton sa user mahimong magbutang ug bold krus sa produktibidad.

Lakang 5: Smart Denormalization

Ang duha sa among mga problema masulbad pinaagi sa dugang nga mga lamesa diin among buhaton duplicate nga bahin sa datos, gikinahanglan aron maporma sa kanila ang mga indeks nga angay alang sa atong mga buluhaton.
Messenger database (bahin 1): pagdesinyo sa base framework

Mga lamesa : RU

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

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

Mga lamesa: EN

CREATE TABLE message_registry(
  owner
    uuid
, registry
    smallint
, dt
    timestamp
, message
    uuid
, PRIMARY KEY(owner, registry, message)
);
CREATE INDEX ON message_registry(owner, registry, dt DESC);

CREATE TABLE theme_participant(
  theme
    uuid
, person
    uuid
, PRIMARY KEY(theme, person)
);

Dinhi among gipadapat ang duha ka kasagarang mga pamaagi nga gigamit sa paghimo og mga auxiliary table:

  • Pagpadaghan sa mga rekord
    Gamit ang usa ka inisyal nga rekord sa mensahe, naghimo kami og daghang mga follow-up nga mga rekord sa lain-laing mga matang sa mga rehistro alang sa lain-laing mga tag-iya - alang sa nagpadala ug alang sa nakadawat. Apan ang matag usa sa mga rehistro karon nahulog sa indeks - pagkahuman, sa kasagaran nga kaso, gusto namon nga makita ra ang una nga panid.
  • Talagsaon nga mga rekord
    Sa matag higayon nga magpadala ka usa ka mensahe sulod sa usa ka piho nga hilisgutan, igo na aron masusi kung ang ingon nga entry naglungtad na. Kung dili, idugang kini sa among "diksyonaryo".

Sa sunod nga bahin sa artikulo atong hisgotan pagpatuman sa partitioning sa istruktura sa among database.

Source: www.habr.com

Idugang sa usa ka comment