{"id":55011,"date":"2020-01-10T00:00:00","date_gmt":"2020-01-09T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/bd-messendzhera-ch-1-proektiruem-karkas-bazy"},"modified":"2020-02-18T14:03:05","modified_gmt":"2020-02-18T11:03:05","slug":"bd-messendzhera-ch-1-proektiruem-karkas-bazy","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","title":{"rendered":"Messenger-database (del 1): design rammen p\u00e5 databasen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hvordan man kan overs\u00e6tte forretningskrav til konkrete datastrukturer ved at designe en database til en messenger \"fra bunden\".<\/p>\n<ul>\n<li>Del 1: design rammen p\u00e5 databasen<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">Del 2: sektionering \"live\"<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Messenger-database (del 1): design rammen p\u00e5 databasen\" src=\"\/wp-content\/uploads\/2020\/01\/d4e85052405da3f6580e4e931c292079.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVores database vil ikke v\u00e6re s\u00e5 omfattende og distribueret, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/342570\/\">som hos VKontakte<\/a><\/noindex> eller <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/340976\/\">Badoo<\/a><\/noindex>, men \"bare for at have det\", skal den v\u00e6re god \u2014 funktionel, hurtig og <b>kunne v\u00e6re p\u00e5 \u00e9n server<\/b> PostgreSQL \u2014 s\u00e5 vi kan implementere en separat tjenesteinstans et sted, for eksempel.<\/p>\n<p>Derfor vil vi ikke ber\u00f8re sp\u00f8rgsm\u00e5l om sharding, replikering og geografisk distribuerede systemer, men fokusere p\u00e5 skematiske l\u00f8sninger inden for databasen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Trin 1: Lidt forretningsspecifik viden<\/h2>\n<p>\nVi vil designe vores beskedudveksling ikke abstrakt, men indbygget i milj\u00f8et <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/help\/work_in\/sms\/\">af et virksomhedssocialt netv\u00e6rk<\/a><\/noindex>. Det vil sige, at folk ikke \"bare skriver til hinanden\", men kommunikerer i konteksten af at l\u00f8se bestemte forretningsopgaver.<\/p>\n<p>Hvilke opgaver har virksomhederne? Lad os se p\u00e5 et eksempel med Vasily - lederen af udviklingsafdelingen.<\/p>\n<ul>\n<li><i>\"Nikolaj, vi har brug for en patch til denne opgave i dag!\"<\/i><br \/>\nDet betyder, at kommunikationen kan finde sted i konteksten af et <b>dokument<\/b>.<\/li>\n<li><i>\"Kola, skal vi spille Dota i aften?\"<\/i><br \/>\nDet vil sige, at selv for et par samtalepartnere kan kommunikationen finde sted <b>om forskellige emner<\/b>.<\/li>\n<li><i>\"Petr, Nikolaj, kig i det vedh\u00e6ftede dokument for prisen p\u00e5 den nye server.\"<\/i><br \/>\nS\u00e5 et enkelt besked kan have <b>flere modtagere.<\/b>Desuden kan en besked indeholde <b>vedh\u00e6ftede filer<\/b>.<\/li>\n<li><i>\"Semen, du skal ogs\u00e5 tage et kig.\"<\/i><br \/>\nOg der skal v\u00e6re mulighed for at invitere en ny deltager ind i en eksisterende samtale <b>Lad os holde os til denne liste af \"\u00e5benlyse\" behov.<\/b>.<\/li>\n<\/ul>\n<p>\nUden forst\u00e5else af de applikationsspecifikke opgaver og deres begr\u00e6nsninger er det praktisk talt umuligt at designe<\/p>\n<blockquote><p>en effektiv <b>database schema til at l\u00f8se dem.<\/b> Trin 2: Minimal logisk skema<\/p><\/blockquote>\n<p><\/p>\n<h2>Skematisk set ligner alt stadig meget en email-korrespondance \u2014 et traditionelt v\u00e6rkt\u00f8j til at drive forretning. S\u00e5 ja, \"algoritmisk\" minder mange forretningsopgaver om hinanden, derfor vil v\u00e6rkt\u00f8jerne til at l\u00f8se dem ogs\u00e5 have strukturel lighed.<\/h2>\n<p>\nLad os fastholde den logiske skema for enhedsrelationerne, vi allerede har f\u00e5et. For at forenkle forst\u00e5elsen af vores model vil vi bruge den mest primitive form for visning<\/p>\n<p>af ER-modellen. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/ER-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C\">ER-modeller<\/a><\/noindex> uden komplicerede UML eller IDEF-notationer:<\/p>\n<p><img decoding=\"async\" alt=\"Messenger-database (del 1): design rammen p\u00e5 databasen\" src=\"\/wp-content\/uploads\/2020\/01\/75d0b3cf9e5a44ae3e243449fa406fbc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI vores eksempel er person, dokument og den bin\u00e6re \"krop\" af filen \"eksterne\" enheder, der eksisterer uafh\u00e6ngigt af vores service. Derfor vil vi blot opfatte dem som nogle links \"et eller andet sted\" via UUID.<\/p>\n<blockquote><p>Tegn <b>skemaer s\u00e5 enkelt som muligt<\/b> \u2014 de fleste af dem, du viser dem til, er ikke eksperter i at l\u00e6se UML\/IDEF. Men \u2014 s\u00f8rg for at tegne.<\/p><\/blockquote>\n<p><\/p>\n<h2>Trin 3: Skitser strukturen af tabeller<\/h2>\n<p>\n<b class=\"spoiler_title\">Om navne p\u00e5 tabeller og felter<\/b>Man kan have forskellige holdninger til \"russiske\" navne p\u00e5 felter og tabeller, men det er en smagssag. Da <noindex><a rel=\"nofollow\" href=\"https:\/\/tensor.ru\/about\/career\/vacancies\">vi i \"Tensor\"<\/a><\/noindex> ikke har udenlandske udviklere, og PostgreSQL tillader os at give navne selv i hieroglyffer, s\u00e5 l\u00e6nge de <u>er indkapslet i anf\u00f8rselstegn<\/u>, s\u00e5 foretr\u00e6kker vi at navngive objekter klart og tydeligt for at undg\u00e5 misforst\u00e5elser.<br \/>\nDa mange mennesker skriver beskeder til os p\u00e5 \u00e9n gang, kan nogle endda g\u00f8re det <u>i offline-tilstand<\/u>, s\u00e5 den enkleste l\u00f8sning er at <b>bruge UUID som identifikatorer<\/b> ikke kun for eksterne enheder, men ogs\u00e5 for alle objekter inden for vores service. Desuden kan de genereres selv p\u00e5 klientsiden \u2014 det hj\u00e6lper os med at st\u00f8tte afsendelse af beskeder ved kortvarig utilg\u00e6ngelighed af databasen, og risikoen for kollision er ekstremt lille.<\/p>\n<p>Den udkastede struktur af tabellerne i vores database vil have f\u00f8lgende udseende:<br \/>\n<b class=\"spoiler_title\">Tabeller : RU<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE \"Emne\"(\n  \"Emne\"\n    uuid\n      PRIMARY KEY\n, \"Dokument\"\n    uuid\n, \"Titel\"\n    text\n);\n\nCREATE TABLE \"Besked\"(\n  \"Besked\"\n    uuid\n      PRIMARY KEY\n, \"Emne\"\n    uuid\n, \"Forfatter\"\n    uuid\n, \"DatoTid\"\n    timestamp\n, \"Tekst\"\n    text\n);\n\nCREATE TABLE \"Modtager\"(\n  \"Besked\"\n    uuid\n, \"Person\"\n    uuid\n, PRIMARY KEY(\"Besked\", \"Person\")\n);\n\nCREATE TABLE \"Fil\"(\n  \"Fil\"\n    uuid\n      PRIMARY KEY\n, \"Besked\"\n    uuid\n, \"BLOB\"\n    uuid\n, \"Navn\"\n    text\n);<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Tabeller : EN<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE theme(\n  theme\n    uuid\n      PRIMARY KEY\n, document\n    uuid\n, title\n    text\n);\n\nCREATE TABLE message(\n  message\n    uuid\n      PRIMARY KEY\n, theme\n    uuid\n, author\n    uuid\n, dt\n    timestamp\n, body\n    text\n);\n\nCREATE TABLE message_addressee(\n  message\n    uuid\n, person\n    uuid\n, PRIMARY KEY(message, person)\n);\n\nCREATE TABLE message_file(\n  file\n    uuid\n      PRIMARY KEY\n, message\n    uuid\n, content\n    uuid\n, filename\n    text\n);<\/code><\/pre>\n<p><\/p>\n<blockquote><p>Det simpleste, n\u00e5r man beskriver formatet, er at begynde at \"folde\" forbindelsesgrafen <b>fra tabeller, der ikke henviser<\/b> til nogen.<\/p><\/blockquote>\n<p><\/p>\n<h2>Trin 4: Afklare skjulte behov<\/h2>\n<p>\nDet er det, vi har designet en database, hvor man kan skrive og <i><b>p\u00e5 en eller anden m\u00e5de<\/b><\/i> l\u00e6se.<\/p>\n<p>Lad os s\u00e6tte os i brugerens sted \u2014 hvad vi \u00f8nsker at g\u00f8re med vores service?<\/p>\n<ul>\n<li><i>Seneste beskeder<\/i><br \/>\nDette <b>kronologisk sorteret<\/b> i registre \"mine\" beskeder efter forskellige kriterier. Hvor jeg er en af modtagerne, hvor jeg er afsenderen, hvor jeg har f\u00e5et beskeder, men ikke svaret, hvor jeg ikke har f\u00e5et svar, &#8230;<\/li>\n<li><i>Deltagere i samtalen<\/i><br \/>\nHvem deltager egentlig i denne lange chat?<\/li>\n<\/ul>\n<p>\nVores struktur g\u00f8r det muligt at l\u00f8se begge disse opgaver, men hurtigt \u2014 nej. Problemet er, at det er umuligt at oprette et indeks <b>, der passer til hver deltager (og vi m\u00e5 hente alle registreringer), mens det for at l\u00f8se den anden opgave er n\u00f8dvendigt<\/b>at hente alle beskeder <b>om emnet.<\/b> Uforudsete brugeropgaver kan s\u00e6tte en fed<\/p>\n<blockquote><p>streg over ydeevnen <b>Trin 5: Fornuftig denormalisering<\/b>.<\/p><\/blockquote>\n<p><\/p>\n<h2>Begge vores problemer kan l\u00f8ses med ekstra tabeller, hvor vi vil<\/h2>\n<p>\nduplikere en del af de data <b>, der er n\u00f8dvendige for at danne passende indekser til vores opgaver.<\/b>CREATE TABLE \"MessageRegistry\"(\n  \"Owner\"\n    uuid\n, \"RegistryType\"\n    smallint\n, \"Datetime\"\n    timestamp\n, \"Message\"\n    uuid\n, PRIMARY KEY(\"Owner\", \"RegistryType\", \"Message\")\n);\nCREATE INDEX ON \"MessageRegistry\"(\"Owner\", \"RegistryType\", \"Datetime\" DESC);\n\nCREATE TABLE \"ThemeParticipant\"(\n  \"Theme\"\n    uuid\n, \"Person\"\n    uuid\n, PRIMARY KEY(\"Theme\", \"Person\")\n);<br \/>\n<img decoding=\"async\" alt=\"Messenger-database (del 1): design rammen p\u00e5 databasen\" src=\"\/wp-content\/uploads\/2020\/01\/f136a9904518b05bca74cc2b9c2f01b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b class=\"spoiler_title\">Tabeller : RU<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE message_registry(\n  owner\n    uuid\n, registry\n    smallint\n, dt\n    timestamp\n, message\n    uuid\n, PRIMARY KEY(owner, registry, message)\n);\nCREATE INDEX ON message_registry(owner, registry, dt DESC);\n\nCREATE TABLE theme_participant(\n  theme\n    uuid\n, person\n    uuid\n, PRIMARY KEY(theme, person)\n);<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Tabeller : EN<\/b><\/p>\n<pre><code class=\"sql\">Her har vi anvendt to typiske metoder, der bruges ved oprettelse af hj\u00e6lpe-tabeller:<\/code><\/pre>\n<p>\nMultiplicering af optegnelser<\/p>\n<ul>\n<li><b>Vi danner for hver enkelt indledende besked straks flere f\u00f8lgeoptegnelser i forskellige typer registrer for forskellige ejere \u2014 b\u00e5de for afsenderen og modtageren. Men nu passer hver registrering ind p\u00e5 indekset \u2014 for i typisk tilf\u00e6lde \u00f8nsker vi kun at se f\u00f8rste side.<\/b><br \/>\nUnikalisering af optegnelser<\/li>\n<li><b>Ved hver afsendelse af en besked inden for et bestemt emne er det nok at kontrollere, om en s\u00e5dan optegnelse allerede findes. Hvis ikke \u2014 tilf\u00f8jer vi den til vores 'ordbog'.<\/b><br \/>\nI den n\u00e6ste del af artiklen vil der v\u00e6re fokus p\u00e5<\/li>\n<\/ul>\n<p>\nimplementering af partitionering <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">i strukturen af vores database.<\/a><\/noindex> Arkitektur til opbevaring og levering af billeder i Badoo<br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483176\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0441 \u043d\u0443\u043b\u044f\u00bb \u0431\u0430\u0437\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b \u0427\u0430\u0441\u0442\u044c 2: \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb \u041d\u0430\u0448\u0430 \u0431\u0430\u0437\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e\u0439 \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439, \u043a\u0430\u043a \u0443 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0438\u043b\u0438 Badoo, \u0430 \u00ab\u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e\u00bb, \u043d\u043e \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0443\u043c\u0435\u0449\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 PostgreSQL \u2014 \u0447\u0442\u043e\u0431\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55011","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0441 \u043d\u0443\u043b\u044f\u00bb \u0431\u0430\u0437\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0414 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 (\u0447.1): \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0441 \u043d\u0443\u043b\u044f\u00bb \u0431\u0430\u0437\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-09T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:05+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Beskedappens database (del 1): design af database-rammen | ProHoster","description":"Hvordan man kan oms\u00e6tte forretningskrav til konkrete datal\u00f8sninger med eksemplet p\u00e5 design af en \"fra bunden\" database til en beskedapp. Del 1: design af database-rammen","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0414 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 (\u0447.1): \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b | ProHoster","og:description":"\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0441 \u043d\u0443\u043b\u044f\u00bb \u0431\u0430\u0437\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-09T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:05+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55011","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 13:30:15","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:27:13","updated":"2026-01-24 13:30:15","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/55011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=55011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/55011\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=55011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=55011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=55011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}