{"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\/it\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh","title":{"rendered":"Confronto e scelta dei sistemi di migrazione dei dati","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h2>Confronto e scelta dei sistemi di migrazione dei dati<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Confronto e scelta dei sistemi di migrazione dei dati\" src=\"\/wp-content\/uploads\/2019\/05\/a25cc01b8d86b233a6d21caddb169fec.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl modello dei dati in fase di sviluppo ha la propriet\u00e0 di cambiare, e a un certo punto smette di corrispondere al database. Certamente, il database pu\u00f2 essere eliminato, e allora l'ORM creer\u00e0 una nuova versione che corrisponder\u00e0 al modello, ma tale procedura porter\u00e0 alla perdita dei dati esistenti. Pertanto, la funzione del sistema di migrazione si riduce a sincronizzare lo schema modificato con il modello dei dati nell'app senza perdere i dati esistenti.<\/p>\n<p>In questo articolo ci piacerebbe esaminare diversi strumenti per la gestione delle migrazioni dei database. Speriamo che questa panoramica sia utile per i programmatori che si trovano di fronte a una simile scelta.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Compito<\/h3>\n<p>\nAttualmente nella nostra azienda si sta attivamente sviluppando la prossima generazione del prodotto \u2013 Docs Security Suite (DSS). La parte server \u00e8 scritta in .Net Core e come DBMS utilizziamo di conseguenza Entity Framework Core. Nella progettazione dell'app, utilizziamo l'approccio Code First.<\/p>\n<p>Il modello di dominio dell'applicazione \u00e8 creato contemporaneamente da pi\u00f9 sviluppatori, ognuno dei quali \u00e8 responsabile della propria parte logica del sistema. <\/p>\n<p>Nella precedente generazione di DSS, per la gestione delle migrazioni \u00e8 stata utilizzata la classica Entity Framework Migrations (EF 6). Tuttavia, su di essa si sono accumulate alcune lamentele, la principale delle quali riguardava l'assenza in EF di un approccio ragionevole alla risoluzione dei conflitti di versione. Questo fatto ci rattrista ancora durante il bug fixing nell'ambito del supporto, quindi \u00e8 stata presa la decisione di esplorare alternative.<\/p>\n<p>Dopo una discussione, si sono definiti i seguenti requisiti per il sistema di gestione delle migrazioni:<\/p>\n<ol>\n<li>Supporto per diversi DBMS. MS SQL Server, PostgreSQL, Oracle sono obbligatori, ma \u00e8 potenzialmente possibile utilizzare anche altri.<\/li>\n<li>Lavoro con ORM. Inizialmente si prevedeva l'uso di EF Core, ma durante la fase di progettazione eravamo aperti a considerare anche altri ORM.<\/li>\n<li>Autogenerazione delle migrazioni. Considerando lo sviluppo Code First, vorremmo evitare la necessit\u00e0 di \"scrivere a mano\" le migrazioni.<\/li>\n<li>Conflitti di versione. In un contesto di sviluppo distribuito, durante il merging EF Core pu\u00f2 andare in crisi a causa dei conflitti. Questo diventa un problema significativo, poich\u00e9 le diverse parti dell'applicazione vengono create da sviluppatori diversi, e perci\u00f2 si perde molto tempo per ogni<\/li>\n<li>Documentazione avanzata e supporto. Qui, ci sembra, non siano necessarie spiegazioni.<\/li>\n<li>Gratuit\u00e0. Il criterio \u00e8 soggettivo, poich\u00e9 sistemi non molto costosi o costosi, ma ideali in termini di comodit\u00e0, siamo comunque stati disposti a considerare.<\/li>\n<\/ol>\n<p>\nA seguito di una piccola ricerca sono stati trovati e considerati desiderabili i seguenti opzioni:<\/p>\n<ol>\n<li>Migrazioni 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>E ora un po' pi\u00f9 nel dettaglio<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Confronto e scelta dei sistemi di migrazione dei dati\" 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\/\">Migrazioni EntityFramework Core<\/a><\/noindex><\/b><\/p>\n<p>Naturalmente, questa \u00e8 stata la prima e principale opzione da considerare. Strumento nativo, funzionante 'out of the box' senza alcun rito. Un'enorme quantit\u00e0 di documentazione, ufficiale e non, semplicit\u00e0, ecc. Tuttavia, le critiche rivolte al classico EF sono perfettamente valide anche per EF Core. <\/p>\n<p>In questo modo, per EF Core sono stati evidenziati i vantaggi:<\/p>\n<ul>\n<li>Supporto Microsoft, documentazione, anche in russo, enorme comunit\u00e0<\/li>\n<li>Autogenerazione di migrazioni basate su CodeFirst<\/li>\n<li>Rispetto a EF 6, in EF Core ora non viene conservata una copia del database. Lavorando con EF Core in Code First, ora non \u00e8 necessario distribuire il database.<\/li>\n<li>Poich\u00e9 partiamo da Code First, c'\u00e8 la possibilit\u00e0 di gestire una migrazione per tutti i fornitori di accesso ai dati richiesti.<\/li>\n<li>Per quanto riguarda i fornitori, sono supportati sia PostgreSQL che Oracle, e cos\u00ec via, e persino \u2013 MS SQL Server \ud83d\ude0a.<\/li>\n<\/ul>\n<p>\n E anche svantaggi:<\/p>\n<ul>\n<li>La risoluzione dei conflitti \u00e8 rimasta allo stesso livello. \u00c8 necessario stabilire una sequenza di migrazioni e aggiornare le copie del database.<\/li>\n<li>Dipendenza dai modelli da cui sono state generate le migrazioni.<\/li>\n<\/ul>\n<p>\n<b>DbUp<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Confronto e scelta dei sistemi di migrazione dei dati\" 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 \u00e8 una libreria .NET, installata tramite NuGet, che aiuta ad applicare le modifiche al SQL Server. Tiene traccia di quali script di modifica sono gi\u00e0 stati eseguiti e esegue quelli necessari per aggiornare il database. La libreria \u00e8 nata da un progetto di motore blog open source in ASP.NET e esiste sotto licenza MIT, con codice disponibile su GitHub. Le migrazioni sono descritte usando T-SQL.<\/p>\n<p>Quali sono qui i vantaggi:<\/p>\n<ul>\n<li>Supporto per un gran numero di DBMS (MS SQL Server, PostgreSQL, MySQL)<\/li>\n<li>Poich\u00e9 gli script sono scritti in T-SQL, appaiono piuttosto semplici.<\/li>\n<li>I conflitti sono risolti anche tramite SQL.<\/li>\n<\/ul>\n<p>\nE gli svantaggi:<\/p>\n<ul>\n<li>Nonostante la variet\u00e0 di DBMS supportati, Oracle non \u00e8 incluso.<\/li>\n<li>Non interagisce con ORM.<\/li>\n<li>Scrivere script in T-SQL 'a mano' non \u00e8 ci\u00f2 a cui aspiravamo. <\/li>\n<li>La documentazione e la community sono un po' scarse, anche se nella scrittura di script SQL potrebbero non essere necessarie.<\/li>\n<\/ul>\n<p>\n<b>RoundhousE<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Confronto e scelta dei sistemi di migrazione dei dati\" 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>Questo strumento di gestione delle migrazioni, distribuito sotto licenza Apache 2.0, come il precedente, funziona sul motore di migrazione T-SQL. A quanto pare, gli sviluppatori si sono concentrati sulla risoluzione dei problemi tecnici relativi al supporto dei DBMS, piuttosto che sulla creazione di un processo di sviluppo confortevole.<\/p>\n<p>Pro:<\/p>\n<ul>\n<li>Supporta i DBMS necessari (incluso Oracle)<\/li>\n<\/ul>\n<p>\nContro:<\/p>\n<ul>\n<li>Oracle (e anche Access, che non \u00e8 rilevante per noi) non \u00e8 supportato su .NET Core, ma solo su .NET Full Framework.<\/li>\n<li>Non funziona con ORM<\/li>\n<li>La documentazione \u00e8 ancora pi\u00f9 limitata rispetto al precedente strumento.<\/li>\n<li>Ancora una volta: le migrazioni vengono scritte con script.<\/li>\n<\/ul>\n<p>\n<b>ThinkingHome.Migrator<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Confronto e scelta dei sistemi di migrazione dei dati\" src=\"\/wp-content\/uploads\/2019\/05\/c530e23f8c9c27ed1d53f3dce710eb70.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStrumento per la migrazione versionata dello schema del database per la piattaforma .NET Core, distribuito sotto licenza MIT. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/414867\/\">Lo sviluppatore ha scritto della sua ultima versione quasi un anno fa.<\/a><\/noindex>. <\/p>\n<p>Pro:<\/p>\n<ul>\n<li>Ottimizzato per .NET Core.<\/li>\n<li>\u00c8 stata implementata una sequenza di migrazioni ramificata.<\/li>\n<li>\u00c8 stata implementata la registrazione delle migrazioni.<\/li>\n<\/ul>\n<p>\nContro:<\/p>\n<ul>\n<li>Ultimo aggiornamento un anno fa. A quanto pare, il progetto non \u00e8 pi\u00f9 supportato.<\/li>\n<li>Non supporta Oracle (nell'articolo si afferma che ci\u00f2 \u00e8 dovuto all'assenza di un'implementazione stabile per .NET Core, anche se questo \u00e8 un problema di un anno fa).<\/li>\n<li>Manca l'autogenerazione delle migrazioni.<\/li>\n<\/ul>\n<p>\nIn generale, il progetto appare promettente, soprattutto se si sarebbe sviluppato, ma dovevamo prendere una decisione qui e ora.<\/p>\n<p><b>Fluent Migrator<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Confronto e scelta dei sistemi di migrazione dei dati\" 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>Strumento di migrazione pi\u00f9 popolare, con un grande seguito di fan. Distribuito sotto licenza Apache 2.0. Come indicato nella descrizione, \u00e8 una piattaforma di migrazione per .NET, simile a Ruby on Rails Migrations. Le modifiche allo schema del DB sono descritte in classi in C#.<\/p>\n<p>Ci sono vantaggi:<\/p>\n<ul>\n<li>Supporto per i DBMS necessari.<\/li>\n<li>Supporto per .NET Core.<\/li>\n<li>Grande comunit\u00e0 sviluppata.<\/li>\n<li>I conflitti di migrazione vengono risolti in modo sequenziale: alle migrazioni viene assegnato un ordine di esecuzione. Inoltre, se si verifica un conflitto relativo a un'entit\u00e0, la sua risoluzione durante la fusione del codice avviene allo stesso modo del resto del codice.<\/li>\n<li>Ci sono profili che vengono eseguiti dopo il completamento con successo della migrazione e possono contenere funzioni di servizio. L'ultimo aggiornamento \u00e8 stato un mese fa, quindi il progetto \u00e8 attivo.<\/li>\n<\/ul>\n<p>\nPer quanto riguarda gli svantaggi, ci sono:<\/p>\n<ul>\n<li>Manca l'autogenerazione delle migrazioni.<\/li>\n<li>Manca il collegamento con i modelli EF.<\/li>\n<li>Nessuno snapshot del DB.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Qual \u00e8 stata la nostra scelta?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Confronto e scelta dei sistemi di migrazione dei dati\" src=\"\/wp-content\/uploads\/2019\/05\/db6953bf80bbbf9f560e39b32c32752c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI dibattiti pi\u00f9 accesi si sono sviluppati attorno a due parametri: l'autogenerazione delle migrazioni e una gestione ragionevole dei conflitti. Altri fattori spaventavano molto meno. Alla fine, a seguito delle discussioni, il team ha deciso di utilizzare Fluent Migrator per il nuovo progetto. La gestione dei conflitti porter\u00e0 infatti in futuro un numero considerevole di vantaggi.<\/p>\n<h4>Conclusioni<\/h4>\n<p>\nNaturalmente, non esistono strumenti perfetti. Dobbiamo quindi mettere in ordine di priorit\u00e0 le nostre \"voglie\" per fare una scelta. Tuttavia, per altri team e altre attivit\u00e0 potrebbero risultare decisivi fattori diversi. Speriamo che questo articolo vi aiuti a fare la vostra scelta.<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.1.1 - 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\/it\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Confronto e scelta dei sistemi di migrazione dei dati | ProHoster","description":"Confronto e scelta dei sistemi di migrazione dei dati.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/34734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=34734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/34734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/26172"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=34734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=34734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=34734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}