{"id":55027,"date":"2020-01-10T00:00:00","date_gmt":"2020-01-09T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu"},"modified":"2020-02-18T14:03:06","modified_gmt":"2020-02-18T11:03:06","slug":"bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","title":{"rendered":"Base de donn\u00e9es du messager (partie 2) : sectionner \u00ab en direct \u00bb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Nous avons r\u00e9ussi \u00e0 concevoir la structure de notre base PostgreSQL pour stocker les messages, cela fait un an, les utilisateurs l'emplissent activement, et il y a d\u00e9j\u00e0 <b>des millions d'enregistrements<\/b>, et\u2026 tout a commenc\u00e9 \u00e0 ralentir.<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483176\/\">Partie 1 : conception du cadre de la base<\/a><\/noindex><\/li>\n<li>Partie 2 : partitionnement en temps r\u00e9el<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Base de donn\u00e9es du messager (partie 2) : sectionner \u00ab en direct \u00bb\" src=\"\/wp-content\/uploads\/2020\/01\/7830da046d9c472af15330e42cbb05e0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLe fait est que <b>avec l'augmentation du volume de la table, la \u00ab profondeur \u00bb des index augmente \u00e9galement<\/b> \u2014 m\u00eame de mani\u00e8re logarithmique. Mais avec le temps, cela oblige le serveur \u00e0 traiter beaucoup plus de pages de donn\u00e9es <i>pour accomplir les m\u00eames t\u00e2ches de lecture\/\u00e9criture<\/i>, qu'au d\u00e9but.<\/p>\n<p>C'est ici que <b>le partitionnement<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEntre parenth\u00e8ses, il s'agit ici non pas de sharding, c'est-\u00e0-dire de la r\u00e9partition des donn\u00e9es entre diff\u00e9rentes bases ou serveurs. Parce que, m\u00eame en divisant les donn\u00e9es entre <b>plusieurs<\/b> les serveurs, vous ne vous d\u00e9barrasserez pas de la probl\u00e9matique de \u00ab gonflement \u00bb des index avec le temps. Il est clair que si vous pouvez vous permettre d'introduire un nouveau serveur chaque jour, alors vos probl\u00e8mes seront tout \u00e0 fait diff\u00e9rents de ceux d'une base de donn\u00e9es sp\u00e9cifique.<\/p>\n<p>Nous examinerons non pas des scripts sp\u00e9cifiques pour mettre en \u0153uvre le partitionnement \u00ab en dur \u00bb, mais l'approche elle-m\u00eame \u2014 ce que et comment il convient de \u00ab d\u00e9couper en tranches \u00bb, et \u00e0 quoi cela conduit.<\/p>\n<h2>Concept<\/h2>\n<p>\nRed\u00e9finissons notre objectif : nous voulons faire en sorte que, aujourd'hui, demain et dans un an, le nombre de donn\u00e9es PostgreSQL lisibles lors de toute op\u00e9ration de lecture\/\u00e9criture reste \u00e0 peu pr\u00e8s le m\u00eame.<\/p>\n<p>Pour toute <b>donn\u00e9e accumul\u00e9e chronologiquement<\/b> (messages, documents, logs, archives, &#8230;) un choix naturel pour la cl\u00e9 de partitionnement est <b>la date\/heure de l'\u00e9v\u00e9nement<\/b>. Dans notre cas, cet \u00e9v\u00e9nement est <u>le moment de l'envoi du message<\/u>.<\/p>\n<p>Remarquons que les utilisateurs travaillent presque toujours <b>uniquement avec les \u00ab derniers \u00bb<\/b> de ces donn\u00e9es \u2014 ils lisent les derniers messages, analysent les derniers journaux,\u2026 Non, bien s\u00fbr, ils peuvent faire d\u00e9filer plus loin dans le temps, mais ils le font tr\u00e8s rarement.<\/p>\n<p>De ces restrictions, il devient \u00e9vident que la solution optimale pour les messages sera <b>des sections \u00ab quotidiennes \u00bb<\/b> \u2014 car presque toujours, notre utilisateur lira ce qui est arriv\u00e9 \u00ab aujourd'hui \u00bb ou \u00ab hier \u00bb.<\/p>\n<p>Si, au cours de la journ\u00e9e, nous \u00e9crivons et lisons presque exclusivement dans une seule section, cela nous donne \u00e9galement <b>une utilisation plus efficace de la m\u00e9moire et du disque<\/b> \u2014 puisque tous les index de la section peuvent facilement tenir en m\u00e9moire vive, contrairement aux \u00ab gros et gras \u00bb de toute la table.<\/p>\n<h2>\u00e9tape par \u00e9tape<\/h2>\n<p>\nEn g\u00e9n\u00e9ral, tout ce qui a \u00e9t\u00e9 dit ci-dessus sonne comme un profit continu. Et il est r\u00e9alisable, mais pour cela, nous devrons bien travailler \u2014 car <u>la d\u00e9cision de sectionner l'une des entit\u00e9s entra\u00eene la n\u00e9cessit\u00e9 de \u00ab couper \u00bb \u00e9galement les entit\u00e9s associ\u00e9es<\/u>.<\/p>\n<h4>Le message, ses propri\u00e9t\u00e9s et projections<\/h4>\n<p>\nPuisque nous avons d\u00e9cid\u00e9 de d\u00e9couper les messages par dates, il est \u00e9galement raisonnable de diviser les entit\u00e9s-propri\u00e9t\u00e9s qui en d\u00e9pendent (fichiers joints, liste des destinataires), et <b>aussi par date de message<\/b>.<\/p>\n<p>\u00c9tant donn\u00e9 que l'une de nos t\u00e2ches typiques est de consulter les registres de messages (non lus, entrants, tous), il est \u00e9galement logique de les \u00ab inclure \u00bb dans le sectionnement par date des messages.<\/p>\n<p><img decoding=\"async\" alt=\"Base de donn\u00e9es du messager (partie 2) : sectionner \u00ab en direct \u00bb\" src=\"\/wp-content\/uploads\/2020\/01\/5ea615ca97a2b865de537777c401038c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Nous ajoutons la cl\u00e9 de sectionnement (date du message) dans toutes les tables : destinataires, fichier, registres. Dans le message lui-m\u00eame, il n'est pas n\u00e9cessaire de l'ajouter, mais d'utiliser l'Horodatage existant.<\/p><\/blockquote>\n<p><\/p>\n<h4>Th\u00e8mes<\/h4>\n<p>\nPuisque le sujet est commun \u00e0 plusieurs messages, il ne peut pas \u00eatre \u00ab d\u00e9coup\u00e9 \u00bb dans le m\u00eame mod\u00e8le, nous devons nous appuyer sur autre chose. Dans notre cas, cela convient parfaitement <b>la date du premier message dans la correspondance<\/b> \u2014 c'est-\u00e0-dire le moment de cr\u00e9ation, proprement dit, du sujet.<\/p>\n<p><img decoding=\"async\" alt=\"Base de donn\u00e9es du messager (partie 2) : sectionner \u00ab en direct \u00bb\" src=\"\/wp-content\/uploads\/2020\/01\/4f1336a9e229221f1e25ee8d3c08fb5e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Nous ajoutons la cl\u00e9 de sectionnement (date du sujet) dans toutes les tables : sujet, participant.<\/p><\/blockquote>\n<p>\nMais maintenant, nous avons deux probl\u00e8mes qui surgissent imm\u00e9diatement :<\/p>\n<ul>\n<li>dans quelle section chercher des messages par sujet ?<\/li>\n<li>dans quelle section rechercher le sujet d'un message ?<\/li>\n<\/ul>\n<p>\nNous pourrions, bien s\u00fbr, continuer \u00e0 chercher dans toutes les sections, mais ce serait tr\u00e8s triste et effacerait tous nos gains. Donc, pour savoir o\u00f9 chercher pr\u00e9cis\u00e9ment, nous allons faire des liens logiques \/ pointeurs vers les sections :<\/p>\n<ul>\n<li>dans le message, nous ajouterons <b>un champ avec la date du sujet<\/b><\/li>\n<li>au sujet, nous ajouterons <b>un ensemble de dates de messages<\/b> de cette correspondance (cela peut \u00eatre une table s\u00e9par\u00e9e ou un tableau de dates)<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Base de donn\u00e9es du messager (partie 2) : sectionner \u00ab en direct \u00bb\" src=\"\/wp-content\/uploads\/2020\/01\/f7bfdc96c396ca37f46d876f185bf98e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c9tant donn\u00e9 que les modifications de la liste des dates de messages pour chaque correspondance individuelle seront peu nombreuses (puisque presque tous les messages tombent dans 1-2 jours voisins), je vais m'en tenir \u00e0 cette option.<\/p>\n<p>Au total, la structure de notre base a pris la forme suivante en tenant compte du sectionnement :<\/p>\n<p><b class=\"spoiler_title\">Tables : RU, si vous n'aimez pas le cyrillique dans les noms de tables \/ champs, il vaut mieux ne pas regarder<\/b><\/p>\n<pre><code class=\"sql\">-- sections par date de message\nCREATE TABLE \"Message_YYYYMMDD\"(\n  \"Message\"\n    uuid\n      PRIMARY KEY\n, \"Sujet\"\n    uuid\n, \"DateSujet\"\n    date\n, \"Auteur\"\n    uuid\n, \"DateHeure\" -- utilis\u00e9 comme date\n    timestamp\n, \"Texte\"\n    text\n);\n\nCREATE TABLE \"Destinataire_YYYYMMDD\"(\n  \"DateMessage\"\n    date\n, \"Message\"\n    uuid\n, \"Personne\"\n    uuid\n, PRIMARY KEY(\"Message\", \"Personne\")\n);\n\nCREATE TABLE \"Fichier_YYYYMMDD\"(\n  \"DateMessage\"\n    date\n, \"Fichier\"\n    uuid\n      PRIMARY KEY\n, \"Message\"\n    uuid\n, \"BLOB\"\n    uuid\n, \"Nom\"\n    text\n);\n\nCREATE TABLE \"RegistreMessages_YYYYMMDD\"(\n  \"DateMessage\"\n    date\n, \"Propri\u00e9taire\"\n    uuid\n, \"TypeRegistre\"\n    smallint\n, \"DateHeure\"\n    timestamp\n, \"Message\"\n    uuid\n, PRIMARY KEY(\"Propri\u00e9taire\", \"TypeRegistre\", \"Message\")\n);\nCREATE INDEX ON \"RegistreMessages_YYYYMMDD\"(\"Propri\u00e9taire\", \"TypeRegistre\", \"DateHeure\" DESC);\n\n-- sections par date de sujet\nCREATE TABLE \"Sujet_YYYYMMDD\"(\n  \"DateSujet\"\n    date\n, \"Sujet\"\n    uuid\n      PRIMARY KEY\n, \"Document\"\n    uuid\n, \"Titre\"\n    text\n);\n\nCREATE TABLE \"ParticipantSujet_YYYYMMDD\"(\n  \"DateSujet\"\n    date\n, \"Sujet\"\n    uuid\n, \"Personne\"\n    uuid\n, PRIMARY KEY(\"Sujet\", \"Personne\")\n);\n\nCREATE TABLE \"DatesMessagesSujet_YYYYMMDD\"(\n  \"DateSujet\"\n    date\n, \"Sujet\"\n    uuid\n      PRIMARY KEY\n, \"Date\"\n    date\n);\n<\/code><\/pre>\n<h2>\u00c9conomisons quelques centimes<\/h2>\n<p>\nEh bien, si nous n'utilisons pas <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/ddl-partitioning\">la m\u00e9thode classique de partitionnement<\/a><\/noindex> bas\u00e9e sur la distribution des valeurs d'un champ (via des triggers et l'h\u00e9ritage ou PARTITION BY), mais \u00abmanuellement\u00bb au niveau de l'application, on peut remarquer que la valeur de la cl\u00e9 de partitionnement est d\u00e9j\u00e0 stock\u00e9e dans le nom m\u00eame de la table.<\/p>\n<p>Donc, si vous vous <b>pr\u00e9occupez vraiment tant du volume de donn\u00e9es stock\u00e9es<\/b>, alors vous pouvez vous d\u00e9barrasser de ces \u00abchamps superflus\u00bb et vous adresser directement \u00e0 des tables sp\u00e9cifiques. Cependant, toutes les s\u00e9lections de plusieurs sections devront alors \u00eatre transf\u00e9r\u00e9es c\u00f4t\u00e9 application.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 PostgreSQL-\u0431\u0430\u0437\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438, \u043f\u0440\u043e\u0448\u0435\u043b \u0433\u043e\u0434, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442, \u0432\u043e\u0442 \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438\u2026 \u0447\u0442\u043e-\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c. \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 \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0441\u0442\u0435\u0442 \u0438 \u00ab\u0433\u043b\u0443\u0431\u0438\u043d\u0430\u00bb \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u2014 \u0445\u043e\u0442\u044c \u0438 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u044d\u0442\u043e [&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-55027","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 PostgreSQL-\u0431\u0430\u0437\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438, \u043f\u0440\u043e\u0448\u0435\u043b \u0433\u043e\u0434, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442, \u0432\u043e\u0442 \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438\u2026 \u0447\u0442\u043e-\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c. .\" \/>\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\/fr\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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.2): \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 PostgreSQL-\u0431\u0430\u0437\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438, \u043f\u0440\u043e\u0448\u0435\u043b \u0433\u043e\u0434, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442, \u0432\u043e\u0442 \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438\u2026 \u0447\u0442\u043e-\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c. .\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu\" \/>\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:06+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\udd47BD du messager (partie 2) : partitionnons \u00ab\u00e0 chaud\u00bb | ProHoster","description":"Nous avons habilement con\u00e7u la structure de notre base PostgreSQL pour stocker la correspondance, un an s'est \u00e9coul\u00e9, les utilisateurs la remplissent activement, il y a d\u00e9j\u00e0 des millions d'enregistrements, et... tout a commenc\u00e9 \u00e0 ramer.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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.2): \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb | ProHoster","og:description":"\u041c\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 PostgreSQL-\u0431\u0430\u0437\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438, \u043f\u0440\u043e\u0448\u0435\u043b \u0433\u043e\u0434, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442, \u0432\u043e\u0442 \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438\u2026 \u0447\u0442\u043e-\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c. .","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","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:06+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55027","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:34:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:53:48","updated":"2026-01-24 13:34:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/55027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=55027"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/55027\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=55027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=55027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=55027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}