Stòr-dàta Messenger (pàirt 1): dealbhadh am frèam bunaiteach

Mar as urrainn dhut riatanasan gnìomhachais eadar-theangachadh gu structaran dàta sònraichte a’ cleachdadh an eisimpleir de bhith a’ dealbhadh stòr-dàta teachdaire bhon fhìor thoiseach.

Stòr-dàta Messenger (pàirt 1): dealbhadh am frèam bunaiteach
Cha bhi ar bonn cho mòr 's cho sgaoilte, mar Vkontakte no Badoo, ach “gus an robh”, ach bha e math – obrachail, luath agus freagarrach air aon fhrithealaiche PostgreSQL - gus an urrainn dhut eisimpleir air leth den t-seirbheis a chuir an àiteigin air an taobh, mar eisimpleir.

Mar sin, cha toir sinn suathadh air cùisean roinneadh, ath-riochdachadh agus siostaman geo-cuairteachaidh, ach cuiridh sinn fòcas air fuasglaidhean cuairteachaidh taobh a-staigh an stòr-dàta.

Ceum 1: Cuid de mhion-fhiosrachadh gnìomhachais

Cha bhith sinn a’ dealbhadh ar teachdaireachdan gu eas-chruthach, ach bidh sinn ga fighe a-steach don àrainneachd lìonra sòisealta corporra. Is e sin, chan eil na daoine againn “dìreach a’ conaltradh, ”ach a’ conaltradh ri chèile ann an co-theacsa fuasgladh fhaighinn air duilgheadasan gnìomhachais sònraichte.

Agus dè na gnìomhan a th 'aig gnìomhachas? .. Bheir sinn sùil air eisimpleir Vasily, ceannard na roinne leasachaidh.

  • “Nikolai, airson na h-obrach seo feumaidh sinn bad an-diugh!”
    Tha seo a’ ciallachadh gum faodar conaltradh a dhèanamh ann an co-theacs cuid sgrìobhainn.
  • “Kolya, a bheil thu a’ dol gu Dota a-nochd?”
    Is e sin, faodaidh eadhon aon phaidhir de luchd-conaltraidh conaltradh aig an aon àm air diofar chuspairean.
  • “Peadair, Nikolay, thoir sùil anns a’ cheangail airson liosta prìsean an t-seirbheisiche ùr.”
    Mar sin, faodaidh aon teachdaireachd a bhith grunn luchd-gabhail. Anns a 'chùis seo, faodaidh an teachdaireachd a bhith ann Faidhlichean ceangailte.
  • “Semyon, thoir sùil cuideachd.”
    Agus bu chòir gum biodh cothrom ann conaltradh a dhèanamh mu thràth cuireadh a thoirt do bhall ùr.

Leig leinn fuireach air an liosta seo de fheumalachdan “follaiseach” airson a-nis.

Gun a bhith a’ tuigsinn mion-fhiosrachadh gnìomhaichte na duilgheadas agus na crìochan a chaidh a thoirt dha, dealbhadh èifeachdach sgeama stòr-dàta gus fuasgladh fhaighinn air cha mhòr nach eil e comasach.

Ceum 2: Cearcall loidsig as ìsle

Gu ruige seo, tha a h-uile dad ag obair a-mach glè choltach ri litrichean post-d - inneal gnìomhachais traidiseanta. Tha, gu “algorithmically” tha mòran dhuilgheadasan gnìomhachais coltach ri chèile, agus mar sin bidh na h-innealan airson am fuasgladh coltach ri structar.

Feuch an socraich sinn an diagram loidsigeach a fhuaireadh mar-thà de dhàimhean eintiteas. Gus am modail againn a dhèanamh nas fhasa a thuigsinn, cleachdaidh sinn an roghainn taisbeanaidh as prìomhadaiche ER modailean às aonais duilgheadasan comharran UML no IDEF:

Stòr-dàta Messenger (pàirt 1): dealbhadh am frèam bunaiteach

Anns an eisimpleir againn, tha an neach, an sgrìobhainn agus “corp” binary an fhaidhle nan aonadan “taobh a-muigh” a tha ann gu neo-eisimeileach às aonais ar seirbheis. Mar sin, bidh sinn dìreach gam faicinn san àm ri teachd mar cheanglaichean “àiteigin” le UUID.

Tarraing diagraman cho sìmplidh ‘s a ghabhas - chan eil a’ mhòr-chuid de na daoine a sheallas tu dhaibh eòlach air leughadh UML/IDEF. Ach bi cinnteach gun tarraing thu.

Ceum 3: Dèan sgeidse de structar a 'bhùird

Mu ainmean bùird agus raointeanFaodar dèiligeadh ri ainmean achaidhean is bùird “Ruiseanach” ann an dòigh eadar-dhealaichte, ach tha seo na chùis blas. Air sgàth gu bheil an an seo aig Tensor chan eil luchd-leasachaidh cèin ann, agus leigidh PostgreSQL leinn ainmean a thoirt seachad eadhon ann an hieroglyphs, ma tha dùinte ann an luachan, an uairsin is fheàrr leinn nithean ainmeachadh gu soilleir agus gu soilleir gus nach bi eadar-dhealachaidhean ann.
Leis gu bheil mòran dhaoine a’ sgrìobhadh teachdaireachdan thugainn aig an aon àm, faodaidh cuid dhiubh eadhon seo a dhèanamh far loidhne, an uairsin is e an roghainn as sìmplidh cleachd UUIDs mar aithnichearan chan ann a-mhàin airson buidhnean bhon taobh a-muigh, ach cuideachd airson a h-uile nì an taobh a-staigh ar seirbheis. A bharrachd air an sin, faodaidh iad a bhith air an gineadh eadhon air taobh an neach-dèiligidh - cuidichidh seo sinn le bhith a’ cur teachdaireachdan nuair nach eil an stòr-dàta ri fhaighinn airson ùine, agus gu bheil coltas ann gum bi tubaist gu math ìosal.

Bidh structar a’ bhùird dreachd san stòr-dàta againn a’ coimhead mar seo:
Clàr: 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
);

Clàr: 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
);

Is e an rud as sìmplidh nuair a tha thu a’ toirt cunntas air cruth a bhith a’ tòiseachadh “a’ leigeil às” a’ ghraf ceangail bho chlàran air nach eil iomradh iad fein do neach air bith.

Ceum 4: Faigh a-mach feumalachdan nach eil follaiseach

Sin e, tha sinn air stòr-dàta a dhealbhadh anns an urrainn dhut sgrìobhadh gu foirfe agus air dhòigh a leughadh.

Nach cuir sinn sinn fhèin ann am brògan neach-cleachdaidh ar seirbheis - dè a tha sinn airson a dhèanamh leis?

  • Teachdaireachdan mu dheireadh
    seo air an òrdachadh a rèir eachdraidh clàr de theachdaireachdan “mo” stèidhichte air diofar shlatan-tomhais. Far a bheil mi am measg an luchd-faighinn, far a bheil mi nam ùghdar, far an do sgrìobh iad thugam agus cha do fhreagair mi, far nach do fhreagair iad mi, ...
  • Luchd-compàirt anns a’ chonaltradh
    Cò tha eadhon a’ gabhail pàirt anns a’ chat fhada, fhada seo?

Tha an structar againn a’ leigeil leinn an dà dhuilgheadas sin fhuasgladh “san fharsaingeachd,” ach chan ann gu sgiobalta. Is e an duilgheadas a th 'ann airson a bhith a' rèiteachadh taobh a-staigh a 'chiad ghnìomh gun chomas clàr-amais a chruthachadh, freagarrach airson gach aon de na com-pàirtichean (agus feumaidh tu na clàran gu lèir a thoirt a-mach), agus an dàrna fear a dh 'fheumas tu fhuasgladh thoir a-mach a h-uile teachdaireachd air a' chuspair seo.

Faodaidh gnìomhan cleachdaiche gun dùil a bhith trom crois air cinneasachd.

Ceum 5: Smart denormalization

Thèid an dà dhuilgheadas againn fhuasgladh le bùird a bharrachd anns am bi sinn lethbhreac den dàta, riatanach clàran-amais a chruthachadh a tha iomchaidh airson ar gnìomhan.
Stòr-dàta Messenger (pàirt 1): dealbhadh am frèam bunaiteach

Clàr: RU

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

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

Clàr: 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)
);

An seo tha sinn air dà dhòigh-obrach àbhaisteach a chleachdadh nuair a thathar a’ cruthachadh chlàran taice:

  • Ag iomadachadh chlàran
    A’ cleachdadh aon chlàr teachdaireachd tùsail, bidh sinn a’ cruthachadh grunn chlàran leanmhainn ann an diofar sheòrsan chlàran airson diofar luchd-seilbh - an dà chuid don neach a chuir agus don neach a gheibh e. Ach tha gach aon de na clàran a-nis a 'tuiteam air a' chlàr-amais - às deidh a h-uile càil, ann an cùis àbhaisteach, bidh sinn airson dìreach a 'chiad duilleag fhaicinn.
  • Clàran gun samhail
    Gach turas a chuireas tu teachdaireachd taobh a-staigh cuspair sònraichte, tha e gu leòr airson faighinn a-mach a bheil inntrigeadh mar seo ann mu thràth. Mura h-eil, cuir ris an “fhaclair” againn.

Anns an ath phàirt den artaigil bidh sinn a 'bruidhinn mu dheidhinn buileachadh sgaradh a-steach do structar an stòr-dàta againn.

Source: www.habr.com

Cuir beachd ann