{"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 \u00e8 soggetto a cambiamenti e a un certo punto pu\u00f2 smettere di corrispondere al database. Certamente, \u00e8 possibile eliminare il DB, e in tal caso l'ORM creer\u00e0 una nuova versione che sar\u00e0 in linea con il modello, ma questa procedura porter\u00e0 alla perdita dei dati esistenti. Pertanto, la funzione del sistema di migrazione \u00e8 quella di sincronizzare la scheda con il modello dei dati nell'applicazione a seguito di cambiamenti, senza perdere i dati esistenti.<\/p>\n<p>In questo articolo, desideriamo esaminare vari strumenti per la gestione delle migrazioni dei database. Speriamo che questa panoramica sia utile per gli sviluppatori che si trovano di fronte a questa scelta.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Compito<\/h3>\n<p>\nNella nostra azienda stiamo attualmente sviluppando attivamente la prossima generazione del prodotto \u2013 Docs Security Suite (DSS). La parte server \u00e8 scritta in .Net Core e il database utilizzato \u00e8 Entity Framework Core. Durante la progettazione dell'applicazione, adottiamo l'approccio Code First.<\/p>\n<p>Il modello a dominio dell'applicazione \u00e8 creato contemporaneamente da pi\u00f9 sviluppatori, ognuno dei quali \u00e8 responsabile per la propria parte logica del sistema. <\/p>\n<p>Nella precedente generazione di DSS, il sistema di gestione delle migrazioni utilizzava le classiche Migrations di Entity Framework (EF 6). Tuttavia, ci sono state alcune lamentele su di esso, la principale delle quali riguardava l'assenza di un approccio ragionevole alla risoluzione dei conflitti di versione in EF. Questo fatto ci preoccupa ancora durante il bug fixing nell'ambito del supporto, quindi \u00e8 stata presa la decisione di esplorare opzioni alternative.<\/p>\n<p>A seguito della discussione, sono emerse le seguenti esigenze per il sistema di gestione delle migrazioni:<\/p>\n<ol>\n<li>Supporto per diversi DBMS. \u00c8 necessario MS SQL Server, PostgreSQL, Oracle, ma \u00e8 potenzialmente possibile l'uso di altri.<\/li>\n<li>Collaborazione con ORM. Inizialmente si prevedeva di utilizzare EF Core, ma durante la fase di progettazione eravamo pronti a considerare anche altri ORM.<\/li>\n<li>Generazione automatica delle migrazioni. Data la progettazione Code First, ci piacerebbe evitare di 'scrivere a mano' le migrazioni.<\/li>\n<li>Conflitti di versione. Nello sviluppo distribuito, durante il merging, EF Core pu\u00f2 incorrere in conflitti. Questo diventa un problema significativo, dato che diverse parti dell'applicazione vengono create da sviluppatori diversi, portando a una notevole perdita di tempo su ciascun conflitto.<\/li>\n<li>Documentazione e supporto avanzati. Qui, non servono ulteriori spiegazioni.<\/li>\n<li>Gratuit\u00e0. Questo criterio \u00e8 soggettivo, poich\u00e9 siamo anche pronti a considerare sistemi economici o costosi ma eccellenti in termini di usabilit\u00e0.<\/li>\n<\/ol>\n<p>\nDopo una breve ricerca, sono stati trovati e considerati desiderabili i seguenti opzioni:<\/p>\n<ol>\n<li>Migrazioni di 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 in modo pi\u00f9 dettagliato<\/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 di EntityFramework Core<\/a><\/noindex><\/b><\/p>\n<p>Naturalmente, questa \u00e8 stata la prima e principale opzione da considerare. Uno strumento nativo, funzionante out-of-the-box senza alcun passaggio complicato. Ampia documentazione, ufficiale e non, semplicit\u00e0, ecc. Tuttavia, le critiche mosse a EF classico sono del tutto valide anche per EF Core. <\/p>\n<p>Pertanto, EF Core presenta i seguenti vantaggi:<\/p>\n<ul>\n<li>Supporto Microsoft, documentazione, compresa quella in russo, e una vasta comunit\u00e0.<\/li>\n<li>Generazione automatica delle migrazioni basata su Code First<\/li>\n<li>A differenza di EF 6, in EF Core non viene pi\u00f9 memorizzato un'istantanea del database. Quando si utilizza EF Core in Code First, non \u00e8 pi\u00f9 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 necessari.<\/li>\n<li>Per quanto riguarda i fornitori, sono supportati sia PostgreSQL che Oracle, ecc., ecc., e addirittura \u2013 MS SQL Server \ud83d\ude0a<\/li>\n<\/ul>\n<p>\n E ci sono 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 istantanee del database.<\/li>\n<li>Dipendenza dai modelli su 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 che si installa tramite NuGet e aiuta a applicare modifiche su SQL Server. Monitora quali script di modifica sono gi\u00e0 stati eseguiti e avvia quelli necessari per aggiornare il database. La libreria \u00e8 nata da un progetto di motore di blogging open source su ASP.NET e esiste sotto licenza MIT, con il codice disponibile su GitHub. Le migrazioni sono descritte utilizzando T-SQL.<\/p>\n<p>Quali sono 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 possono essere risolti anche con SQL<\/li>\n<\/ul>\n<p>\nE i problemi:<\/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 aspiriamo <\/li>\n<li>La documentazione e la comunit\u00e0 sono piuttosto scarse, anche se per scrivere 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 con licenza Apache 2.0, come il precedente, funziona sul motore delle migrazioni 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>Vantaggi:<\/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 ci interessa) non \u00e8 supportato su .NET Core, solo su .NET Full Framework<\/li>\n<li>Non funziona con ORM<\/li>\n<li>Ci sono ancora meno documentazione rispetto allo strumento precedente<\/li>\n<li>Ancora una volta, le migrazioni sono 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 di database per la piattaforma .NET Core, distribuito con licenza MIT. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/414867\/\">L'autore ha scritto dell'ultima versione circa un anno fa<\/a><\/noindex>. <\/p>\n<p>Vantaggi:<\/p>\n<ul>\n<li>Ottimizzato per .NET Core<\/li>\n<li>\u00c8 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>Oracle non \u00e8 supportato (nell'articolo si sottolinea che ci\u00f2 \u00e8 dovuto alla mancanza di un'implementazione stabile per .NET Core - ma questo risale a un anno fa)<\/li>\n<li>Mancanza di generazione automatica delle migrazioni<\/li>\n<\/ul>\n<p>\nIn generale, il progetto sembra promettente, soprattutto se fosse stato sviluppato, ma dovevamo prendere decisioni 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>Il pi\u00f9 popolare strumento di migrazione, con un vasto seguito di fan. \u00c8 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 database 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>Una grande comunit\u00e0 attiva<\/li>\n<li>I conflitti di migrazione vengono risolti in modo sequenziale - per le migrazioni viene specificato l'ordine di esecuzione. Inoltre, se si verifica un conflitto su un'entit\u00e0, durante il merging del codice, la sua risoluzione avviene come nel resto del codice<\/li>\n<li>Ci sono profili che vengono eseguiti dopo una migrazione riuscita e possono includere funzioni di servizio. L'ultimo aggiornamento risale a un mese fa, il che significa che il progetto \u00e8 attivo.<\/li>\n<\/ul>\n<p>\nQuanto ai lati negativi, qui ci sono:<\/p>\n<ul>\n<li>Mancanza di generazione automatica delle migrazioni<\/li>\n<li>Mancanza di connessione con i modelli EF<\/li>\n<li>Nessun backup del database<\/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 \/>\nLe discussioni pi\u00f9 accese si sono concentrate su due parametri: l'autogenerazione delle migrazioni e una soluzione ragionevole ai conflitti. Altri fattori preoccupavano molto meno. Alla fine, dopo una discussione, il team ha deciso di utilizzare Fluent Migrator per il nuovo progetto. Perch\u00e9 la risoluzione dei conflitti porter\u00e0 nel lungo periodo un numero maggiore di benefici.<\/p>\n<h4>Conclusioni<\/h4>\n<p>\nNaturalmente, non esistono strumenti perfetti. Abbiamo dovuto stabilire delle priorit\u00e0 nelle nostre \"preferenze\". Tuttavia, per altri team e altri compiti, potrebbero esserci fattori decisivi diversi. Speriamo che questo articolo possa aiutarvi a fare una 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.0.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.0.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\udd47 Confronto 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}]}}