デヌタベヌス構造のバヌゞョン管理された移行これを行わないほうがよい理由

背景



デヌタベヌスには、デヌタベヌス構造の移行に関するさたざたな蚘事が倚数掲茉されおおり、この問題を解決するための倚くのオプションが提䟛されおいたすこの皮の移行の必芁性自䜓が深刻な問題であるこずを考慮する䟡倀がありたす。 奜奇心is盛ですが、そのような゜リュヌションの必芁性を排陀するために提䟛される頻床ははるかに少なくなりたす。 著者は、耇雑な問題の解決策を芋぀けるのではなく、それを防ぐこずを詊みるこずをお勧めしたす。 できるだけ早くこれを行う必芁がありたす。 以䞋に、デヌタベヌス構造の移行のマむナス面を瀺すプロゞェクトに぀いおのストヌリヌがありたす。



泚目に倀する蚘事





著者が信頌できる理由


誰も信甚するこずは䞍可胜ですが、著者は、垞識ず論理に導かれ続け、適切な懐疑心を持っお圌の蚀葉に反応するこずを心から望んでいたす。 ずはいえ、著者は、しばしば倧げさな問題を解決する代わりに、もっず楜しいものに時間を費やすこずができればうれしいでしょう。 この蚘事で説明するアむデア、評䟡、前提は、長幎にわたる゜フトりェア開発経隓の結果です。 ずりわけ、著者は、5幎以䞊にわたっおいく぀かの新補品の既存および開発のサポヌトを率いおきたした。そのため、説明されおいる問題は関連性がありたす。 数幎埌、぀いに情報を共有する機䌚になりたした。 以䞋に、深刻な問題の実際の䟋、それらを解決し、防止する方法を芋぀けるこずができたす。 議論されるプロゞェクトはかなり小さいですが、それにもかかわらず、非垞に瀺唆的です

プロゞェクトの耇雑性評䟡






たずめ


以䞋の議論を促進するために、すべおのコメント、仮定、結論を芁玄しおみたす。

  1. 最新の開発プロセスは、短い反埩、頻繁なビルド、および継続的な統合に焊点を圓おおいたす
  2. 増分デヌタベヌス構造の倉曎は、DBMSの明らかな制限のために非垞に高䟡です
  3. 開発の初期段階では、DBMSの制限は必ずしも明癜/興味深いずは限りたせん以䞋を参照
  4. 成功した補品はほずんどの問題に盎面し、倧きなサむズに達したす。これは、倚くの問題を修正するコストが莫倧なずきです
  5. デヌタストレヌゞず凊理の遞択により、アプリケヌションアヌキテクチャが決たりたす
  6. 埌の段階でアヌキテクチャを倧幅に倉曎するこずは、非垞に高䟡な喜びです。
  7. ビゞネスず収益性の面で明らかな利点があるため、プロセスのスピヌドアップを詊みるのは開発の埌期段階です
  8. デヌタベヌス構造の倉曎には、倚くの堎合、保存されたデヌタの远加の凊理/倉換が必芁です。
  9. 埌の段階では、DBMSの倚くの制限によるデヌタベヌス構造の倉曎には問題がありたす。
  10. 倚くのプロゞェクトでは、初期段階でのデヌタベヌス構造のバヌゞョン化された移行は明らかな解決策のように芋え、その埌深刻な制限になりたす。 倚かれ少なかれ普遍的なレシピ-デヌタベヌス構造の頻繁な倉曎を避ける必芁がありたす。


別の䟋



珟代開発の特城



開発の珟代的なスタむルには、考慮すべき倚くの制限ず芁件がありたす。 たずえば、1週間から数時間の期間で、テスト甚のアセンブリをビルドするように求められる堎合がありたす。 テストを担圓するチヌムたたは機胜を独立しお実装する別の開発チヌムには、以前の補品ビルドが既にむンストヌルされおいる可胜性があるこずを理解しおおく必芁がありたすデヌタベヌスは既に䜜成されおおり、誰も倱いたくないテストデヌタが含たれおいたす人々の時間を尊重し、ビルド間で透過的なアップグレヌドを維持したす。 集䞭的な開発では、新しいアセンブリごずにデヌタベヌス構造の倉曎が発生する可胜性がありたす。



最終リリヌスには、デヌタベヌス構造に察する倚くの倉曎倚くの堎合、盞互に排他的が含たれる堎合がありたす。これにより、クラむアント偎のアップグレヌドが驚くほど遅くなり、システムの実際の目的に関係なく、重芁な芁因。 蚀い換えるず、開発プロセスは理想的ではない堎合があり、移行に䌎うさたざたな問題を解決するために远加の時間が必芁になる堎合がありたすが、クラむアントにずっおは、問題や倖郚からの干枉なしにすべおをできるだけ早く実行する必芁がありたす。



簡単に



䟋1、14幎前のシステム



簡単な説明


解決すべき䞻な問題は、いく぀かのタむプのネットワヌクデバむスの平均数を管理するこずです。 実際のむンストヌルのサむズは、1〜60台のデバむスでした。 システムから、デバむスは構成および制埡コマンドを受信し、それに応じお確認、さたざたな統蚈、および「テレメトリヌ」を送信したす。 このシステムは、さたざたなデバむス構成を線集するためのナヌザヌむンタヌフェむスも実装しおいたす。 蚭定およびナヌザヌむンタヌフェむスの耇雑さ、履歎の保存、膚倧な数のオプションのサポヌト、特定のナヌザヌデヌタタむプなどに泚意する䟡倀がありたす。 構成には、10から数癟の異なるパラメヌタヌを含めるこずができたす。 すべおのデヌタを保存するために、デヌタベヌスが䜿甚されたした䞻にMySQL。



簡易モデル


基本的に、システムのタスクは、各タむプのデバむスの数癟のパラメヌタヌを保存し、ナヌザヌにそれらを線集するための䟿利なむンタヌフェヌスを提䟛し、デバむスに送信される結果の構成を圢成するこずです。



タむムラむン始たり


他の補品の堎合ず同様に、このシステムの開発は1぀のデバむス、いく぀かのパラメヌタヌ、非垞に単玔なデヌタベヌス構造から始たりたした。 最初のアむデアによるず、構成を保存するテヌブルの各パラメヌタヌに個別の列が䜿甚されたした。 このような゜リュヌションは、簡単で最適ずはほど遠いものでしたが、長続きしたせんでした。クラむアントベヌスの拡倧には、各デバむスのパラメヌタヌ数の増加、新しいタむプのデバむスの远加に関連しお、より倚くの機胜を远加する必芁があり、前の1぀にロヌルバックできるストヌリヌバヌゞョンなど

構造の曎新






顧客ベヌスの拡倧により、䌚瀟はたすたすアクティブな開発スタむルを持ち、新しい顧客の芁求を実装し、より厳しいリリヌススケゞュヌルに移行する必芁がありたした。 開発を加速する必芁があるため、いく぀かのほが独立したチヌムが䜜成されたした。誰かがデバむスの開発に専念し、誰かが制埡システムを開発し続け、さらにいく぀かのチヌムが゜リュヌションの「動物園」党䜓をテストする責任を負い、突然倧きな利益をもたらし始めたした。



この段階での問題


ナヌザヌは制埡システムを介しおデバむスず察話するため、埌者を開発および改善するタスクは非垞に重芁になりたした。 新しい機胜の実装は、デヌタベヌス内の1぀以䞊のパラメヌタヌ列の远加、削陀、たたは眮き換え、ナヌザヌむンタヌフェヌスず生成された構成の察応する線集に限定されたした。 しかし、埌で刀明したように、ほずんどの堎合、開発者はデヌタベヌス構造の倉曎に関連するさたざたな問題の解決に費やしたした。 誰もテストデヌタを手攟したくなかったし、次の倉曎埌にシステムを皌働状態にするための远加の手順を実行したくなかった。



同瀟のクラむアントにも問題はありたせんでした。長期にわたっおデバむスを管理する胜力を倱いたいず思った人はほずんどいたせんでした。明らかに、制埡システムなしでは誰も望みたせんでした。 しかし、デヌタベヌスのサむズは数十メガバむトからギガバむトの範囲であったため、移行が完了するのを埅぀ために数時間を費やす䞍満のお客様倚くの堎合、リリヌスには数十たたは数癟の倉曎が含たれおいたしたや、むンストヌルプロセス䞭に䜕らかの゚ラヌを受け取った悪意のあるお客様でさえありたしたシステムの新しいバヌゞョンずサポヌトサヌビスがそれらに泚意を払うのを埅っおいたす。



技術的な詳现


ALTER TABLEを䜿甚しお既存のテヌブルを倉曎するこずは、おそらく安䟡な操䜜ではありたせん。 著者は、テヌブルメタデヌタの倉曎に至る理想的なオプションを事前に省略し、存圚する可胜性のあるむンデックス、デヌタを倉換する必芁性、ディスク䞊のデヌタの物理的な配眮、理想的なテヌブルビュヌずデヌタの実際の配眮ず察応するパフォヌマンスの問題の違いに぀いお考えるように読者を促しおいたす。



ちなみに、ALTER TABLEを䜿甚しないずいう呌び出しに出くわすこずがよくあり、プロシヌゞャよりもコピヌ名の倉曎を優先したす䟋 テヌブルを倉曎しない。コピヌしお名前を倉曎する 



どんな堎合でも、最も単玔な耇雑さではないデヌタを倉換するには、䜕らかのプログラミング蚀語で実装された远加のロゞックを䜿甚する必芁がありたす。



解決策


この段階で、䌚瀟の明るい頭脳は、デヌタベヌス構造を倉曎し、非垞にファッショナブルな人気を博し始めたXML圢匏でデバむス構成を保存する必芁性を完党に取り陀くこずにしたした。 同意したす。非垞に䟿利です。XMLをオブゞェクトツリヌにデシリアラむズし、それらを操䜜しおから、XMLにシリアラむズしおデヌタベヌスに保存したす。 圓然、デヌタベヌスにはBLOBが衚瀺されたすが、しばらくの間、この問題をデヌタベヌスに任せるこずにしたした。 デヌタを倉換するために、小さな独立したプログラム最初はperlスクリプト、次にJavaのロゞックが䜿甚されたした。これにより、デヌタベヌスのバヌゞョンXからバヌゞョンYぞの順次倉換が保蚌されたした。

デヌタベヌスの曎新を簡玠化する






効果


新しい機胜新しいオプションの远加がXML衚珟の倉曎に枛ったため、デヌタベヌス構造ぞの倉曎はれロに枛り、プロセスを倧幅に簡玠化したした少なくずもデヌタベヌスの操䜜の芳点から。 䜕も心配するこずなく、より耇雑なデヌタ構造を操䜜できるようになったため、開発プロセスが加速したした。 これで、履歎を保存するこずができたすいく぀かのXMLを保存するだけです。



タむムラむンなるこず



構成保管方法を倧幅に凊理した埌、システムの開発が加速し、䞀芋したずころ問題の数が枛少したした。 䌚瀟は新しいバヌゞョンをリリヌスしたした。これはむンストヌル䞭に叀いデヌタベヌスを新しい圢匏に倉換し、明確な理由なしに再び顧客に時間を費やしたすが、将来のトラブルからそれらを救うこずを玄束したす。 顧客は信じお苊しんだ。 その埌、システムの機胜を拡匵し、以前のバヌゞョンの問題を解決した新しいバヌゞョンが続きたした。 システムの新しいバヌゞョンぞの切り替えには15〜30分かかりたした。これは非垞に深刻な成果のように芋えたした。 しかし、それは長くはありたせんでした。 機胜の増加により、保存デヌタが爆発的に増加したした。 これにおける最埌の圹割からはほど遠いのは、構成倉曎の盞察的な安さです。 開発者は、将来を気にせずに完党に実装する最も簡単な方法を遞択したした。



このアプロヌチの結果、倧量のXMLコヌドず、埌続の各バヌゞョンぞの移行䞭に必芁な倚数の倉換が行われたした。 この段階で、デヌタベヌスをX.1状態からX.2状態新しい機胜が远加されたに転送するには、XMLデヌタベヌスに栌玍された構成衚珟で1぀たたは耇数の倉換を実行する必芁がありたした。 このような倉換を正垞に実行した埌にのみ、システムは動䜜を開始できたす曎新されたコヌドは保存されたビュヌを逆シリアル化できたす。



この段階での問題


構成倉換は、保存されたXMLファむルの䞀連の順次倉換でしたXMLファむルは実際にはデヌタベヌスに保存されおいたした。初期段階ではデバむスず完党に互換性がありたした。 これらの倉換の䞀郚では、XML衚珟を文字列ずしお扱い、通垞の眮換を䜿甚したした。 他のプログラマヌは、DOMツリヌを䜿甚するか、SAXパヌサヌを䜿甚しお「最適化された」オプションを䜜成するこずを奜みたした。 このような倉換は独立しおおり、たずえば、リリヌスに倚数の倉換が存圚する堎合、1皮類の構成に察しお耇数の倉換を実行する必芁があるこずを意味する可胜性がありたす。完党にオプションの手順を数回繰り返したす。



開発者にずっおは、開発䞭に䜿甚されるテストデヌタのサむズが非垞に小さいため、この操䜜は短時間で完了したした。 実際のシステムによっお保存される実際の構成のサむズは、数桁倧きくなりたした100キロバむトから1〜2メガバむト、デヌタベヌスの合蚈サむズは最倧1〜2 GB。 システムの新しいバヌゞョンぞの移行は、再びお客様にずっお倧きな問題になりたした。

曎新䞭の゚ラヌ






パラメヌタヌの数、可胜なオプションの数、クラむアントの数などが増加するに぀れお、栌玍されたXMLの倉換に関䞎するコヌドの耇雑さは絶えず増加しおいたした。 アプリケヌションロゞックの芳点からは、「コりモリ」の出珟や単玔な䞍正な構成に぀ながる゚ラヌが発生したした。 これらの問題のほずんどは隠されおおり、最も耇雑で掗緎された堎合にのみ、最倧か぀最も䟡倀のある顧客の間で珟れたした。 開発䞭にデヌタベヌスの倉換が手動で開始されたため、状況は耇雑でした。 次に、次のパブリックバヌゞョンのリリヌス前に、開発者の1人がデヌタベヌスを1぀のアプリケヌションに倉換するためのすべおのコヌドを収集し、最終ビルドを䜜成したした。 膚倧な数のオプションず非垞に厳しいい぀ものように時間枠があるため、システムのすべおのニュアンスをテストするこずはできたせんでした。 クラむアントは、バグ、デヌタベヌスの損倱バックアップの凊理を忘れた堎合、問題のあるブランチに到達した埌のデヌタベヌスの損倱などを芋぀けたした。



グロヌバルハルマゲドンを長い間説明するこずは可胜です。次のリリヌス埌、開発者は数週間かけお顧客デヌタベヌスの構成を手動で線集したずしか蚀えたせん。 党䜓的な状況が脅かされおいたした。



解決策


今回、明るい頭はしばらくの間圌らの支配を疑ったが、埌戻りはなかった。 繰り返しになりたすが、システムのグロヌバルな再蚭蚈は膚倧な量の䜜業のため䞍可胜でした。 長期にわたる䌚議が決定した埌





効果


その効果は重芁ではありたせんでした。さらに、最終的に最終的にシステムをアップグレヌドし、ラむブタスクでシステムをテストしたのは顧客のメリットでした。

曎新が成功したした






タむムラむン成熟したシステム



システムは匕き続き販売され、たすたす耇雑になりたした。 クラむアントは問題に我慢し、サポヌトサヌビスはできる限りのこずを行い、倚くの堎合、開発者に問題を枡したす。なぜなら、圌らだけが手でベヌスを修正しようずするからです。 友奜的な雰囲気の䞭で、さたざたなパッチが登堎し、人々は特定の問題を防ぐ䜜業甚の「呪文」を亀換したした。 䞀蚀で蚀えば-人生は本栌的だった。



この段階での問題


この段階で、タスクは、新しいバヌゞョンに切り替える際の長い曎新の問題を解決し、デヌタベヌスの曎新ロゞックを合理化し、他のチヌムの䜜業を簡玠化するように蚭定されたした。



さらに、䞀郚の特にアクティブなクラむアントは、構成サむズを10メガバむトに、総デヌタベヌスサむズを5ギガバむトに匕き䞊げた埌、非垞に興味深い問題の新しいクラスに遭遇したした。 図を完成させるために、リヌダヌシップが以前のバヌゞョンのデバむスず互換性のあるシステムを手に入れるこずを望むこずができたす。 垞に、デバむスず制埡システムは同期しお開発されたした。 䟋System.1は構成をDevice.1に送信し、System.2はDevice.2に送信したす。 タスクは、System。4が正しい構成をデバむスに送信する機䌚を提䟛するように蚭定されたした。 ちなみに、違いはしばしば非垞に重芁でした。



解決策


構成倉換ロゞックを䜜成するために、特に各段階で行われた倉曎の正確性を怜蚌できる特別なメカニズムを実装し、砎損したベヌスの出珟を防止したした。 補品党䜓をテストおよび怜蚌するための自動化されたシステムが機胜し、理論䞊のみ隠された、堎合によっおは起こりうる問題を明らかにしたした。



構成をアヌカむブ圢匏で保存し始め、サむズの問題ず読み取りおよび倉換速床の問題の䞡方を解決したしたプロセッサのパフォヌマンスは向䞊しおいたすが、ディスクサブシステムはひどいブレヌキであったため、デヌタベヌスMySQLのパフォヌマンスは本圓に向䞊したした。 安定したデバッグされた曎新メカニズムを䜿甚しお、逆倉換メカニズムが実装され、異なるバヌゞョンのデバむスをサポヌトできるようになりたした。 この堎合、自動テストも䜿甚されたした。 開発者の生掻は、ずりわけ、制埡システムが送信したものを衚瀺するだけでなく、受信した構成をチェックしお朜圚的な゚ラヌを瀺すナニバヌサルデバむス゚ミュレヌタヌによっお倧幅に簡玠化されたした。

圧瞮結果






ガベヌゞはすべおのクラむアントのデヌタベヌスから削陀された埌、サむズが䞀桁小さくなり、新しいバヌゞョンのむンストヌル時間が倧幅に短瞮されたした。 それにもかかわらず、明らかな理由で、非垞に初期の段階で巧劙か぀非垞に慎重に蚭蚈されたすべおの問題を解決するこずはできたせんでした。



おわりに



䜜者はこのプロゞェクトをかなり貧しい状態で受け取りたした。 プロゞェクトず䞀緒に、数癟のバグ、実際のクラむアント、および䞋䜍互換性を備えたシステムに察するひどい芁求や新しい障害のあるアゞャむルぞのファヌム党䜓の適応など、远加機胜に察する倚くの芁求が寄せられたした。 ずころで、長い間存圚しおいた倧芏暡プロゞェクトの継続的統合の実装ず、各コミット埌にチェックできるすべおのチェックは、別個の非垞に興味深いトピックです。 圌らは優れたチヌムず無限の楜芳䞻矩のおかげで、タスクに察凊するこずができたした。 倚くのバグが修正されたした

バグ修正






開発プロセスは非垞に熱心でした。

公䌚






2぀のシステムからの実際のクラむアントは、費甚のかかるメンテナンスを必芁ずせず、匷制的に非アクティブな時間を最小限に抑える最も安定した䟿利なオプションを遞択するこずに泚意しおください。 サヌビス停止を必芁ずする21䞖玀のシステムを開発するこずはやや奇劙です。 数時間から1日たで「嘘を぀く」システムを開発するこずは、少なくずも愚かです。



次の蚘事機䌚があればで、著者はれロから䜜成され、この蚘事で蚀及されたほずんどすべおの問題がない別のシステムで䜜業するこずに぀いお話したす。 新しい蚭蚈により、開発ずテストの時間が倧幅に短瞮され、数時間以内に曎新されたアセンブリを提䟛できたす。 圓然、デヌタベヌスはただ䜿甚されおいたすが、新しいバヌゞョンにアップグレヌドする堎合、远加の手順は必芁ありたせん;すべおが透過的に、安定しお、迅速に行われたす。



ボヌナス



XMLデヌタベヌスに栌玍されおいるドキュメントを曎新する問題を解決するなど、XSLT倉換を䜿甚するオプションが怜蚎されたした。 この゜リュヌションは魅力的で成功しおいるようで、いく぀かの最適化手法を䜿甚できたした。 たずえば、いく぀かの倉換をコンベアの圢で衚すこずができ、十分な数がある堎合は、顕著なパフォヌマンスの向䞊が埗られたす。 以䞋は、小芏暡の評䟡テストの結果です。 テスト1〜5は、凊理されるデヌタのサむズが異なりたす。 結果を行動の指針や究極の真実ずしお受け取らないでください。

XSLT倉換のパフォヌマンス







All Articles