{"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\/sv\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh","title":{"rendered":"J\u00e4mf\u00f6relse och val av datamigreringssystem","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h2>J\u00e4mf\u00f6relse och val av datamigreringssystem<\/h2>\n<p>\n<img decoding=\"async\" alt=\"J\u00e4mf\u00f6relse och val av datamigreringssystem\" src=\"\/wp-content\/uploads\/2019\/05\/a25cc01b8d86b233a6d21caddb169fec.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDatamodellen i utvecklingsprocessen har egenskapen att f\u00f6r\u00e4ndras, och vid en viss tidpunkt slutar den att motsvara databasen. Naturligtvis kan databasen tas bort, och d\u00e5 kommer ORM att skapa en ny version som st\u00e4mmer \u00f6verens med modellen, men en s\u00e5dan procedur skulle leda till f\u00f6rlust av befintliga data. D\u00e4rf\u00f6r handlar migrationssystemets funktion om att, n\u00e4r schemat \u00e4ndras, synkronisera det med datamodellen i applikationen utan att f\u00f6rlora befintliga data.<\/p>\n<p>I denna artikel vill vi diskutera olika verktyg f\u00f6r att hantera databas-migrationer. Vi hoppas att denna \u00f6versikt kommer att vara anv\u00e4ndbar f\u00f6r utvecklare som st\u00e5r inf\u00f6r ett s\u00e5dant val.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Uppgift<\/h3>\n<p>\nI v\u00e5rt f\u00f6retag p\u00e5g\u00e5r just nu en aktiv utveckling av n\u00e4sta generations produkt \u2013 Docs Security Suite (DSS). Serverdelen skrivs i .Net Core, och som databas anv\u00e4nds d\u00e4rmed Entity Framework Core. N\u00e4r vi designar applikationen till\u00e4mpar vi ett Code First- tillv\u00e4gag\u00e5ngss\u00e4tt.<\/p>\n<p>Dom\u00e4nmodellen f\u00f6r applikationen skapas av flera utvecklare samtidigt \u2013 varje utvecklare ansvarar f\u00f6r sin logiska del av systemet. <\/p>\n<p>I f\u00f6reg\u00e5ende generation av DSS anv\u00e4ndes klassiska Entity Framework Migrations (EF 6) som migrationshanteringssystem. Det har dock uppst\u00e5tt vissa klagom\u00e5l p\u00e5 det, den fr\u00e4msta \u00e4r att EF saknar en rimlig metod f\u00f6r att hantera versionkonflikter. Denna punkt oroar oss fortfarande under buggfixering inom supporten, d\u00e4rav beslutet att \u00f6verv\u00e4ga alternativa alternativ.<\/p>\n<p>Som resultat av diskussionen har f\u00f6ljande krav formulerats f\u00f6r migrationshanteringssystemet:<\/p>\n<ol>\n<li>St\u00f6d f\u00f6r olika databashanterare. Obligatoriskt MS SQL Server, PostgreSQL, Oracle, men potentiellt kan \u00e4ven andra anv\u00e4ndas.<\/li>\n<li>Arbeta med ORM. Initialt var det t\u00e4nkt att anv\u00e4nda EF Core, men under designfasen var vi \u00f6ppna f\u00f6r att \u00f6verv\u00e4ga andra ORM.<\/li>\n<li>Autogenerering av migrationer. Med tanke p\u00e5 Code First-utveckling \u00f6nskar vi undvika att \"skriva manuellt\" migrationer.<\/li>\n<li>Versionskonflikter. Under distribuerad utveckling kan EF Core krascha p\u00e5 grund av konflikter vid sammanslagning. Detta blir ett betydande problem, eftersom olika delar av applikationen skapas av olika utvecklare, vilket g\u00f6r att mycket tid g\u00e5r f\u00f6rlorad p\u00e5 varje.<\/li>\n<li>Utvecklad dokumentation och support. H\u00e4r tror vi att f\u00f6rklaringar inte beh\u00f6vs.<\/li>\n<li>Kostnadsfrihet. Kriteriet \u00e4r villkorligt, eftersom vi ocks\u00e5 var beredda att \u00f6verv\u00e4ga antingen inte s\u00e5 dyra system eller dyra men perfekta i anv\u00e4ndarv\u00e4nlighet.<\/li>\n<\/ol>\n<p>\nSom ett resultat av en liten unders\u00f6kning har f\u00f6ljande alternativ identifierats och erk\u00e4nns som \u00f6nskv\u00e4rda f\u00f6r \u00f6verv\u00e4gande:<\/p>\n<ol>\n<li>EF Core Migrationer<\/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>Och nu lite mer i detalj<\/h3>\n<p>\n<img decoding=\"async\" alt=\"J\u00e4mf\u00f6relse och val av datamigreringssystem\" 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\/\">EntityFramework Core Migrationer<\/a><\/noindex><\/b><\/p>\n<p>Naturligtvis var detta det f\u00f6rsta och fr\u00e4msta valet. Inbyggt verktyg som fungerar ur l\u00e5dan utan n\u00e5gra konstiga knep. En stor m\u00e4ngd dokumentation, b\u00e5de officiell och inofficiell, enkelhet osv. Men de klagom\u00e5l som riktades mot klassisk EF \u00e4r fullt aktuella \u00e4ven f\u00f6r EF Core. <\/p>\n<p>D\u00e4rf\u00f6r finns f\u00f6ljande f\u00f6rdelar med EF Core:<\/p>\n<ul>\n<li>Microsoft st\u00f6d, dokumentation, \u00e4ven p\u00e5 svenska, ett enormt community.<\/li>\n<li>Automatgenerering av migrationer baserat p\u00e5 CodeFirst.<\/li>\n<li>Till skillnad fr\u00e5n EF 6 lagras det inte l\u00e4ngre en databasavbild i EF Core. N\u00e4r man arbetar med EF Core \u00e4r det nu inte n\u00f6dv\u00e4ndigt att implementera databasen i Code First.<\/li>\n<li>Eftersom vi utg\u00e5r fr\u00e5n Code First finns m\u00f6jligheten att hantera en migration f\u00f6r alla n\u00f6dv\u00e4ndiga datatillg\u00e5ngsleverant\u00f6rer.<\/li>\n<li>N\u00e4r det g\u00e4ller leverant\u00f6rer st\u00f6ds s\u00e5v\u00e4l PostgreSQL och Oracle som MS SQL Server ;)<\/li>\n<\/ul>\n<p>\n Och h\u00e4r \u00e4r nackdelarna:<\/p>\n<ul>\n<li>Konfliktl\u00f6sningen \u00e5terst\u00e5r p\u00e5 samma niv\u00e5. Det \u00e4r n\u00f6dv\u00e4ndigt att bygga en sekvens av migrationer och uppdatera databasavbilder.<\/li>\n<li>Beroende av modellerna p\u00e5 vilka migrationerna \u00e4r baserade.<\/li>\n<\/ul>\n<p>\n<b>DbUp<\/b><\/p>\n<p><img decoding=\"async\" alt=\"J\u00e4mf\u00f6relse och val av datamigreringssystem\" 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 \u00e4r ett .NET-bibliotek som installeras via NuGet och hj\u00e4lper till att till\u00e4mpa \u00e4ndringar p\u00e5 SQL Server. Det sp\u00e5rar vilka \u00e4ndringsskript som redan har k\u00f6rts och k\u00f6r de som beh\u00f6vs f\u00f6r att uppdatera databasen. Biblioteket v\u00e4xte fram ur ett open source-bloggmotorprojekt p\u00e5 ASP.NET och finns under MIT-licensen, och koden ligger p\u00e5 GitHub. Migrationer beskrivs med hj\u00e4lp av T-SQL.<\/p>\n<p>Vilka \u00e4r f\u00f6rdelarna h\u00e4r:<\/p>\n<ul>\n<li>St\u00f6d f\u00f6r ett stort antal databashanteringssystem (MS SQL Server, PostgreSQL, MySQL).<\/li>\n<li>Eftersom skripten skrivs p\u00e5 T-SQL \u00e4r de ganska tydliga.<\/li>\n<li>Konflikter l\u00f6ses ocks\u00e5 med SQL.<\/li>\n<\/ul>\n<p>\nOch nackdelarna:<\/p>\n<ul>\n<li>Trots det stora utbudet av st\u00f6dda databashanteringssystem ing\u00e5r inte Oracle.<\/li>\n<li>Det fungerar inte med ORM.<\/li>\n<li>Att skriva skript i T-SQL \"f\u00f6r hand\" \u00e4r inte vad vi str\u00e4var efter. <\/li>\n<li>Dokumentationen och communityn \u00e4r s\u00e5 d\u00e4r, \u00e4ven om de kanske inte beh\u00f6vs n\u00e4r man skriver SQL-skript.<\/li>\n<\/ul>\n<p>\n<b>RoundhousE<\/b><\/p>\n<p><img decoding=\"async\" alt=\"J\u00e4mf\u00f6relse och val av datamigreringssystem\" 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>Detta migrationshanteringsverktyg, som distribueras under Apache 2.0-licensen, fungerar, precis som den f\u00f6reg\u00e5ende, med T-SQL migrationsmotorn. Utvecklarna tycks ha prioriterat l\u00f6sningar p\u00e5 tekniska problem som r\u00f6r DB-st\u00f6d framf\u00f6r att skapa en smidig utvecklingsprocess.<\/p>\n<p>F\u00f6rdelar:<\/p>\n<ul>\n<li>St\u00f6der n\u00f6dv\u00e4ndiga databaser (inklusive Oracle)<\/li>\n<\/ul>\n<p>\nNackdelar:<\/p>\n<ul>\n<li>Oracle (och den f\u00f6r oss irrelevanta Access) st\u00f6ds inte p\u00e5 .NET Core, endast p\u00e5 .NET Full Framework.<\/li>\n<li>Fungerar inte med ORM<\/li>\n<li>Det finns \u00e4nnu mindre dokumentation \u00e4n f\u00f6r det f\u00f6reg\u00e5ende verktyget.<\/li>\n<li>\u00c5terigen - migrationer skrivs i skript.<\/li>\n<\/ul>\n<p>\n<b>ThinkingHome.Migrator<\/b><\/p>\n<p><img decoding=\"async\" alt=\"J\u00e4mf\u00f6relse och val av datamigreringssystem\" src=\"\/wp-content\/uploads\/2019\/05\/c530e23f8c9c27ed1d53f3dce710eb70.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVerktyg f\u00f6r versionsmigration av databasens schema f\u00f6r .NET Core-plattformen, distribueras under MIT-licensen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/414867\/\">Sj\u00e4lv utvecklaren skrev om den senaste versionen n\u00e4stan f\u00f6r ett \u00e5r sedan.<\/a><\/noindex>. <\/p>\n<p>F\u00f6rdelar:<\/p>\n<ul>\n<li>Fokuserat p\u00e5 .NET Core<\/li>\n<li>En f\u00f6rgrenad sekvens av migrationer har implementerats.<\/li>\n<li>Migrationer loggas.<\/li>\n<\/ul>\n<p>\nNackdelar:<\/p>\n<ul>\n<li>Senaste uppdateringen var f\u00f6r ett \u00e5r sedan. Projektet verkar inte st\u00f6djas.<\/li>\n<li>St\u00f6der inte Oracle (artikeln n\u00e4mner att detta beror p\u00e5 bristen p\u00e5 en stabil implementation av .NET Core - men det var f\u00f6r ett \u00e5r sedan).<\/li>\n<li>Autogenerering av migrationer saknas.<\/li>\n<\/ul>\n<p>\nI stort sett verkar projektet lovande, s\u00e4rskilt om det skulle utvecklas, men vi beh\u00f6vde fatta beslut h\u00e4r och nu.<\/p>\n<p><b>Fluent Migrator<\/b><\/p>\n<p><img decoding=\"async\" alt=\"J\u00e4mf\u00f6relse och val av datamigreringssystem\" 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>Det mest popul\u00e4ra migrationsverktyget med en stor arm\u00e9 av anh\u00e4ngare. Distribueras under Apache 2.0-licensen. Enligt beskrivningen \u00e4r det en migrationsplattform f\u00f6r .NET, liknande Ruby on Rails Migrations. \u00c4ndringar i databasens schema beskrivs i klasser p\u00e5 C#.<\/p>\n<p>Det finns f\u00f6rdelar h\u00e4r:<\/p>\n<ul>\n<li>St\u00f6d f\u00f6r n\u00f6dv\u00e4ndiga databaser<\/li>\n<li>St\u00f6d f\u00f6r .NET Core<\/li>\n<li>Ett stort och v\u00e4letablerat community<\/li>\n<li>Konflikter i migrationer l\u00f6ses sekventiellt - i migrationerna anges en utf\u00f6randeordning. Dessutom, om det uppst\u00e5r en konflikt kring en entitet, hanteras l\u00f6sningen vid sammanslagning av koden p\u00e5 samma s\u00e4tt som i \u00f6vrig kod.<\/li>\n<li>Det finns profiler som k\u00f6rs efter att migrationen har genomf\u00f6rts framg\u00e5ngsrikt och kan inneh\u00e5lla servicefunktioner. Senaste uppdateringen var f\u00f6r en m\u00e5nad sedan, vilket inneb\u00e4r att projektet \u00e4r aktivt.<\/li>\n<\/ul>\n<p>\nVad g\u00e4ller nackdelar finns det:<\/p>\n<ul>\n<li>Autogenerering av migrationer saknas.<\/li>\n<li>Saknar koppling till EF-modeller<\/li>\n<li>Inga databasbilder<\/li>\n<\/ul>\n<p><\/p>\n<h3>Vad blev v\u00e5rt val?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"J\u00e4mf\u00f6relse och val av datamigreringssystem\" src=\"\/wp-content\/uploads\/2019\/05\/db6953bf80bbbf9f560e39b32c32752c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe het mest intensiva diskussionerna har handlat om tv\u00e5 parametrar \u2013 automatisk migration och hantering av konflikter. \u00d6vriga faktorer oroade betydligt mindre. Efter diskussionen beslutade teamet att anv\u00e4nda Fluent Migrator i det nya projektet. Att hantera konflikter kommer att ge m\u00e5nga fler f\u00f6rdelar p\u00e5 l\u00e5ng sikt.<\/p>\n<h4>Slutsatser<\/h4>\n<p>\nSj\u00e4lvklart finns det inga perfekta verktyg. Vi tvingades ocks\u00e5 prioritera v\u00e5ra \u00f6nskem\u00e5l. Men f\u00f6r andra team och andra uppgifter kan andra faktorer vara avg\u00f6rande. Vi hoppas att denna artikel hj\u00e4lper dig att g\u00f6ra ditt val.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47J\u00e4mf\u00f6relse och val av datamigreringssystem | ProHoster","description":"J\u00e4mf\u00f6relse och val av datamigreringssystem.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/34734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=34734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/34734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/26172"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=34734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=34734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=34734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}