{"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\/de\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh","title":{"rendered":"Vergleich und Auswahl von Datenmigration-Systemen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h2>Vergleich und Auswahl von Datenmigration-Systemen<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Vergleich und Auswahl von Datenmigration-Systemen\" src=\"\/wp-content\/uploads\/2019\/05\/a25cc01b8d86b233a6d21caddb169fec.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDas Datenmodell im Entwicklungsprozess \u00e4ndert sich und stimmt irgendwann nicht mehr mit der Datenbank \u00fcberein. Nat\u00fcrlich kann die Datenbank gel\u00f6scht werden, woraufhin das ORM eine neue Version erstellt, die mit dem Modell \u00fcbereinstimmt, aber dieses Verfahren f\u00fchrt zum Verlust von vorhandenen Daten. Daher besteht die Funktion des Migrationssystems darin, das Schema nach \u00c4nderungen mit dem Datenmodell der Anwendung zu synchronisieren, ohne bestehende Daten zu verlieren.<\/p>\n<p>In diesem Artikel m\u00f6chten wir verschiedene Tools zur Verwaltung von Datenbankmigrationen betrachten. Wir hoffen, dieser \u00dcberblick wird Entwicklern hilfreich sein, die vor einer \u00e4hnlichen Entscheidung stehen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Ziel<\/h3>\n<p>\nIn unserem Unternehmen wird derzeit aktiv an der n\u00e4chsten Generation des Produkts \u2013 der Docs Security Suite (DSS) \u2013 gearbeitet. Der Serverteil wird mit .Net Core entwickelt, und als DBMS verwenden wir entsprechend Entity Framework Core. Bei der Anwendungsplanung nutzen wir den Ansatz Code First.<\/p>\n<p>Das Dom\u00e4nenmodell der Anwendung wird von mehreren Entwicklern gleichzeitig erstellt \u2013 jeder ist f\u00fcr seinen logischen Teil des Systems verantwortlich. <\/p>\n<p>Im vorherigen DSS-Generation wurde das klassische Entity Framework Migrations (EF 6) als Migrationsmanagementsystem verwendet. Allerdings gab es einige Bedenken, insbesondere, dass EF keinen brauchbaren Ansatz zur Konfliktl\u00f6sung bei Versionen bietet. Diese Tatsache bereitet uns bis heute Probleme beim Bugfixing im Rahmen des Supports, weshalb beschlossen wurde, alternative Optionen zu pr\u00fcfen.<\/p>\n<p>Im Ergebnis der Diskussionen wurden folgende Anforderungen an das Migrationsmanagementsystem formuliert:<\/p>\n<ol>\n<li>Unterst\u00fctzung verschiedener DBMS. MS SQL Server, PostgreSQL, Oracle sind erforderlich, aber potenziell ist auch die Nutzung anderer Systeme m\u00f6glich.<\/li>\n<li>Kompatibilit\u00e4t mit ORM. Urspr\u00fcnglich war die Verwendung von EF Core vorgesehen, jedoch waren wir in der Planungsphase bereit, auch andere ORMs in Betracht zu ziehen.<\/li>\n<li>Automatische Generierung von Migrationen. Angesichts der Entwicklung mit Code First m\u00f6chten wir die Notwendigkeit vermeiden, Migrationen manuell zu erstellen.<\/li>\n<li>Versionskonflikte. In einer verteilten Entwicklungsumgebung kann es beim Mergen von EF Core zu Konflikten kommen. Dies stellt ein erhebliches Problem dar, da verschiedene Teile der Anwendung von unterschiedlichen Entwicklern erstellt werden, was bedeutet, dass viel Zeit f\u00fcr jeden Konflikt aufgewendet werden muss.<\/li>\n<li>Umfassende Dokumentation und Unterst\u00fctzung. Hierbei ben\u00f6tigen wir, unserer Meinung nach, keine weiteren Erkl\u00e4rungen.<\/li>\n<li>Kostenlosigkeit. Dieses Kriterium ist relativ, da wir auch bereit sind, verschiedene Systeme in Betracht zu ziehen, die entweder nicht sehr teuer oder teuer, aber in der Bedienung perfekt sind.<\/li>\n<\/ol>\n<p>\nNach einer kurzen Recherche wurden folgende Optionen als w\u00fcnschenswert f\u00fcr die Pr\u00fcfung identifiziert:<\/p>\n<ol>\n<li>EF Core Migrations<\/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>Und jetzt etwas mehr Details<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Vergleich und Auswahl von Datenmigration-Systemen\" 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 Migrations<\/a><\/noindex><\/b><\/p>\n<p>Nat\u00fcrlich war dies die erste und wesentliche Wahl. Ein natives Werkzeug, das sofort ohne viel Aufwand funktioniert. Eine F\u00fclle von Dokumentation, sowohl offizielle als auch inoffizielle, Einfachheit usw. Allerdings sind die bei klassischem EF ge\u00e4u\u00dferten Kritikpunkte auch f\u00fcr EF Core durchaus relevant. <\/p>\n<p>Daher ergeben sich f\u00fcr EF Core folgende Vorteile:<\/p>\n<ul>\n<li>Unterst\u00fctzung durch Microsoft, Dokumentation, einschlie\u00dflich auf Russisch, eine riesige Community.<\/li>\n<li>Automatische Migrationserstellung basierend auf CodeFirst<\/li>\n<li>Im Vergleich zu EF 6 wird in EF Core jetzt kein Datenbank-Snapshot gespeichert. Bei der Arbeit mit EF Core ist es nun nicht mehr notwendig, die Datenbank im Code First zu erstellen.<\/li>\n<li>Da wir von Code First ausgehen, besteht die M\u00f6glichkeit, eine Migration f\u00fcr alle ben\u00f6tigten Datenzugriffsprovider zu f\u00fchren.<\/li>\n<li>Bez\u00fcglich der Provider werden sowohl PostgreSQL als auch Oracle unterst\u00fctzt, und sogar \u2013 MS SQL Server \ud83d\ude0a<\/li>\n<\/ul>\n<p>\n Und hier sind die Nachteile:<\/p>\n<ul>\n<li>Die Konfliktl\u00f6sung bleibt auf dem gleichen Niveau. Es ist notwendig, die Reihenfolge der Migrationen festzulegen und die Datenbank-Snapshots zu aktualisieren.<\/li>\n<li>Abh\u00e4ngigkeit von den Modellen, auf dessen Grundlage die Migrationen erstellt wurden.<\/li>\n<\/ul>\n<p>\n<b>DbUp<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Vergleich und Auswahl von Datenmigration-Systemen\" 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 ist eine .NET-Bibliothek, die \u00fcber NuGet installiert wird und hilft, \u00c4nderungen auf SQL Server anzuwenden. Sie verfolgt, welche \u00c4nderungs-Skripte bereits ausgef\u00fchrt wurden, und f\u00fchrt die notwendigen aus, um die Datenbank zu aktualisieren. Die Bibliothek entstand aus einem Open-Source-Projekt f\u00fcr einen Blog-Engine auf ASP.NET und existiert unter der MIT-Lizenz, der Code befindet sich auf GitHub. Migrationen werden mit T-SQL beschrieben.<\/p>\n<p>Welche Vorteile gibt es:<\/p>\n<ul>\n<li>Unterst\u00fctzung einer Vielzahl von DBMS (MS SQL Server, PostgreSQL, MySQL)<\/li>\n<li>Da die Skripte in T-SQL geschrieben werden, sind sie recht einfach.<\/li>\n<li>Konflikte werden ebenfalls mit SQL gel\u00f6st<\/li>\n<\/ul>\n<p>\nDie Nachteile sind:<\/p>\n<ul>\n<li>Trotz der Vielzahl unterst\u00fctzter DBMS geh\u00f6rt Oracle nicht dazu<\/li>\n<li>Interagiert nicht mit ORM<\/li>\n<li>Das Schreiben von Skripten in T-SQL von Hand ist nicht das, was wir uns erhofft hatten <\/li>\n<li>Die Dokumentation und die Community sind eher durchschnittlich. In der SQL-Skript-Erstellung k\u00f6nnten sie jedoch m\u00f6glicherweise weniger wichtig sein.<\/li>\n<\/ul>\n<p>\n<b>RoundhousE<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Vergleich und Auswahl von Datenmigration-Systemen\" 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>Dieses Migrationsmanagement-Tool, das unter der Apache 2.0-Lizenz ver\u00f6ffentlicht wird, funktioniert wie das vorherige auf der T-SQL-Migrations-Engine. Anscheinend legten die Entwickler den Fokus darauf, technische Probleme hinsichtlich der DBMS-Unterst\u00fctzung zu l\u00f6sen, anstatt einen komfortablen Entwicklungsprozess zu schaffen.<\/p>\n<p>Vorteile:<\/p>\n<ul>\n<li>Unterst\u00fctzt erforderliche DBMS (einschlie\u00dflich Oracle)<\/li>\n<\/ul>\n<p>\nNachteile:<\/p>\n<ul>\n<li>Oracle (und auch das f\u00fcr uns irrelevante Access) wird nicht von .NET Core unterst\u00fctzt, nur vom .NET Full Framework<\/li>\n<li>Funktioniert nicht mit ORM<\/li>\n<li>Die Dokumentation ist sogar noch sp\u00e4rlicher als bei dem vorherigen Tool<\/li>\n<li>Wieder einmal \u2013 Migrationen werden durch Skripte geschrieben<\/li>\n<\/ul>\n<p>\n<b>ThinkingHome.Migrator<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Vergleich und Auswahl von Datenmigration-Systemen\" src=\"\/wp-content\/uploads\/2019\/05\/c530e23f8c9c27ed1d53f3dce710eb70.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEin Tool zur versionierten Migration von Datenbankschemata f\u00fcr die .NET Core-Plattform, das unter der MIT-Lizenz ver\u00f6ffentlicht wird. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/414867\/\">Der Entwickler hat vor fast einem Jahr \u00fcber die letzte Version geschrieben<\/a><\/noindex>. <\/p>\n<p>Vorteile:<\/p>\n<ul>\n<li>F\u00fcr .NET Core optimiert<\/li>\n<li>Ein verzweigter Migrationsverlauf wurde implementiert<\/li>\n<li>Migration Logging Implementiert<\/li>\n<\/ul>\n<p>\nNachteile:<\/p>\n<ul>\n<li>Letzte Aktualisierung vor einem Jahr. Anscheinend wird das Projekt nicht mehr unterst\u00fctzt.<\/li>\n<li>Oracle wird nicht unterst\u00fctzt (im Artikel steht, dass dies an der fehlenden stabilen Umsetzung f\u00fcr .NET Core liegt \u2013 was vor einem Jahr war).<\/li>\n<li>Automatische Migrationserstellung fehlt.<\/li>\n<\/ul>\n<p>\nInsgesamt sieht das Projekt vielversprechend aus, insbesondere wenn es weiterentwickelt w\u00fcrde, aber wir mussten hier und jetzt eine Entscheidung treffen.<\/p>\n<p><b>Fluent Migrator<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Vergleich und Auswahl von Datenmigration-Systemen\" 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>Das beliebteste Migrationstool mit einer gro\u00dfen Anh\u00e4ngerschaft. Es wird unter der Lizenz Apache 2.0 verbreitet. Wie in der Beschreibung angegeben, ist es eine Migrationsplattform f\u00fcr .NET, \u00e4hnlich den Ruby on Rails Migrations. Datenbankschemas werden in C#-Klassen beschrieben.<\/p>\n<p>Hier sind einige Vorteile:<\/p>\n<ul>\n<li>Unterst\u00fctzung der erforderlichen DBMS<\/li>\n<li>Unterst\u00fctzung von .NET Core<\/li>\n<li>Gro\u00dfe, aktive Community<\/li>\n<li>Migrationskonflikte werden sequenziell gel\u00f6st \u2013 Migrationen haben eine Ausf\u00fchrungsreihenfolge. Wenn ein Konflikt um eine Entit\u00e4t auftritt, wird dessen L\u00f6sung beim Merging des Codes ebenso behandelt wie im restlichen Code.<\/li>\n<li>Es gibt Profile, die nach erfolgreichem Abschluss der Migration ausgef\u00fchrt werden. Sie k\u00f6nnen Dienstleistungsfunktionen beinhalten. Das letzte Update fand vor einem Monat statt, was bedeutet, dass das Projekt aktiv ist.<\/li>\n<\/ul>\n<p>\nWas die Nachteile betrifft, so sind hier:<\/p>\n<ul>\n<li>Automatische Migrationserstellung fehlt.<\/li>\n<li>Fehlende Verbindung zu den EF-Modellen<\/li>\n<li>Keine Datenbankschnappsch\u00fcsse<\/li>\n<\/ul>\n<p><\/p>\n<h3>Wie war unsere Wahl?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Vergleich und Auswahl von Datenmigration-Systemen\" src=\"\/wp-content\/uploads\/2019\/05\/db6953bf80bbbf9f560e39b32c32752c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie hei\u00dfesten Debatten drehten sich um zwei Parameter \u2013 die automatische Generierung von Migrationen und sinnvolle L\u00f6sungen f\u00fcr Konflikte. Andere Faktoren waren weitaus weniger besorgniserregend. Letztendlich entschied das Team nach Diskussionen, im neuen Projekt Fluent Migrator zu verwenden. Denn die L\u00f6sung von Konflikten wird langfristig deutlich mehr Vorteile bringen.<\/p>\n<h4>Fazit<\/h4>\n<p>\nNat\u00fcrlich gibt es keine perfekten Werkzeuge. Auch wir mussten bei der Auswahl Priorit\u00e4ten setzen. F\u00fcr andere Teams und verschiedene Aufgaben k\u00f6nnen jedoch andere Faktoren entscheidend sein. Wir hoffen, dass dieser Artikel Ihnen bei Ihrer Entscheidung hilft.<br \/>\n<br \/>Quelle: <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 4.9.10 - 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 \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\" \/>\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\/de\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/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 Vergleich und Auswahl von Datentransfer-Systemen | ProHoster","description":"Vergleich und Auswahl von Datentransfer-Systemen Die Datenmodellierung im Entwicklungsprozess ist nicht statisch und kann sich im Laufe der Zeit \u00e4ndern, sodass sie irgendwann nicht mehr mit der Datenbank \u00fcbereinstimmt. Nat\u00fcrlich k\u00f6nnte man die Datenbank l\u00f6schen, woraufhin die ORM eine neue Version erstellt, die mit dem Modell \u00fcbereinstimmt, jedoch w\u00fcrde dies zum Verlust bestehender Daten f\u00fchren. Daher besteht die Funktion des Migrationssystems darin,","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/sravnenie-i-vybor-sistem-migratsii-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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 \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","og:url":"https:\/\/prohoster.info\/de\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/34734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=34734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/34734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/26172"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=34734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=34734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=34734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}