{"id":34734,"date":"2019-10-31T22:00:06","date_gmt":"2019-10-31T19:00:06","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sravnenie-i-vybor-sistem-migratsii-dannyh\/"},"modified":"2019-10-31T22:00:06","modified_gmt":"2019-10-31T19:00:06","slug":"sravnenie-i-vybor-sistem-migratsii-dannyh","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh","title":{"rendered":"Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h2>Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados\" src=\"\/wp-content\/uploads\/2019\/05\/a25cc01b8d86b233a6d21caddb169fec.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO modelo de dados durante o processo de desenvolvimento tem a propriedade de mudar, e em algum momento ele deixa de corresponder ao banco de dados. Claro, o banco de dados pode ser exclu\u00eddo, e ent\u00e3o o ORM criar\u00e1 uma nova vers\u00e3o que corresponder\u00e1 ao modelo, mas esse procedimento resultar\u00e1 na perda de dados existentes. Assim, a fun\u00e7\u00e3o do sistema de migra\u00e7\u00e3o \u00e9 sincronizar a estrutura com o modelo de dados no aplicativo sem perda de dados existentes.<\/p>\n<p>Neste artigo, gostar\u00edamos de discutir v\u00e1rias ferramentas para gerenciar migra\u00e7\u00f5es de bancos de dados. Esperamos que esta vis\u00e3o geral seja \u00fatil para desenvolvedores enfrentando uma escolha semelhante.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Tarefa<\/h3>\n<p>\nNossa empresa atualmente est\u00e1 desenvolvendo ativamente a pr\u00f3xima gera\u00e7\u00e3o do produto \u2013 Docs Security Suite (DSS). A parte do servidor est\u00e1 sendo escrita em .Net Core, e, como SGBD, est\u00e1 sendo utilizado o Entity Framework Core. Ao projetar o aplicativo, utilizamos a abordagem Code First.<\/p>\n<p>O modelo de dom\u00ednio do aplicativo \u00e9 criado simultaneamente por v\u00e1rios desenvolvedores \u2013 cada um respons\u00e1vel por sua parte l\u00f3gica do sistema. <\/p>\n<p>Na gera\u00e7\u00e3o anterior do DSS, foi utilizado o cl\u00e1ssico Entity Framework Migrations (EF 6) como sistema de gest\u00e3o de migra\u00e7\u00f5es. No entanto, surgiram algumas reclama\u00e7\u00f5es, sendo a principal que o EF carecia de uma abordagem razo\u00e1vel para resolu\u00e7\u00e3o de conflitos de vers\u00f5es. Esse fato ainda nos desagrada durante a corre\u00e7\u00e3o de bugs no suporte, por isso decidimos considerar alternativas.<\/p>\n<p>Como resultado das discuss\u00f5es, foram formados os seguintes requisitos para o sistema de gest\u00e3o de migra\u00e7\u00f5es:<\/p>\n<ol>\n<li>Suporte a diferentes SGBDs. \u00c9 obrigat\u00f3rio o MS SQL Server, PostgreSQL, Oracle, mas o uso de outros tamb\u00e9m \u00e9 potencialmente poss\u00edvel.<\/li>\n<li>Trabalho com ORM. Inicialmente, estava previsto o uso do EF Core, mas durante a fase de projeto est\u00e1vamos dispostos a considerar outras ORMs.<\/li>\n<li>Gera\u00e7\u00e3o autom\u00e1tica de migra\u00e7\u00f5es. Considerando o desenvolvimento Code First, gostar\u00edamos de evitar a necessidade de \"escrever manualmente\" as migra\u00e7\u00f5es.<\/li>\n<li>Conflitos de vers\u00f5es. Em condi\u00e7\u00f5es de desenvolvimento distribu\u00eddo, ao mesclar, o EF Core pode falhar devido a conflitos. Isso se torna um problema significativo, uma vez que diferentes partes do aplicativo s\u00e3o criadas por diferentes desenvolvedores, resultando em uma grande quantidade de tempo gasto em cada um.<\/li>\n<li>Documenta\u00e7\u00e3o e suporte avan\u00e7ados. Aqui, acreditamos que explica\u00e7\u00f5es n\u00e3o s\u00e3o necess\u00e1rias.<\/li>\n<li>Gratuidade. O crit\u00e9rio \u00e9 condicional, pois sistemas que n\u00e3o s\u00e3o muito caros ou aqueles que s\u00e3o caros, mas ideais em termos de conforto, tamb\u00e9m estamos prontos para considerar.<\/li>\n<\/ol>\n<p>\nComo resultado de uma pequena pesquisa, foram encontrados e reconhecidos como desej\u00e1veis para considera\u00e7\u00e3o as seguintes op\u00e7\u00f5es:<\/p>\n<ol>\n<li>Migrations do EF Core<\/li>\n<li>DBup<\/li>\n<li>RoundhousE<\/li>\n<li>ThinkingHome.Migrator<\/li>\n<li>Fluent Migrator <\/li>\n<\/ol>\n<p><\/p>\n<h3>Agora, um pouco mais detalhado<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados\" src=\"\/wp-content\/uploads\/2019\/05\/4cb242f230b19073626e36a472dcea50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/ef\/core\/managing-schemas\/migrations\/\">Migrations do EntityFramework Core<\/a><\/noindex><\/b><\/p>\n<p>Naturalmente, esta foi a primeira e principal op\u00e7\u00e3o a ser escolhida. Uma ferramenta nativa que funciona out of the box, sem quaisquer complica\u00e7\u00f5es. Uma grande quantidade de documenta\u00e7\u00e3o, oficial e n\u00e3o oficial, simplicidade, etc. No entanto, as cr\u00edticas feitas ao cl\u00e1ssico EF s\u00e3o totalmente pertinentes ao EF Core. <\/p>\n<p>Assim, os pr\u00f3s do EF Core s\u00e3o:<\/p>\n<ul>\n<li>Suporte da Microsoft, documenta\u00e7\u00e3o, incluindo em portugu\u00eas, uma enorme comunidade.<\/li>\n<li>Autogera\u00e7\u00e3o de migrations com base no CodeFirst.<\/li>\n<li>Em compara\u00e7\u00e3o com o EF 6, no EF Core agora n\u00e3o h\u00e1 mais o armazenamento de um snapshot do banco de dados. Ao usar o EF Core com Code First, n\u00e3o \u00e9 mais obrigat\u00f3rio implementar um banco de dados.<\/li>\n<li>Como estamos partindo do Code First, \u00e9 poss\u00edvel manter uma migration para todos os provedores de acesso a dados necess\u00e1rios.<\/li>\n<li>Quanto aos provedores \u2014 s\u00e3o suportados PostgreSQL, Oracle, etc., e at\u00e9 mesmo \u2013 MS SQL Server :)<\/li>\n<\/ul>\n<p>\n E tamb\u00e9m os contras:<\/p>\n<ul>\n<li>A resolu\u00e7\u00e3o de conflitos permanece no mesmo n\u00edvel. \u00c9 necess\u00e1rio organizar a sequ\u00eancia de migrations e atualizar os snapshots do banco de dados.<\/li>\n<li>Depend\u00eancia dos modelos a partir dos quais as migrations foram geradas.<\/li>\n<\/ul>\n<p>\n<b>DbUp<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados\" src=\"\/wp-content\/uploads\/2019\/05\/02a47718c7b4c618c204c2273b4de50c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/dbup.github.io\/\">dbup.github.io<\/a><\/noindex><\/p>\n<p>DbUp \u00e9 uma biblioteca .NET que pode ser instalada via NuGet e ajuda a aplicar mudan\u00e7as no SQL Server. Ela rastreia quais scripts de mudan\u00e7as j\u00e1 foram executados e executa aqueles que s\u00e3o necess\u00e1rios para atualizar o banco de dados. A biblioteca surgiu de um projeto de motor de blogs open source em ASP.NET e est\u00e1 sob a licen\u00e7a MIT, com o c\u00f3digo dispon\u00edvel no GitHub. As migrations s\u00e3o descritas usando T-SQL.<\/p>\n<p>Quais s\u00e3o os pr\u00f3s aqui:<\/p>\n<ul>\n<li>Suporte a uma ampla gama de SGBDs (MS SQL Server, PostgreSQL, MySQL).<\/li>\n<li>Como os scripts s\u00e3o escritos em T-SQL, eles parecem bastante simples.<\/li>\n<li>Os conflitos tamb\u00e9m s\u00e3o resolvidos usando SQL.<\/li>\n<\/ul>\n<p>\nE os contras:<\/p>\n<ul>\n<li>Apesar da vasta gama de SGBDs suportados, o Oracle n\u00e3o est\u00e1 entre eles.<\/li>\n<li>N\u00e3o interage com ORM.<\/li>\n<li>Escrever scripts em T-SQL manualmente n\u00e3o \u00e9 o que buscamos. <\/li>\n<li>A documenta\u00e7\u00e3o e a comunidade s\u00e3o medianas, embora talvez n\u00e3o sejam necess\u00e1rias no contexto da escrita de scripts SQL.<\/li>\n<\/ul>\n<p>\n<b>RoundhousE<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados\" src=\"\/wp-content\/uploads\/2019\/05\/ca418187d64e75830b2643dea794c6d0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/chucknorris\/roundhouse\">github.com\/chucknorris\/roundhouse<\/a><\/noindex><\/p>\n<p>Esta ferramenta de gerenciamento de migra\u00e7\u00f5es, distribu\u00edda sob a licen\u00e7a Apache 2.0, assim como a anterior, opera com o mecanismo de migra\u00e7\u00f5es T-SQL. Aparentemente, os desenvolvedores priorizaram a resolu\u00e7\u00e3o de problemas t\u00e9cnicos relacionados ao suporte a SGBDs, em vez de criar um processo de desenvolvimento confort\u00e1vel.<\/p>\n<p>Acesso direto aos sistemas de cabos transpac\u00edficos. Ping m\u00ednimo para a China, Jap\u00e3o, Austr\u00e1lia e costa oeste dos EUA.<\/p>\n<ul>\n<li>Suporta os SGBDs necess\u00e1rios (incluindo o Oracle)<\/li>\n<\/ul>\n<p>\nPontos negativos:<\/p>\n<ul>\n<li>Oracle (e tamb\u00e9m o desatualizado Access) n\u00e3o \u00e9 suportado no .NET Core, apenas no .NET Full Framework<\/li>\n<li>N\u00e3o funciona com ORM<\/li>\n<li>A documenta\u00e7\u00e3o \u00e9 ainda mais escassa do que a da ferramenta anterior<\/li>\n<li>Novamente, as migra\u00e7\u00f5es s\u00e3o escritas em scripts<\/li>\n<\/ul>\n<p>\n<b>ThinkingHome.Migrator<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados\" src=\"\/wp-content\/uploads\/2019\/05\/c530e23f8c9c27ed1d53f3dce710eb70.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUma ferramenta para migra\u00e7\u00e3o de vers\u00e3o de esquema de banco de dados para a plataforma .NET Core, distribu\u00edda sob a licen\u00e7a MIT. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/414867\/\">O pr\u00f3prio desenvolvedor escreveu sobre a \u00faltima vers\u00e3o quase um ano atr\u00e1s<\/a><\/noindex>. <\/p>\n<p>Acesso direto aos sistemas de cabos transpac\u00edficos. Ping m\u00ednimo para a China, Jap\u00e3o, Austr\u00e1lia e costa oeste dos EUA.<\/p>\n<ul>\n<li>Voltada para .NET Core<\/li>\n<li>Foi implementada uma sequ\u00eancia de migra\u00e7\u00f5es ramificada<\/li>\n<li>O registro de migra\u00e7\u00f5es foi implementado<\/li>\n<\/ul>\n<p>\nPontos negativos:<\/p>\n<ul>\n<li>A \u00faltima atualiza\u00e7\u00e3o foi h\u00e1 um ano. Aparentemente, o projeto n\u00e3o \u00e9 mantido<\/li>\n<li>N\u00e3o suporta Oracle (o artigo indica que isso se deve \u00e0 falta de uma implementa\u00e7\u00e3o est\u00e1vel para .NET Core \u2013 mas isso foi h\u00e1 um ano)<\/li>\n<li>Falta a autogera\u00e7\u00e3o de migra\u00e7\u00f5es<\/li>\n<\/ul>\n<p>\nNo geral, o projeto parece promissor, especialmente se estivesse em desenvolvimento, mas precis\u00e1vamos tomar uma decis\u00e3o aqui e agora.<\/p>\n<p><b>Fluent Migrator<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados\" src=\"\/wp-content\/uploads\/2019\/05\/def2f7b9ecd8084975add75ded1a7a71.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fluentmigrator\/fluentmigrator\">github.com\/fluentmigrator\/fluentmigrator<\/a><\/noindex><\/p>\n<p>A ferramenta de migra\u00e7\u00f5es mais popular, com uma grande base de f\u00e3s. Distribu\u00edda sob a licen\u00e7a Apache 2.0. Como indicado na descri\u00e7\u00e3o, \u00e9 uma plataforma de migra\u00e7\u00e3o para .NET, semelhante ao Ruby on Rails Migrations. As altera\u00e7\u00f5es no esquema do banco de dados s\u00e3o descritas em classes em C#.<\/p>\n<p>Aqui est\u00e3o os pontos positivos:<\/p>\n<ul>\n<li>Suporte aos SGBDs necess\u00e1rios<\/li>\n<li>Suporte ao .NET Core<\/li>\n<li>Uma comunidade grande e desenvolvida<\/li>\n<li>Os conflitos de migra\u00e7\u00e3o s\u00e3o resolvidos de maneira sequencial \u2013 as migra\u00e7\u00f5es especificam a ordem de execu\u00e7\u00e3o. Al\u00e9m disso, se houver um conflito em torno de uma entidade, durante a mesclagem do c\u00f3digo, a resolu\u00e7\u00e3o \u00e9 feita da mesma forma que no restante do c\u00f3digo<\/li>\n<li>Existem perfis que s\u00e3o executados ap\u00f3s a execu\u00e7\u00e3o bem-sucedida da migra\u00e7\u00e3o. E podem conter fun\u00e7\u00f5es de servi\u00e7o. A \u00faltima atualiza\u00e7\u00e3o foi h\u00e1 um m\u00eas, ou seja, o projeto est\u00e1 ativo<\/li>\n<\/ul>\n<p>\nQuanto aos pontos negativos, aqui est\u00e3o:<\/p>\n<ul>\n<li>Falta a autogera\u00e7\u00e3o de migra\u00e7\u00f5es<\/li>\n<li>Falta de conex\u00e3o com modelos EF<\/li>\n<li>Sem instant\u00e2neas do banco de dados<\/li>\n<\/ul>\n<p><\/p>\n<h3>Qual foi, ent\u00e3o, nossa escolha?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados\" src=\"\/wp-content\/uploads\/2019\/05\/db6953bf80bbbf9f560e39b32c32752c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs discuss\u00f5es mais intensas giraram em torno de dois par\u00e2metros \u2013 a autogera\u00e7\u00e3o de migra\u00e7\u00f5es e a solu\u00e7\u00e3o vi\u00e1vel para conflitos. Outros fatores causaram muito menos preocupa\u00e7\u00e3o. No final, ap\u00f3s a discuss\u00e3o, a equipe decidiu usar o Fluent Migrator no novo projeto. Pois a resolu\u00e7\u00e3o de conflitos a longo prazo trar\u00e1 muitos mais benef\u00edcios.<\/p>\n<h4>Como resultado, obtemos um servi\u00e7o de \"monitoramento como servi\u00e7o\", automatizado na linha de produ\u00e7\u00e3o de integra\u00e7\u00e3o cont\u00ednua. O desenvolvedor ou testador precisa apenas definir a lista de m\u00e9tricas em um arquivo JSON, e tudo o mais acontece automaticamente. Obtemos um controle de qualidade transparente dos lan\u00e7amentos: todas as notifica\u00e7\u00f5es sobre desempenho, consumo de recursos ou regress\u00f5es arquitet\u00f4nicas.<\/h4>\n<p>\n\u00c9 claro que n\u00e3o existem ferramentas perfeitas. Assim, para n\u00f3s, foi necess\u00e1rio estabelecer prioridades em nossas \"prefer\u00eancias\". No entanto, para outras equipes e outras tarefas, diferentes fatores podem ser decisivos. Esperamos que este artigo ajude voc\u00ea a tomar uma decis\u00e3o.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/crosstech\/blog\/453930\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f, \u0438 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0411\u0414 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c, \u0438 \u0442\u043e\u0433\u0434\u0430 ORM \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u043e \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u043e\u0442\u0435\u0440\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26172,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34734","post","type-post","status-publish","format-standard","has-post-thumbnail","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=\"\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 .\" \/>\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\/sravnenie-i-vybor-sistem-migratsii-dannyh\" \/>\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\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 .\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh\" \/>\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=\"2019-10-31T19:00:06+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00: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\udd47Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados | ProHoster","description":"Compara\u00e7\u00e3o e escolha de sistemas de migra\u00e7\u00e3o de dados.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh","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\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster","og:description":"\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 .","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh","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":"2019-10-31T19:00:06+00:00","article:modified_time":"2019-10-31T19:00:06+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34734","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-21 20:26:53","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:16:32","updated":"2026-01-21 20:26:53","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\/34734","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=34734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/34734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/26172"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=34734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=34734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=34734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}