{"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\/pt\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","title":{"rendered":"BD do mensageiro (parte 2): seccionando \u2018ao vivo\u2019","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Projetamos com sucesso a estrutura do nosso banco de dados PostgreSQL para armazenar conversas; um ano se passou e os usu\u00e1rios est\u00e3o ativamente preenchendo-o, j\u00e1 h\u00e1 <b>milh\u00f5es de registros<\/b>, e\u2026 algo come\u00e7ou a ficar lento.<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483176\/\">Parte 1: projetando a estrutura do banco<\/a><\/noindex><\/li>\n<li>Parte 2: seccionando \u2018ao vivo\u2019<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"BD do mensageiro (parte 2): seccionando \u2018ao vivo\u2019\" src=\"\/wp-content\/uploads\/2020\/01\/7830da046d9c472af15330e42cbb05e0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nO fato \u00e9 que <b>com o aumento do volume da tabela, a \u2018profundidade\u2019 dos \u00edndices tamb\u00e9m cresce<\/b> \u2014 embora de forma logar\u00edtmica. Mas, com o tempo, isso faz com que o servidor processe <i>um n\u00famero muito maior de p\u00e1ginas de dados<\/i>, em compara\u00e7\u00e3o ao come\u00e7o.<\/p>\n<p>\u00c9 aqui que entra em cena <b>o particionamento.<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nVale ressaltar que estamos falando n\u00e3o de sharding, ou seja, de distribuir dados entre diferentes bancos ou servidores. Porque, mesmo dividindo os dados em <b>alguns<\/b> servidores, voc\u00ea n\u00e3o se livra do problema de \u2018incha\u00e7o\u2019 dos \u00edndices ao longo do tempo. \u00c9 claro que, se voc\u00ea pode se dar ao luxo de adicionar um novo servidor todos os dias, seus problemas estar\u00e3o em uma dimens\u00e3o completamente diferente da base de dados espec\u00edfica.<\/p>\n<p>N\u00f3s iremos examinar n\u00e3o scripts espec\u00edficos para implementar o particionamento \u2018no hardware\u2019, mas sim a abordagem \u2014 o que e como deve ser \u2018cortado em fatias\u2019, e quais consequ\u00eancias esse desejo traz.<\/p>\n<h2>Conceito<\/h2>\n<p>\nVamos redefinir nosso objetivo: queremos garantir que, hoje, amanh\u00e3 e daqui um ano, a quantidade de dados lidos do PostgreSQL em qualquer opera\u00e7\u00e3o de leitura\/escrita permane\u00e7a aproximadamente a mesma.<\/p>\n<p>Para quaisquer <b>dados acumulados cronologicamente<\/b> (mensagens, documentos, logs, arquivos, &#8230;) a escolha natural como chave de segmenta\u00e7\u00e3o \u00e9 <b>data\/hora do evento<\/b>. Neste caso, tal evento \u00e9 <u>o momento do envio da mensagem.<\/u>.<\/p>\n<p>Notamos que os usu\u00e1rios quase sempre <b>trabalham apenas com os \u2018\u00faltimos\u2019<\/b> dados \u2014 leem as \u00faltimas mensagens, analisam os \u00faltimos logs,\u2026 N\u00e3o, claro, eles podem rolar para tr\u00e1s no tempo, mas fazem isso muito raramente.<\/p>\n<p>Dessas limita\u00e7\u00f5es, \u00e9 evidente que a solu\u00e7\u00e3o ideal para mensagens ser\u00e1 <b>se\u00e7\u00f5es \u2018di\u00e1rias\u2019<\/b> \u2014 pois quase sempre nosso usu\u00e1rio estar\u00e1 lendo o que lhe chegou \u2018hoje\u2019 ou \u2018ontem\u2019.<\/p>\n<p>Se durante o dia escrevemos e lemos praticamente apenas em uma se\u00e7\u00e3o, isso nos proporciona um <b>uso mais eficiente de mem\u00f3ria e disco.<\/b> \u2014 uma vez que todos os \u00edndices da se\u00e7\u00e3o cabem facilmente na mem\u00f3ria, ao contr\u00e1rio dos \"grandes e robustos\" em toda a tabela.<\/p>\n<h2>passo a passo<\/h2>\n<p>\nNo geral, tudo o que foi dito acima soa como um ganho cont\u00ednuo. E isso \u00e9 alcan\u00e7\u00e1vel, mas para isso precisamos nos esfor\u00e7ar bastante \u2014 porque <u>a decis\u00e3o de seccionar uma das entidades leva \u00e0 necessidade de \"dividir\" as relacionadas<\/u>.<\/p>\n<h4>Mensagem, suas propriedades e proje\u00e7\u00f5es<\/h4>\n<p>\nJ\u00e1 que decidimos dividir as mensagens por datas, \u00e9 razo\u00e1vel tamb\u00e9m dividir as entidades relacionadas a elas (arquivos anexos, lista de destinat\u00e1rios), e <b>tamb\u00e9m pela data da mensagem<\/b>.<\/p>\n<p>Como uma das nossas tarefas t\u00edpicas \u00e9 exatamente a visualiza\u00e7\u00e3o dos registros de mensagens (n\u00e3o lidas, recebidas, todas), \u00e9 l\u00f3gico \"incluir\" tamb\u00e9m isso na seccionamento por datas das mensagens.<\/p>\n<p><img decoding=\"async\" alt=\"BD do mensageiro (parte 2): seccionando \u2018ao vivo\u2019\" src=\"\/wp-content\/uploads\/2020\/01\/5ea615ca97a2b865de537777c401038c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Adicionamos a chave de seccionamento (data da mensagem) em todas as tabelas: destinat\u00e1rios, arquivo, registros. Na pr\u00f3pria mensagem, n\u00e3o \u00e9 necess\u00e1rio adicionar, pode-se usar a existente DataHora.<\/p><\/blockquote>\n<p><\/p>\n<h4>Temas<\/h4>\n<p>\nComo o tema \u00e9 um para v\u00e1rias mensagens, n\u00e3o d\u00e1 para \"dividi-lo\" na mesma modelagem, devemos nos basear em outra coisa. No nosso caso, se encaixa perfeitamente <b>a data da primeira mensagem na conversa<\/b> \u2014 ou seja, o momento da cria\u00e7\u00e3o, propriamente dito, do tema.<\/p>\n<p><img decoding=\"async\" alt=\"BD do mensageiro (parte 2): seccionando \u2018ao vivo\u2019\" src=\"\/wp-content\/uploads\/2020\/01\/4f1336a9e229221f1e25ee8d3c08fb5e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Adicionamos a chave de seccionamento (data do tema) em todas as tabelas: tema, participante.<\/p><\/blockquote>\n<p>\nMas agora temos imediatamente dois problemas:<\/p>\n<ul>\n<li>em qual se\u00e7\u00e3o procurar mensagens pelo tema?<\/li>\n<li>em qual se\u00e7\u00e3o procurar o tema a partir da mensagem?<\/li>\n<\/ul>\n<p>\nPodemos, \u00e9 claro, continuar procurando em todas as se\u00e7\u00f5es, mas isso seria muito triste, e anularia todos os nossos ganhos. Portanto, para saber onde procurar especificamente, faremos refer\u00eancias l\u00f3gicas \/ indicadores para as se\u00e7\u00f5es:<\/p>\n<ul>\n<li>na mensagem adicionaremos <b>um campo com a data do tema<\/b><\/li>\n<li>ao tema adicionaremos <b>um conjunto de datas das mensagens<\/b> dessa conversa (pode ser uma tabela separada ou um array de datas)<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"BD do mensageiro (parte 2): seccionando \u2018ao vivo\u2019\" src=\"\/wp-content\/uploads\/2020\/01\/f7bfdc96c396ca37f46d876f185bf98e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo as modifica\u00e7\u00f5es da lista de datas das mensagens para cada conversa espec\u00edfica ser\u00e3o poucas (afinal, quase todas as mensagens caem em 1-2 dias vizinhos), vou exatamente me ater a essa op\u00e7\u00e3o.<\/p>\n<p>Em resumo, a estrutura do nosso banco assumiu a seguinte forma, considerando o seccionamento:<\/p>\n<p><b class=\"spoiler_title\">Tabelas: RU, ao aversar-se \u00e0 escrita em cir\u00edlico nos nomes das tabelas\/campos, \u00e9 melhor n\u00e3o olhar<\/b><\/p>\n<pre><code class=\"sql\">-- se\u00e7\u00f5es por data da mensagem\nCREATE TABLE \"Mensagem_YYYYMMDD\"(\n  \"Mensagem\"\n    uuid\n      PRIMARY KEY\n, \"Tema\"\n    uuid\n, \"DataTema\"\n    date\n, \"Autor\"\n    uuid\n, \"DataHora\" -- utilizado como data\n    timestamp\n, \"Texto\"\n    text\n);\n\nCREATE TABLE \"Destinatario_YYYYMMDD\"(\n  \"DataMensagem\"\n    date\n, \"Mensagem\"\n    uuid\n, \"Pessoa\"\n    uuid\n, PRIMARY KEY(\"Mensagem\", \"Pessoa\")\n);\n\nCREATE TABLE \"Arquivo_YYYYMMDD\"(\n  \"DataMensagem\"\n    date\n, \"Arquivo\"\n    uuid\n      PRIMARY KEY\n, \"Mensagem\"\n    uuid\n, \"BLOB\"\n    uuid\n, \"Nome\"\n    text\n);\n\nCREATE TABLE \"RegistroMensagens_YYYYMMDD\"(\n  \"DataMensagem\"\n    date\n, \"Propriet\u00e1rio\"\n    uuid\n, \"TipoRegistro\"\n    smallint\n, \"DataHora\"\n    timestamp\n, \"Mensagem\"\n    uuid\n, PRIMARY KEY(\"Propriet\u00e1rio\", \"TipoRegistro\", \"Mensagem\")\n);\nCREATE INDEX ON \"RegistroMensagens_YYYYMMDD\"(\"Propriet\u00e1rio\", \"TipoRegistro\", \"DataHora\" DESC);\n\n-- se\u00e7\u00f5es por data do tema\nCREATE TABLE \"Tema_YYYYMMDD\"(\n  \"DataTema\"\n    date\n, \"Tema\"\n    uuid\n      PRIMARY KEY\n, \"Documento\"\n    uuid\n, \"T\u00edtulo\"\n    text\n);\n\nCREATE TABLE \"ParticipanteTema_YYYYMMDD\"(\n  \"DataTema\"\n    date\n, \"Tema\"\n    uuid\n, \"Pessoa\"\n    uuid\n, PRIMARY KEY(\"Tema\", \"Pessoa\")\n);\n\nCREATE TABLE \"DatasMensagensTema_YYYYMMDD\"(\n  \"DataTema\"\n    date\n, \"Tema\"\n    uuid\n      PRIMARY KEY\n, \"Data\"\n    date\n);\n<\/code><\/pre>\n<h2>Economizando um trocado<\/h2>\n<p>\nBem, e se n\u00e3o usarmos <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/ddl-partitioning\">a op\u00e7\u00e3o cl\u00e1ssica de particionamento<\/a><\/noindex> baseada na distribui\u00e7\u00e3o dos valores do campo (atrav\u00e9s de gatilhos e heran\u00e7a ou PARTITION BY), mas sim \u2018manualmente\u2019 no n\u00edvel da aplica\u00e7\u00e3o, podemos notar que o valor da chave de particionamento j\u00e1 est\u00e1 armazenado no nome da pr\u00f3pria tabela.<\/p>\n<p>Portanto, se voc\u00ea est\u00e1 t\u00e3o <b>preocupado com o volume de dados armazenados<\/b>, ent\u00e3o voc\u00ea pode se livrar desses \u2018campos a mais\u2019 e acessar diretamente tabelas espec\u00edficas. Por\u00e9m, todas as consultas envolvendo v\u00e1rias se\u00e7\u00f5es ter\u00e3o que ser movidas para o lado da aplica\u00e7\u00e3o.<br \/>\n<br \/>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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 do mensageiro (parte 2): particionando \u2018ao vivo\u2019 | ProHoster","description":"Projetamos com sucesso a estrutura do nosso banco PostgreSQL para armazenar a comunica\u00e7\u00e3o, passou um ano, os usu\u00e1rios a est\u00e3o preenchendo ativamente, j\u00e1 s\u00e3o milh\u00f5es de registros, e... algo come\u00e7ou a ficar lento.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/55027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=55027"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/55027\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=55027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=55027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=55027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}