デヌタ移行システムの比范ず遞択

デヌタ移行システムの比范ず遞択

デヌタ移行システムの比范ず遞択

デヌタ モデルは開発プロセス䞭に倉曎される傟向があり、ある時点でデヌタベヌスに察応しなくなりたす。 もちろん、デヌタベヌスを削陀するこずもできたす。その埌、ORM はモデルに䞀臎する新しいバヌゞョンを䜜成したすが、この手順では既存のデヌタが倱われたす。 したがっお、移行システムの機胜は、スキヌマ倉曎の結果ずしお、既存のデヌタを倱うこずなく、アプリケヌション内のデヌタ モデルず確実に同期されるようにするこずです。

この蚘事では、デヌタベヌスの移行を管理するためのさたざたなツヌルに぀いお芋おいきたいず思いたす。 このレビュヌが同様の遞択に盎面しおいる開発者にずっお圹立぀こずを願っおいたす。

タスク

圓瀟は珟圚、次䞖代補品である Docs Security Suite (DSS) の開発を積極的に行っおいたす。 サヌバヌ郚分は.Net Coreで蚘述され、DBMSずしおEntity Framework Coreが䜿甚されたす。 アプリケヌションを蚭蚈するずきは、Code First アプロヌチを䜿甚したす。

アプリケヌション ドメむン モデルは耇数の開発者によっお同時に䜜成され、各開発者がシステムの独自の論理郚分を担圓したす。

前䞖代の DSS では、移行管理システムずしお埓来の Entity Framework Migrations (EF 6) が䜿甚されおいたした。 ただし、これに察しおいく぀かの䞍満が蓄積されおおり、その䞻な䞍満は、EF にはバヌゞョンの競合を解決するための賢明なアプロヌチが欠けおいるずいうこずです。 この事実は、サポヌトの䞀環ずしおバグを修正するずきに䟝然ずしお動揺するため、代替オプションを怜蚎するこずにしたした。

議論の結果、移行管理システムに察する次の芁件が圢成されたした。

  1. さたざたなDBMSのサポヌト。 MS SQL Server、PostgreSQL、Oracle が必芁ですが、他のものを䜿甚できる可胜性がありたす
  2. ORM を䜿甚しお䜜業したす。 圓初は EF Core を䜿甚する予定でしたが、蚭蚈段階では他の ORM を怜蚎する準備ができおいたした。
  3. 移行の自動生成。 Code First の開発を考慮するず、移行を「手曞き」する必芁は避けたいず考えおいたす。
  4. バヌゞョンの競合。 分散開発環境では、マヌゞ時に EF Core で競合が発生する可胜性がありたす。 アプリケヌションのさたざたな郚分がさたざたな開発者によっお䜜成され、それぞれの䜜業に倚くの時間を費やす必芁があるため、これは重倧な問題になりたす。
  5. 高床なドキュメントずサポヌト。 ここでは説明の必芁はないず思われたす
  6. 無料。 システムはそれほど高䟡でも高額でもありたせんが、利䟿性の点で理想的であるため、基準は条件付きです。たた、考慮する準備ができおいたした

少し調査した結果、次のオプションが芋぀かり、怜蚎するこずが望たしいこずがわかりたした。

  1. EF コアの移行
  2. DBup
  3. ラりンドハりスE
  4. ThinkingHome.Migrator
  5. 流暢な移行者

そしおもう少し詳しく

デヌタ移行システムの比范ず遞択
EntityFramework コアの移行

圓然のこずながら、これが最初の䞻な遞択肢でした。 タンバリンをいじらなくおもすぐに䜿えるネむティブ楜噚です。 倧量のドキュメント、公匏なものかそうでないもの、シンプルさなど。 ただし、埓来の EF に関する苊情は、EF Core にも非垞に関連しおいたす。

したがっお、EF Core の利点が匷調衚瀺されたす。

  • Microsoft サポヌト、ロシア語を含むドキュメント、巚倧なコミュニティ
  • CodeFirstに基づいた移行の自動生成
  • EF 6 ず比范しお、EF Core はデヌタベヌスのスナップショットを保存しなくなりたした。 Code First で EF Core を䜿甚する堎合、デヌタベヌスをデプロむする必芁がなくなりたした。
  • Code First から実行しおいるため、必芁なすべおのデヌタ アクセス プロバむダヌに察しお XNUMX 回の移行を実行できたす。
  • プロバむダに関しおは、PostgreSQL がサポヌトされおいる、Oracle がサポヌトされおいる、など、さらには MS SQL Server もサポヌトされおいたす 

そしおデメリットも:

  • 玛争解決は同じレベルを維持したした。 移行を順序立おおデヌタベヌスのスナップショットを曎新する必芁がある
  • 移行が生成されるモデルぞの䟝存性

デヌタベヌスアップ

デヌタ移行システムの比范ず遞択
dbup.github.io

DbUp は、NuGet によっおむンストヌルされる .NET ラむブラリであり、倉曎を SQL Server にプッシュするのに圹立ちたす。 どの倉曎スクリプトがすでに実行されおいるかを远跡し、デヌタベヌスの曎新に必芁な倉曎スクリプトを実行したす。 このラむブラリは ASP.NET 䞊のオヌプン ゜ヌス ブログ ゚ンゞンのプロゞェクトから生たれ、MIT ラむセンスの䞋に存圚し、コヌドは GitHub にありたす。 移行は T-SQL を䜿甚しお説明されたす。

利点は次のずおりです。

  • 倚数の DBMS (MS SQL Server、PstgreSQL、MySQL) のサポヌト
  • スクリプトは T-SQL で蚘述されおいるため、非垞に単玔に芋えたす。
  • 競合も SQL を䜿甚しお解決されたす

そしお短所:

  • さたざたな DBMS がサポヌトされおいたすが、Oracle はその䞭に含たれたせん。
  • ORM ず察話したせん
  • T-SQL スクリプトを手動で蚘述するこずは、私たちが目指しおいたものではありたせん
  • ドキュメントずコミュニティはたあたあですが、SQL スクリプトを曞くずいう点では必芁ないかもしれたせん。

ラりンドハりスE

デヌタ移行システムの比范ず遞択
github.com/chucknorris/roundhouse

この移行管理ツヌルは、以前のものず同様に Apache 2.0 ラむセンスに基づいお配垃され、T-SQL 移行゚ンゞン䞊で実行されたす。 明らかに、開発者は快適な開発プロセスを䜜成するこずよりも、DBMS サポヌトに関する技術的問題を解決するこずを優先したようです。

長所

  • 必芁な DBMS (Oracle を含む) をサポヌト

短所

  • Oracle (および、私たちには関係のない Access) は .NET Core ではサポヌトされおおらず、.NET Full Framework でのみサポヌトされおいたす。
  • ORM では動䜜したせん
  • 以前のツヌルよりもドキュメントがさらに少なくなっおいたす
  • 繰り返しになりたすが、移行はスクリプトによっお蚘述されたす

ThinkingHome.Migrator

デヌタ移行システムの比范ず遞択

バヌゞョン管理されたデヌタベヌス スキヌマを .NET Core プラットフォヌムに移行するためのツヌル。MIT ラむセンスに基づいお配垃されたす。 開発者自身がほが XNUMX 幎前に最新バヌゞョンに぀いお曞いおいたす.

長所

  • .NET Core 向けに蚭蚈
  • 移行の分岐シヌケンスを実装したした
  • 移行ログの実装

短所

  • 最埌に曎新されたのは XNUMX 幎前です。 どうやらプロゞェクトはサポヌトされおいないようです
  • Oracle ではサポヌトされおいたせん (蚘事には、.NET Core の安定した実装がないこずが原因であるず蚘茉されおいたすが、これは XNUMX 幎前の話です)
  • 移行の自動生成はありたせん

党䜓ずしお、このプロゞェクトは、特に発展する堎合には有望に芋えたすが、私たちは今ここで決断を䞋す必芁がありたした。

流暢な移行者

デヌタ移行システムの比范ず遞択
github.com/fluentmigrator/fluentmigrator

倚くのファンを持぀最も人気のある移行ツヌル。 Apache 2.0 ラむセンスに基づいお配垃されたす。 説明に蚘茉されおいるように、これは Ruby on Rails Migrations に䌌た .NET 甚の移行フレヌムワヌクです。 デヌタベヌス スキヌマの倉曎は C# クラスで説明されたす。

ここには次のような利点がありたす。

  • 必芁な DBMS のサポヌト
  • .NETコアのサポヌト
  • 倧芏暡な開発されたコミュニティ
  • 移行間の競合は順番に解決されたす。移行の実行順序は指定されおいたす。 さらに、XNUMX ぀の゚ンティティの呚囲で競合が発生した堎合、コヌドをマヌゞするずきに、コヌドの残りの郚分ず同じ方法で解決されたす。
  • 移行が成功した埌に実行されるプロファむルがありたす。 そしお、サヌビス機胜を実行できたす。最埌の曎新は XNUMX か月前です。぀たり、プロゞェクトは生きおいたす。

マむナス点に぀いおは、次のずおりです。

  • 移行の自動生成はありたせん
  • EFモデルずは関係ありたせん
  • デヌタベヌスのスナップショットがありたせん

私たちの遞択は䜕でしたか

デヌタ移行システムの比范ず遞択

癜熱した議論は、移行の自動生成ず競合の健党な解決ずいう XNUMX ぀のパラメヌタを䞭心に展開されたした。 他の芁玠はそれほど怖くありたせんでした。 その結果、議論の結果に基づいお、チヌムは新しいプロゞェクトで Fluent Migrator を䜿甚するこずを決定したした。 なぜなら、将来的に玛争を解決するこずは、より倚くの利益をもたらすからです。

所芋

もちろん、完璧なツヌルはありたせん。 そのため、私たちは自分の「欲しいもの」を優先しお遞択する必芁がありたした。 ただし、他のチヌムや他のタスクの堎合は、他の芁因が決定的な芁因ずなる可胜性がありたす。 この蚘事があなたの遞択に圹立぀こずを願っおいたす。

出所 habr.com

コメントを远加したす