ProHoster > Blog > administratë > Baza e të dhënave të Messenger (pjesa 1): dizajnimi i kornizës bazë
Baza e të dhënave të Messenger (pjesa 1): dizajnimi i kornizës bazë
Si mund t'i përktheni kërkesat e biznesit në struktura specifike të dhënash duke përdorur shembullin e dizajnimit të një baze të dhënash të dërguarit nga e para.
Baza jonë nuk do të jetë aq e madhe dhe e shpërndarë, si VKontakte ose Badoo, por "ashtu që ishte", por ishte i mirë - funksional, i shpejtë dhe përshtatet në një server PostgreSQL - në mënyrë që të mund të vendosni një shembull të veçantë të shërbimit diku në anën, për shembull.
Prandaj, ne nuk do të prekim çështjet e ndarjes, riprodhimit dhe sistemeve gjeo-shpërndarë, por do të fokusohemi në zgjidhjet e qarkut brenda bazës së të dhënave.
Hapi 1: Disa specifika të biznesit
Ne nuk do ta dizajnojmë mesazhin tonë në mënyrë abstrakte, por do ta integrojmë atë në mjedis rrjeti social i korporatës. Kjo do të thotë, njerëzit tanë nuk "thjesht korrespondojnë", por komunikojnë me njëri-tjetrin në kontekstin e zgjidhjes së problemeve të caktuara të biznesit.
Dhe cilat janë detyrat e një biznesi?.. Le të shohim shembullin e Vasilit, kreut të departamentit të zhvillimit.
"Nikolai, për këtë detyrë na duhet një arnim sot!"
Kjo do të thotë se korrespondenca mund të kryhet në kontekstin e disa dokument.
"Kolya, do të shkosh në Dota këtë mbrëmje?"
Domethënë, edhe një palë bashkëbiseduesish mund të komunikojnë njëkohësisht në tema të ndryshme.
"Peter, Nikolay, shikoni në bashkëngjitje listën e çmimeve për serverin e ri."
Pra, një mesazh mund të ketë disa marrës. Në këtë rast, mesazhi mund të përmbajë Skedarët e bashkangjitur.
"Semyon, hidhi një sy edhe ti."
Dhe duhet të ketë një mundësi për të hyrë në korrespondencën ekzistuese ftoni një anëtar të ri.
Le të ndalemi në këtë listë të nevojave "të dukshme" tani për tani.
Pa kuptuar specifikat e aplikuara të problemit dhe kufizimet që i janë dhënë, dizajni efektive Skema e bazës së të dhënave për ta zgjidhur atë është pothuajse e pamundur.
Hapi 2: Qarku logjik minimal
Deri më tani, gjithçka funksionon shumë e ngjashme me korrespondencën me email - një mjet tradicional biznesi. Po, "algoritmikisht" shumë probleme biznesi janë të ngjashme me njëra-tjetrën, prandaj mjetet për zgjidhjen e tyre do të jenë strukturore të ngjashme.
Le të rregullojmë diagramin logjik të marrë tashmë të marrëdhënieve të entiteteve. Për ta bërë modelin tonë më të lehtë për t'u kuptuar, ne do të përdorim opsionin më primitiv të ekranit Modelet ER pa ndërlikimet e shënimeve UML ose IDEF:
Në shembullin tonë, personi, dokumenti dhe "trupi" binar i skedarit janë entitete "të jashtme" që ekzistojnë në mënyrë të pavarur pa shërbimin tonë. Prandaj, ne thjesht do t'i perceptojmë ato në të ardhmen si disa lidhje "diku" nga UUID.
Vizatoni diagrame sa më të thjeshta - shumica e njerëzve që do t'u tregoni nuk janë ekspertë në leximin e UML/IDEF. Por sigurohuni që të vizatoni.
Hapi 3: Skicimi i strukturës së tabelës
Rreth emrave të tabelave dhe fushaveEmrat "rusë" të fushave dhe tabelave mund të trajtohen ndryshe, por kjo është çështje shije. Sepse këtu në Tensor nuk ka zhvillues të huaj dhe PostgreSQL na lejon të japim emra edhe në hieroglife, nëse ata të mbyllura në thonjëza, atëherë preferojmë t'i emërtojmë objektet në mënyrë të qartë dhe të qartë në mënyrë që të mos ketë mospërputhje.
Meqenëse shumë njerëz na shkruajnë mesazhe menjëherë, disa prej tyre madje mund ta bëjnë këtë jashtë linje, atëherë opsioni më i thjeshtë është përdorni UUID si identifikues jo vetëm për subjektet e jashtme, por edhe për të gjitha objektet brenda shërbimit tonë. Për më tepër, ato mund të gjenerohen edhe në anën e klientit - kjo do të na ndihmojë të mbështesim dërgimin e mesazheve kur baza e të dhënave është përkohësisht e padisponueshme dhe gjasat për një përplasje janë jashtëzakonisht të ulëta.
Struktura e draftit të tabelës në bazën tonë të të dhënave do të duket kështu: Tabelat: RU
Gjëja më e thjeshtë kur përshkruani një format është të filloni "zbërthimin" e grafikut të lidhjes nga tabelat që nuk janë referuar veten për askënd.
Hapi 4: Gjeni nevojat jo të dukshme
Kjo është e gjitha, ne kemi krijuar një bazë të dhënash në të cilën mund të shkruani në mënyrë të përsosur dhe disi lexoni.
Le ta vendosim veten në vendin e përdoruesit të shërbimit tonë - çfarë duam të bëjmë me të?
Mesazhet e fundit
Ajo të renditura kronologjikisht një regjistër i mesazheve "my" bazuar në kritere të ndryshme. Ku jam një nga marrësit, ku jam autori, ku më kanë shkruar dhe nuk jam përgjigjur, ku nuk më janë përgjigjur, ...
Pjesëmarrësit e korrespondencës
Kush madje merr pjesë në këtë bisedë të gjatë e të gjatë?
Struktura jonë na lejon t'i zgjidhim të dyja këto probleme "në përgjithësi", por jo shpejt. Problemi është se për renditjen brenda detyrës së parë nuk mund të krijojë indeks, i përshtatshëm për secilin prej pjesëmarrësve (dhe do t'ju duhet të nxirrni të gjitha të dhënat), dhe për të zgjidhur të dytin që ju nevojiten nxjerr të gjitha mesazhet në këtë temë.
Detyrat e padëshiruara të përdoruesit mund të jenë të theksuara kryq mbi produktivitetin.
Hapi 5: Denormalizimi i zgjuar
Të dy problemet tona do të zgjidhen me tabela shtesë në të cilat do të zgjidhemi kopjoni një pjesë të të dhënave, të nevojshme për të formuar mbi to indekse të përshtatshme për detyrat tona.
Këtu kemi aplikuar dy qasje tipike të përdorura gjatë krijimit të tabelave ndihmëse:
Shumëzimi i të dhënave
Duke përdorur një regjistrim fillestar të mesazheve, ne krijojmë disa regjistrime vijuese në lloje të ndryshme regjistrash për pronarë të ndryshëm - si për dërguesin ashtu edhe për marrësin. Por secili prej regjistrave tani bie në indeks - në fund të fundit, në një rast tipik, ne do të dëshirojmë të shohim vetëm faqen e parë.
Rekorde unike
Sa herë që dërgoni një mesazh brenda një teme specifike, mjafton të kontrolloni nëse një hyrje e tillë ekziston tashmë. Nëse jo, shtoni atë në "fjalorin" tonë.
Në pjesën tjetër të artikullit do të flasim për zbatimi i ndarjes në strukturën e bazës sonë të të dhënave.