Database Messenger (Kashi na 1): tsara tsarin tushe

Yadda zaku iya fassara buƙatun kasuwanci zuwa takamaiman tsarin bayanai ta amfani da misalin ƙirƙira bayanan manzo daga karce.

Database Messenger (Kashi na 1): tsara tsarin tushe
Tushen mu ba zai zama babba da rarraba ba, kamar VKontakte ko Badoo, amma "don haka ya kasance", amma yana da kyau - aiki, sauri da dace akan sabar daya PostgreSQL - domin ku iya tura wani misali na sabis a wani wuri a gefe, misali.

Don haka, ba za mu taɓa batutuwan sharding, kwafi da tsarin rarraba ƙasa ba, amma za mu mai da hankali kan hanyoyin da'ira a cikin bayanan.

Mataki 1: Wasu ƙayyadaddun kasuwanci

Ba za mu tsara saƙonmu a zahiri ba, amma za mu haɗa shi cikin yanayi sadarwar zamantakewar kamfanoni. Wato, mutanenmu ba “wasiƙa kawai” suke yi ba, amma suna sadarwa da juna a yanayin warware wasu matsalolin kasuwanci.

Kuma menene ayyukan kasuwanci?... Bari mu dubi misalin Vasily, shugaban sashen ci gaba.

  • "Nikolai, don wannan aikin muna buƙatar faci a yau!"
    Wannan yana nufin cewa ana iya yin wasiku a cikin mahallin wasu daftarin aiki.
  • "Kolya, za ku je Dota da yammacin nan?"
    Wato, ko da guda biyu na interlocutors iya sadarwa lokaci guda akan batutuwa daban-daban.
  • "Bitrus, Nikolay, duba cikin abin da aka makala don jerin farashin sabon uwar garken."
    Don haka, saƙo ɗaya zai iya samun masu karɓa da yawa. A wannan yanayin, sakon yana iya ƙunsar Fayilolin da aka makala.
  • "Semyon, duba kuma."
    Kuma ya kamata a sami damar shiga cikin wasikun da ke akwai gayyato sabon memba.

Bari mu tsaya kan wannan jerin buƙatun “bayyane” a yanzu.

Ba tare da fahimtar ƙayyadaddun abubuwan da aka yi amfani da su na matsalar da iyakokin da aka ba ta ba, ƙira tasiri tsarin tsarin bayanai don warware shi kusan ba zai yiwu ba.

Mataki na 2: Karamin Da'ira

Ya zuwa yanzu, komai yana aiki kama da wasiƙun imel - kayan aikin kasuwanci na gargajiya. Ee, "algorithmically" yawancin matsalolin kasuwanci suna kama da juna, don haka kayan aikin da za a magance su za su kasance kama da tsarin.

Bari mu gyara zane mai ma'ana da aka samu na alaƙar mahalli. Don sauƙaƙe ƙirar mu fahimta, za mu yi amfani da zaɓin nuni na farko Samfuran ER ba tare da rikitarwa na bayanin UML ko IDEF ba:

Database Messenger (Kashi na 1): tsara tsarin tushe

A cikin misalinmu, mutum, daftarin aiki da “jikin” binary na fayil ɗin abubuwan “na waje” ne waɗanda ke wanzuwa kansu ba tare da sabis ɗinmu ba. Saboda haka, za mu iya gane su a nan gaba a matsayin wasu hanyoyin haɗin "wani wuri" ta UUID.

Zana zane-zane mai sauƙi kamar yadda zai yiwu - Yawancin mutanen da za ku nuna musu ba ƙwararrun karatun UML/IDEF ba ne. Amma tabbatar da zana.

Mataki 3: Zana tsarin tebur

Game da tebur da sunayen filinSunan "Rasha" na filayen da tebur za a iya bi da su daban, amma wannan batu ne na dandano. Domin da nan a Tensor babu masu haɓaka ƙasashen waje, kuma PostgreSQL yana ba mu damar ba da sunaye ko da a cikin hieroglyphs, idan sun kewaye a cikin quotes, to mun gwammace mu sanya sunayen abubuwa ba tare da wata shakka ba kuma a sarari don kada a sami bambance-bambance.
Tun da yake mutane da yawa suna rubuta mana saƙonni a lokaci ɗaya, wasu ma na iya yin hakan offline, to mafi sauki zaɓi shine yi amfani da UUIDs azaman masu ganowa ba don abubuwan waje kaɗai ba, har ma ga duk abubuwan da ke cikin sabis ɗinmu. Bugu da ƙari, ana iya ƙirƙirar su ko da a gefen abokin ciniki - wannan zai taimaka mana mu goyi bayan aika saƙonni lokacin da ba a samu rumbun adana bayanai na ɗan lokaci ba, kuma yuwuwar yin karo ya yi ƙasa sosai.

Daftarin tsarin tebur a cikin bayanan mu zai yi kama da haka:
Tables: 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
);

Tables: 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
);

Abu mafi sauƙi lokacin bayyana tsari shine fara "cire" jadawalin haɗin daga allunan da ba a ambata ba kansu ba kowa.

Mataki na 4: Nemo buƙatun da ba na zahiri ba

Shi ke nan, mun tsara rumbun adana bayanai inda za ku iya rubuta daidai kuma ko ta yaya karanta.

Bari mu sanya kanmu a cikin takalmin mai amfani da sabis ɗinmu - menene muke so muyi da shi?

  • Saƙonnin ƙarshe
    wannan tsarin lokaci rajistar saƙonnin "na" bisa ma'auni daban-daban. Inda nake daya daga cikin wadanda aka karba, inda ni ne marubuci, inda suka rubuta mini ban amsa ba, inda ba su ba ni amsa ba, ...
  • Mahalarta wasikun
    Wanene ma yake shiga cikin wannan doguwar hira?

Tsarinmu yana ba mu damar magance waɗannan matsalolin biyu “gaba ɗaya,” amma ba da sauri ba. Matsalar ita ce don warwarewa cikin aikin farko kasa haifar da index, dace da kowane mahalarta (kuma dole ne ku cire duk bayanan), kuma don warware na biyun da kuke buƙata. cire duk saƙonnin akan wannan batu.

Ayyukan mai amfani da ba a yi niyya ba na iya yin ƙarfin hali giciye akan yawan aiki.

Mataki 5: Smart Denormalization

Duk matsalolinmu biyu za a magance su ta ƙarin teburi waɗanda za mu yi kwafi ɓangaren bayanan, dole ne a samar da fihirisa a kansu da suka dace da ayyukanmu.
Database Messenger (Kashi na 1): tsara tsarin tushe

Tables: RU

CREATE TABLE "РеестрСообщений"(
  "Владелец"
    uuid
, "ТипРеестра"
    smallint
, "ДатаВремя"
    timestamp
, "Сообщение"
    uuid
, PRIMARY KEY("Владелец", "ТипРеестра", "Сообщение")
);
CREATE INDEX ON "РеестрСообщений"("Владелец", "ТипРеестра", "ДатаВремя" DESC);

CREATE TABLE "УчастникТемы"(
  "Тема"
    uuid
, "Персона"
    uuid
, PRIMARY KEY("Тема", "Персона")
);

Tables: 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)
);

Anan mun yi amfani da hanyoyi guda biyu na yau da kullun da aka yi amfani da su yayin ƙirƙirar teburin taimako:

  • Rubutun ninkawa
    Yin amfani da rikodin saƙon farko ɗaya, muna ƙirƙira bayanan biyo baya da yawa a cikin nau'ikan rajista daban-daban don masu mabambanta - duka na mai aikawa da na mai karɓa. Amma kowane rajistan yanzu ya faɗi akan index - bayan haka, a cikin yanayin al'ada, za mu so mu ga kawai shafin farko.
  • Rubuce-rubuce na musamman
    Duk lokacin da ka aika saƙo a cikin takamaiman batu, ya isa ka bincika ko akwai irin wannan shigarwar. Idan ba haka ba, ƙara shi zuwa “kamus”.

A kashi na gaba na labarin za mu yi magana akai aiwatar da partitioning a cikin tsarin mu database.

source: www.habr.com

Add a comment