Ebe nchekwa data Messenger (akụkụ 1): imebe usoro ntọala

Otu ị ga-esi sụgharịa ihe azụmahịa chọrọ ka ọ bụrụ usoro data akọwapụtara site na iji ihe atụ nke imepụta nchekwa data ozi site na ọkọ.

Ebe nchekwa data Messenger (akụkụ 1): imebe usoro ntọala
Ntọala anyị agaghị adị ka nnukwu ma kesaa, dị ka VKontakte ma ọ bụ Badoo, ma "ka ọ dị", ma ọ dị mma - arụ ọrụ, ngwa ngwa na dabara na otu nkesa PostgreSQL - ka ị nwee ike ibuga ihe atụ dị iche iche nke ọrụ ebe n'akụkụ, dịka ọmụmaatụ.

Ya mere, anyị agaghị emetụ aka n'okwu gbasara Sharding, replication na geo-ekesa usoro, ma anyị ga-elekwasị anya na ngwọta sekit n'ime nchekwa data.

Nzọụkwụ 1: Ụfọdụ nkọwa azụmahịa

Anyị agaghị ahazi ozi anyị n'ụzọ nkịtị, mana anyị ga-ejikọta ya na gburugburu ebe obibi netwọk mmekọrịta ụlọ ọrụ. Ya bụ, ndị anyị na-adịghị "na-ederịta akwụkwọ ozi," ma na-ekwurịta okwu na onye ọ bụla ọzọ na ọnọdụ nke idozi ụfọdụ azụmahịa nsogbu.

Kedukwa ọrụ nke azụmahịa?... Ka anyị leba anya n'ihe atụ nke Vasily, onye isi nke ngalaba mmepe.

  • "Nikolai, maka ọrụ a anyị chọrọ patch taa!"
    Nke a pụtara na enwere ike ịme akwụkwọ ozi n'ọnọdụ ụfọdụ akwụkwọ.
  • "Kolya, ị ga-aga Dota na mgbede a?"
    Ya bụ, ọbụlagodi otu ụzọ interlocutors nwere ike ịkparịta ụka n'otu oge na isiokwu dị iche iche.
  • "Peter, Nikolay, lee na mgbakwunye maka ndepụta ọnụahịa maka ihe nkesa ọhụrụ."
    Yabụ, otu ozi nwere ike ịnwe ọtụtụ ndị nnata. N'okwu a, ozi ahụ nwere ike ịnwe Faịlụ agbakwunyere.
  • "Semyon, leekwa anya."
    Na ekwesịrị inwe ohere ịbanye n'ime akwụkwọ ozi dị ugbu a kpọọ onye otu ọhụrụ.

Ka anyị nọrọ na ndepụta a nke mkpa “doro anya” ugbu a.

Na-aghọtaghị ihe etinyere n'ọrụ nke nsogbu ahụ na njedebe enyere ya, imewe dị irè atụmatụ nchekwa data iji dozie ya fọrọ nke nta ka ọ gaghị ekwe omume.

Nzọụkwụ 2: Minimal Logic Circuit

Ka ọ dị ugbu a, ihe niile na-arụ ọrụ dị ka akwụkwọ ozi email - a traditional business tool. Ee, "algorithmically" ọtụtụ nsogbu azụmahịa yiri ibe ha, ya mere ngwá ọrụ iji dozie ha ga-adị ka structurally.

Ka anyị dozie eserese ezi uche dị na ya nwetagoro nke mmekọrịta ụlọ ọrụ. Iji mee ka ihe nlereanya anyị dịkwuo mfe nghọta, anyị ga-eji nhọrọ ngosi kacha ochie Ụdị ER na-enweghị nsogbu nke nkọwa UML ma ọ bụ IDEF:

Ebe nchekwa data Messenger (akụkụ 1): imebe usoro ntọala

N'ihe atụ anyị, onye ahụ, akwụkwọ na ọnụọgụ abụọ "ahụ" nke faịlụ ahụ bụ ụlọ ọrụ "mpụga" nke dị n'adabereghị na-enweghị ọrụ anyị. Ya mere, anyị ga-aghọta ha n'ọdịnihu dị ka ụfọdụ njikọ "ebe" site UUID.

See eserese dị mfe dị ka o kwere mee - Ọtụtụ n'ime ndị ị ga-egosi ha abụghị ndị ọkachamara n'ịgụ UML/IDEF. Ma jide n'aka na ị ga-ese.

Nzọụkwụ 3: Ịhazi nhazi okpokoro

Banyere tebụl na aha ubiEnwere ike ịgwọ aha "Russian" nke ubi na tebụl dị iche iche, ma nke a bụ ihe ụtọ. N'ihi na ebe a na Tensor Enweghị ndị mmepe mba ọzọ, na PostgreSQL na-enye anyị ohere ịnye aha ọbụna na hieroglyphs, ma ọ bụrụ na ha agbakwunyere na ruturu, mgbe ahụ, anyị na-ahọrọ ịkpọ ihe n'ụzọ doro anya na n'ụzọ doro anya ka ọ ghara inwe nghọtahie.
Ebe ọ bụ na ọtụtụ ndị na-edegara anyị ozi ozugbo, ụfọdụ n’ime ha nwere ike ime nke a na-anọghị n'ịntanetị, mgbe ahụ nhọrọ kachasị mfe bụ jiri UUID dị ka ihe nchọpụta ọ bụghị naanị maka ụlọ ọrụ mpụga, kamakwa maka ihe niile dị n'ime ọrụ anyị. Ọzọkwa, enwere ike ịmepụta ha ọbụna n'akụkụ ndị ahịa - nke a ga-enyere anyị aka ịkwado izipu ozi mgbe nchekwa data adịghị adị nwa oge, na ohere nke nkukota dị oke ala.

Nhazi tebụl dị na nchekwa data anyị ga-adị ka nke a:
Tebụl: 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
);

Tebụl: 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
);

Ihe kachasị mfe mgbe ị na-akọwa usoro bụ ịmalite "ịwepụ" eserese njikọ site na tebụl ndị a na-edeghị akwụkwọ onwe ha na ọ dịghị onye.

Nzọụkwụ 4: Chọpụta mkpa ndị na-abụghị nke doro anya

Nke ahụ bụ ya, anyị emepụtala nchekwa data nke ị nwere ike ide nke ọma na otuodila gụọ.

Ka anyị tinye onwe anyị na akpụkpọ ụkwụ nke onye ọrụ anyị - gịnị ka anyị chọrọ iji ya mee?

  • Ozi ikpeazụ
    a usoro oge haziri ndekọ nke ozi "m" dabere na njirisi dị iche iche. Ebe m bụ otu n'ime ndị nnata, ebe m bụ onye edemede, ebe ha degara m akwụkwọ ma azaghị m, ebe ha azaghị m, ...
  • Ndị so na akwụkwọ ozi
    Ònye na-ekerekwa òkè na nkata ogologo ogologo a?

Ọdịdị anyị na-enye anyị ohere idozi nsogbu abụọ a "n'ozuzu," ma ọ bụghị ngwa ngwa. Nsogbu bụ na maka nhazi n'ime ọrụ mbụ enweghị ike ịmepụta index, adabara onye ọ bụla n'ime ndị sonyere (ma ị ga-ewepụ ihe ndekọ niile), na iji dozie nke abụọ ị chọrọ. wepụ ozi niile na isiokwu a.

Ọrụ onye ọrụ na-atụghị anya ya nwere ike inwe obi ike gafere na arụpụtaghị ihe.

Nzọụkwụ 5: Smart Denormalization

A ga-edozi nsogbu anyị abụọ site na tebụl ndị ọzọ anyị ga-eme oyiri akụkụ nke data, dị mkpa iji mepụta indices dabara adaba maka ọrụ anyị.
Ebe nchekwa data Messenger (akụkụ 1): imebe usoro ntọala

Tebụl: RU

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

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

Tebụl: 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)
);

N'ebe a, anyị etinyela ụzọ abụọ a na-ahụkarị mgbe ị na-eke tebụl inyeaka:

  • Ịba ụba ndekọ
    N'iji otu ndekọ ozi mbụ, anyị na-emepụta ọtụtụ ndekọ na-esochi na ụdị ndekọ dị iche iche maka ndị nwe dị iche iche - ma maka onye na-ezipụ ma maka onye nnata. Ma nke ọ bụla n'ime ndekọ ugbu a dara na index - mgbe niile, na a-ahụkarị ikpe, anyị ga-achọ ịhụ naanị peeji nke mbụ.
  • Ihe ndekọ pụrụ iche
    Oge ọ bụla izipu ozi n'ime otu isiokwu, o zuru iji lelee ma ntinye dị otú ahụ adịlarị. Ọ bụrụ na ọ bụghị, tinye ya na "akwụkwọ ọkọwa okwu" anyị.

N'akụkụ nke ọzọ nke isiokwu ahụ, anyị ga-ekwu maka ya mmejuputa iwu nke nkebi n'ime nhazi nke nchekwa data anyị.

isi: www.habr.com

Tinye a comment