{"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\/nl\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","title":{"rendered":"Messenger database (part 1): designing the database framework","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hoe kunnen zakelijke vereisten worden omgezet in specifieke datastructuren aan de hand van het ontwerpen van een database voor een messenger \u2018from scratch\u2019?<\/p>\n<ul>\n<li>Deel 1: we ontwerpen de basisstructuur van de database<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">Deel 2: we secties \u2018live\u2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Messenger database (part 1): designing the database framework\" src=\"\/wp-content\/uploads\/2020\/01\/d4e85052405da3f6580e4e931c292079.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOnze database zal niet zo grootschalig en gedistribueerd zijn, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/342570\/\">zoals die van VKontakte<\/a><\/noindex> of <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/340976\/\">Badoo<\/a><\/noindex>, maar \u2018zodat het er is\u2019, zoals het goed is \u2014 functioneel, snel en <b>past op \u00e9\u00e9n server<\/b> PostgreSQL \u2014 zodat we een aparte instantie van de service ergens aan de zijkant kunnen uitrollen, bijvoorbeeld.<\/p>\n<p>Daarom zullen we geen vragen over sharding, replicatie en geografisch gedistribueerde systemen behandelen, maar ons concentreren op schematische oplossingen binnen de database.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Stap 1: Een beetje zakelijke specificiteit<\/h2>\n<p>\nOnze berichtwisseling gaan we niet abstract ontwerpen, maar integreren in de omgeving van een <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/help\/work_in\/sms\/\">corporate social network<\/a><\/noindex>. Dat wil zeggen, mensen \u2018ruilen gewoon berichten uit\u2019, maar communiceren met elkaar in de context van het oplossen van specifieke zakelijke taken.<\/p>\n<p>Wat voor taken heeft een bedrijf?.. Laten we kijken naar het voorbeeld van Vasily \u2014 de leidinggevende van de ontwikkelingsafdeling.<\/p>\n<ul>\n<li><i>\u2018Nikolay, voor deze taak is de patch al vandaag nodig!\u2019<\/i><br \/>\nDat betekent dat de correspondentie kan plaatsvinden in de context van een <b>Inkomstenstructuur van een PhD-student en Post-Doc aan de EPFL<\/b>.<\/li>\n<li><i>\u2018Kolya, laten we vanavond Dota spelen?\u2019<\/i><br \/>\nDat wil zeggen, zelfs bij \u00e9\u00e9n paar gesprekspartners kan de communicatie gelijktijdig plaatsvinden <b>over verschillende onderwerpen<\/b>.<\/li>\n<li><i>\u2018Peter, Nikolay, kijk naar de bijlage voor de prijs van de nieuwe server.\u2019<\/i><br \/>\nDus een bericht kan <b>meerdere ontvangers hebben<\/b>. Daarbij kan een bericht <b>bijlagen bevatten<\/b>.<\/li>\n<li><i>\u2018Semen, jij ook even kijken.\u2019<\/i><br \/>\nEn er moet de mogelijkheid zijn om in een bestaande correspondentie <b>een nieuwe deelnemer uit te nodigen<\/b>.<\/li>\n<\/ul>\n<p>\nLaten we voor nu bij deze lijst van \u2018voor de hand liggende\u2019 behoeften blijven.<\/p>\n<blockquote><p>Zonder begrip van de toegepaste specificiteit van de taak en de gestelde beperkingen is het praktisch onmogelijk om <b>een effectieve<\/b> databasestructuur voor de oplossing ervan te ontwerpen.<\/p><\/blockquote>\n<p><\/p>\n<h2>Stap 2: Minimale logische schema<\/h2>\n<p>\nHet schema lijkt voorlopig zeer op e-mailcommunicatie \u2014 een traditioneel hulpmiddel voor zakelijk beheer. Inderdaad, \u2018algoritmisch\u2019 zijn veel zakelijke taken vergelijkbaar, waardoor ook de hulpmiddelen voor hun oplossingen structureel overeenkomen.<\/p>\n<p>Laten we het al verkregen logische schema van de relaties tussen entiteiten vastleggen. Voor de eenvoud van ons model zullen we de meest primitieve weergave gebruiken van <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/ER-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C\">ER-modellen<\/a><\/noindex> zonder complicaties van UML of IDEF-notaties:<\/p>\n<p><img decoding=\"async\" alt=\"Messenger database (part 1): designing the database framework\" src=\"\/wp-content\/uploads\/2020\/01\/75d0b3cf9e5a44ae3e243449fa406fbc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn ons voorbeeld zijn de entiteiten persoon, document en binaire \"lichaam\" van het bestand \"externe\" eenheden die zelfstandig bestaan en onafhankelijk van onze service. Daarom nemen we ze in de vervolg gewoon waar als verwijzingen \"ergens\" via UUID.<\/p>\n<blockquote><p>Teken <b>schema's zo eenvoudig mogelijk<\/b> \u2014 de meeste mensen aan wie je ze laat zien zijn geen experts in het lezen van UML\/IDEF. Maar \u2014 teken zeker.<\/p><\/blockquote>\n<p><\/p>\n<h2>Stap 3: We schetsen de structuur van de tabellen<\/h2>\n<p>\n<b class=\"spoiler_title\">Over de namen van tabellen en velden<\/b>Men kan op verschillende manieren naar \"Russische\" namen van velden en tabellen kijken, maar dat is een kwestie van smaak. Aangezien <noindex><a rel=\"nofollow\" href=\"https:\/\/tensor.ru\/about\/career\/vacancies\">we in \"Tensor\"<\/a><\/noindex> geen buitenlandse ontwikkelaars hebben, en PostgreSQL ons toestaat om namen zelfs in hi\u00ebrogliefen te geven, als ze <u>tussen aanhalingstekens<\/u>staan, geven we de voorkeur aan eenduidige namen voor objecten zodat er geen misverstanden ontstaan.<br \/>\nAangezien berichten door veel mensen tegelijkertijd worden geschreven, kunnen sommige dit zelfs <u>in offline-modus<\/u>, is de eenvoudigste optie om <b>UUID te gebruiken als identificatoren<\/b> niet alleen voor externe entiteiten, maar ook voor alle objecten binnen onze service. Bovendien kunnen ze zelfs aan de clientzijde worden gegenereerd \u2014 dit helpt ons om de verzending van berichten te ondersteunen bij korte onbeschikbaarheid van de database, en de kans op een botsing is uiterst klein.<\/p>\n<p>De ruwe structuur van de tabellen in onze database zal er als volgt uitzien:<br \/>\n<b class=\"spoiler_title\">Tabellen : RU<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE \"Thema\"(\n  \"Thema\"\n    uuid\n      PRIMARY KEY\n, \"Document\"\n    uuid\n, \"Titel\"\n    text\n);\n\nCREATE TABLE \"Bericht\"(\n  \"Bericht\"\n    uuid\n      PRIMARY KEY\n, \"Thema\"\n    uuid\n, \"Auteur\"\n    uuid\n, \"DatumTijd\"\n    timestamp\n, \"Tekst\"\n    text\n);\n\nCREATE TABLE \"Adressee\"(\n  \"Bericht\"\n    uuid\n, \"Persoon\"\n    uuid\n, PRIMARY KEY(\"Bericht\", \"Persoon\")\n);\n\nCREATE TABLE \"Bestand\"(\n  \"Bestand\"\n    uuid\n      PRIMARY KEY\n, \"Bericht\"\n    uuid\n, \"BLOB\"\n    uuid\n, \"Naam\"\n    text\n);<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Tabellen : 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>Het gemakkelijkste bij het beschrijven van het formaat is te beginnen met \"ontknopen\" het netwerk van relaties <b>van tabellen die niet naar iets anders verwijzen.<\/b> Stap 4: We ontdekken niet-overduidelijke behoeften<\/p><\/blockquote>\n<p><\/p>\n<h2>Dat is alles, we hebben een database ontworpen die uitstekend is voor schrijven en<\/h2>\n<p>\nop een bepaalde manier <i><b>lezen.<\/b><\/i> lezen.<\/p>\n<p>Laten we ons inleven in de gebruiker van onze dienst \u2014 wat willen we daarmee doen?<\/p>\n<ul>\n<li><i>Laatste berichten<\/i><br \/>\nDit is <b>chronologisch gesorteerd<\/b> op basis van verschillende criteria een register van 'mijn' berichten. Waar ik een van de ontvangers ben, waar ik de auteur ben, waar ik een bericht heb ontvangen, maar niet heb gereageerd, waar ik geen antwoord heb gekregen, ...<\/li>\n<li><i>Deelnemers aan de correspondentie<\/i><br \/>\nWie doet er eigenlijk mee aan deze lange chat?<\/li>\n<\/ul>\n<p>\nOnze structuur kan beide taken \"in het algemeen\" oplossen, maar snel \u2014 nee. Het probleem is dat voor het sorteren binnen de eerste taak <b>het onmogelijk is een index te cre\u00ebren<\/b>, geschikt voor elke deelnemer (en we zullen alle berichten moeten extraheren), en om de tweede op te lossen, is het noodzakelijk <b>alle berichten<\/b> over het onderwerp te extraheren.<\/p>\n<blockquote><p>Onvoorziene gebruikersvragen kunnen een zware <b>streep zetten door de prestaties<\/b>.<\/p><\/blockquote>\n<p><\/p>\n<h2>Stap 5: Redelijke denormalisatie<\/h2>\n<p>\nBeide problemen worden geholpen door extra tabellen waarin we <b>een deel van de gegevens<\/b>, die nodig zijn voor het vormen van geschikte indices voor onze taken, dupliceren.<br \/>\n<img decoding=\"async\" alt=\"Messenger database (part 1): designing the database framework\" src=\"\/wp-content\/uploads\/2020\/01\/f136a9904518b05bca74cc2b9c2f01b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b class=\"spoiler_title\">Tabellen : RU<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE \"BerichtenRegister\"(\n  \"Eigenaar\"\n    uuid\n, \"TypeRegister\"\n    smallint\n, \"DatumTijd\"\n    timestamp\n, \"Bericht\"\n    uuid\n, PRIMARY KEY(\"Eigenaar\", \"TypeRegister\", \"Bericht\")\n);\nCREATE INDEX ON \"BerichtenRegister\"(\"Eigenaar\", \"TypeRegister\", \"DatumTijd\" DESC);\n\nCREATE TABLE \"DeelnemerOnderwerp\"(\n  \"Onderwerp\"\n    uuid\n, \"Persoon\"\n    uuid\n, PRIMARY KEY(\"Onderwerp\", \"Persoon\")\n);<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Tabellen : EN<\/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>\nHier hebben we twee typische benaderingen toegepast die vaak gebruikt worden bij het cre\u00ebren van ondersteunende tabellen:<\/p>\n<ul>\n<li><b>Vermenigvuldiging van records<\/b><br \/>\nWe cre\u00ebren uit \u00e9\u00e9n oorspronkelijke bericht direct meerdere gevolgrecords in verschillende soorten registers voor verschillende eigenaren \u2014 zowel voor de afzender als voor de ontvanger. Nu komt elke register echter op een index \u2014 want in de typische situatie willen we alleen de eerste pagina zien.<\/li>\n<li><b>Unificatie van records<\/b><br \/>\nBij iedere verzending van een bericht binnen een specifiek onderwerp is het genoeg om te controleren of zo'n record al bestaat. Als dat niet het geval is, voegen we het toe aan ons \"woordenboek\".<\/li>\n<\/ul>\n<p>\nIn het volgende deel van het artikel zullen we het hebben over <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">de implementatie van partitionering<\/a><\/noindex> in de structuur van onze database.<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Database van de messenger (deel 1): ontwerpen van de databasebasis | ProHoster","description":"Hoe zakelijke vereisten kunnen worden vertaald naar specifieke datastructuren aan de hand van het ontwerpen van een database voor een messenger vanaf de grond af. Deel 1: ontwerpen van de databasebasis","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/bd-messendzhera-ch-1-proektiruem-karkas-bazy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/55011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=55011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/55011\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=55011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=55011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=55011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}