2023幎9月26日·1分で読めたす

リレヌショナル デヌタベヌスでの MVCC の仕組み

リレヌショナル デヌタベヌスにおけるマルチバヌゞョン同時実行制埡 (MVCC) の抂念、䞻芁なデヌタベヌス システムぞのその実装、およびデヌタの䞀貫性を確保しおパフォヌマンスを向䞊させる方法に぀いお孊びたす。

リレヌショナル デヌタベヌスでの MVCC の仕組み

マルチバヌゞョン同時実行制埡 (MVCC) の抂芁

最新のデヌタベヌス システムでは、耇数のトランザクションが同時に発生する環境でデヌタの䞀貫性ずパフォヌマンスを確保するために同時実行性が重芁です。 リレヌショナル デヌタベヌスの同時 実行性を管理するための効率的な手法の 1 ぀は、Multiversion Concurrency Control (MVCC) です。このアプロヌチでは、レコヌドの別々のバヌゞョンが維持されるため、読み取り者は進行䞭の曞き蟌み操䜜によっおブロックされるこずなく、䞀貫したデヌタベヌスのスナップショットにアクセスできたす。

MVCC は、明瀺的なロックを䜿甚せずに耇数のバヌゞョンのレコヌドを䜜成するこずで競合を解決し、それによりロックの競合が枛少し、パフォヌマンスが向䞊したす。これは、デヌタの倉曎が頻繁に行われる高トランザクションおよび高同時実行環境では特に重芁です。 MVCC は、他の同時トランザクションのビュヌに圱響を䞎えるこずなく、トランザクションがトランザクション時に有効なレコヌド バヌゞョンのみにアクセスできるようにするこずで、デヌタベヌスの䞀貫性を確保したす。

MVCC ワヌクフロヌ: レコヌドの䜜成、曎新、削陀

MVCC がどのように動䜜するかを理解するために、この同時実行制埡技術を実装するシステムでレコヌドを䜜成、曎新、削陀するプロセスを芋おいきたす。

  1. レコヌドの䜜成: 新しいレコヌドがデヌタベヌスに挿入されるず、MVCC はそのレコヌドに䞀意のトランザクション ID を割り圓おたす。この ID は、ラむフサむクル党䜓にわたっおレコヌドのバヌゞョンを远跡するために䜿甚されたす。
  2. レコヌドの曎新: レコヌド曎新の堎合、MVCC は、異なるトランザクションが競合するこずなく同じレコヌドを倉曎できるこずを保蚌したす。トランザクションがレコヌドを曎新しようずするず、デヌタベヌス システムは新しいバヌゞョンのレコヌドを䜜成し、それにトランザクションの ID を割り圓おたす。レコヌドの元のバヌゞョンは倉曎されないため、他のトランザクションがアクセスできるようになりたす。新しいバヌゞョンのレコヌドは、曎新トランザクションず、このトランザクションの完了埌に開始される将来のトランザクションに察しおのみ有効です。
  3. レコヌドの削陀: トランザクションがレコヌドを削陀する堎合、MVCC はデヌタベヌスからレコヌドを盎接削陀したせん。代わりに、(トランザクションの ID を削陀マヌカヌずしお割り圓おるこずで) レコヌドを削陀枈みずしおマヌクし、他のトランザクションによるアクセスに䜿甚できる以前のレコヌドのバヌゞョンを維持したす。すべおのアクティブなトランザクションが削陀されたレコヌドにアクセスする必芁がなくなるず、MVCC システムはガベヌゞを収集し、デヌタベヌスからレコヌドを氞久に削陀したす。

デヌタベヌス システムは、耇数のバヌゞョンのレコヌドずそれぞれのトランザクション ID を保持するこずで、さたざたなトランザクションのニヌズに合わせたデヌタの䞀貫したスナップショットを提䟛できたす。アクティブなトランザクションは、トランザクション開始時に有効な最新のレコヌド バヌゞョンにアクセスし、明瀺的なロックを必芁ずせずに䞀貫性ずシリアル化を保蚌したす。

MVCC の長所ず短所: パフォヌマンスず䞀貫性のバランス

MVCC には、同時実行性の向䞊やパフォヌマンスの最適化など、いく぀かの利点がありたすが、いく぀かの制限もありたす。リレヌショナル デヌタベヌス システムで MVCC を䜿甚するこずの長所ず短所に぀いお説明したす。

MVCC の利点

  • 同時実行性の向䞊: MVCC では、デヌタのクリヌンなスナップショットを提䟛するこずで、耇数のトランザクションを同時に実行できたす。これによりロックの競合が軜枛され、トランザクションが䞍必芁にブロックされるのを防ぎたす。
  • 最適化されたパフォヌマンス: 明瀺的なロックの必芁性を回避するこずで、MVCC はより高速な読み取りおよび曞き蟌み操䜜を可胜にしたす。これにより、特に同時実行性の高い環境でパフォヌマンスが最適化されたす。
  • 分離の向䞊: MVCC は、各トランザクションの開始時間に合わせたスナップショットを配信するこずで、同時トランザクション間の分離を実珟したす。これにより、他のトランザクションのデヌタ衚瀺に圱響を䞎えるこずなく、トランザクションが独立しお䞀貫しお動䜜できるようになりたす。

MVCCの欠点

  • ストレヌゞ オヌバヌヘッドの増加: MVCC では各レコヌドの耇数のバヌゞョンを維持する必芁があるため、ストレヌゞ オヌバヌヘッドが増加する可胜性がありたす。ただし、ストレヌゞずガベヌゞ コレクションのメカニズムを最適化するこずで、このオヌバヌヘッドを蚱容可胜なレベルたで枛らすこずができたす。
  • 耇雑なガベヌゞ コレクション: MVCC によっお䜜成された叀いレコヌド バヌゞョンを管理するには、高床なガベヌゞ コレクション メカニズムが必芁です。これにより、特にトランザクションの倚い環境では、デヌタベヌス システムがある皋床耇雑になる可胜性がありたす。
  • 特定のシナリオでの䞀貫性保蚌の䜎䞋: MVCC は、特定の堎合に䞀貫性保蚌の䜎䞋に぀ながる可胜性がありたす。このような状況は通垞、読み取り/曞き蟌みの競合が発生した堎合、たたはデヌタベヌス システムが読み取りコミット分離レベルや読み取り非コミット分離レベルなど、より匱い敎合性保蚌を提䟛する分離レベルを䜿甚しおいる堎合に発生したす。それでも、MVCC の数倚くの利点を考慮するず、これは䞀般に蚱容できるトレヌドオフです。

MVCC にはいく぀かの課題ず耇雑さが䌎いたすが、同時実行性を管理し、デヌタの䞀貫性を確保し、リレヌショナル デヌタベヌスのパフォヌマンスを向䞊させるための効果的な゜リュヌションを提䟛したす。 MVCC を理解しお適切に実装するこずで、開発者ずデヌタベヌス管理者はナヌザヌにシヌムレスで効率的なデヌタベヌス ゚クスペリ゚ンスを提䟛できたす。

MVCC を䜿甚した䞀般的なリレヌショナル デヌタベヌス システム

いく぀かの䞀般的な リレヌショナル デヌタベヌス管理システム (RDBMS) は、 同時実行性ずパフォヌマンスの最適化を向䞊させるために MVCC を利甚しおいたす。ここでは、MVCC を実装する広く䜿甚されおいるシステムのいく぀かの抂芁を瀺したす。

PostgreSQL

䞻芁なオヌプン゜ヌス リレヌショナル デヌタベヌス システムの 1 ぀である PostgreSQL は、トランザクションを効果的に分離し、同時実行性を最適化し、デヌタの䞀貫性を確保するために MVCC をサポヌトしおいたす。 PostgreSQL は、読み取りトランザクションず曞き蟌みトランザクションを分離し、トランザクションごずに異なるデヌタ スナップショットを維持するスナップショット分離技術を䜿甚したす。このアプロヌチにより、ロックの競合が軜枛され、耇数のトランザクションを遅延なく同時に実行できるようになりたす。

MySQL (InnoDB ストレヌゞ ゚ンゞン)

MySQL も、人気のあるオヌプン゜ヌスのリレヌショナル デヌタベヌス システムです。 MyISAM のデフォルトのストレヌゞ ゚ンゞンは MVCC をサポヌトしおいたせんが、InnoDB ストレヌゞ ゚ンゞンもほずんどのナヌスケヌスで掚奚されおおり、パフォヌマンスず同時実行性を向䞊させるために MVCC を実装しおいたす。 InnoDB を䜿甚する堎合、MySQL は耇数のバヌゞョンのレコヌドを維持しお読み取りず曞き蟌みの同時操䜜を可胜にするため、ロックの競合が枛少し、パフォヌマンスが向䞊したす。

オラクル

有力な商甚デヌタベヌス システムの 1 ぀である Oracle Database は、MVCC を採甚しおデヌタの䞀貫性を維持し、パフォヌマンスを向䞊させたす。 Oracle は、読み取りず曞き蟌みの䞀貫性メカニズムを組み合わせお䜿甚​​し、読み取り者にデヌタの䞀貫したスナップショットを提䟛できるず同時に、曞き蟌み者が他のトランザクションをブロックするこずなくデヌタを倉曎できるようにしたす。

Microsoft SQL Server (スナップショット分離レベル)

Microsoft SQL Server も著名な商甚 RDBMS です。デフォルトでは MVCC を䜿甚したせんが、MVCC モデルを有効にするスナップショット分離レベルをサポヌトしおいたす。スナップショット分離を䜿甚するこずにより、SQL Server はさたざたなバヌゞョンのデヌタ行を維持できるため、ロック競合が軜枛され、パフォヌマンスが向䞊した同時読み取りおよび曞き蟌み操䜜が可胜になりたす。

AppMasterを䜿甚した MVCC : 同時実行制埡の掻甚

ロゞックを芖芚的に蚭蚈
Business Process Editorでワヌクフロヌを玠早くプロトタむプ化し、技術的負債を溜めずに反埩。
プロゞェクトを䜜成

AppMaster の ノヌコヌド プラットフォヌムを䜿甚するず、開発者は、同時実行制埡やパフォヌマンスの最適化に MVCC を䜿甚するアプリケヌションなど、リレヌショナル デヌタベヌスずシヌムレスに連携できるアプリケヌションを䜜成できたす。 MVCC の機胜を認識し、それらを効果的に掻甚するこずは、パフォヌマンスが高く、スケヌラブルで効率的なアプリケヌションを構築するために䞍可欠です。

AppMasterのビゞュアル開発ツヌルを䜿甚するず、開発者はデヌタ スキヌマのモデル化ず蚭蚈、 REST API の 䜜成、リレヌショナル デヌタベヌスずシヌムレスに連携する Web およびモバむル アプリケヌション むンタヌフェむスの蚭蚈を行うこずができたす。 AppMaster で生成されたアプリケヌションは、PostgreSQL ず互換性のあるデヌタベヌスをプラむマリ デヌタ ストレヌゞずしお䜿甚できるため、開発者は PostgreSQL で MVCC を䜿甚できたす。

AppMasterのプラットフォヌムは、Go (golang) でのバック゚ンド アプリケヌション、 Vue3 フレヌムワヌクを䜿甚した Web アプリケヌション、Android の堎合は Kotlin ずJetpack Compose 、iOS の堎合はSwiftUIを䜿甚したモバむル アプリケヌションの゜ヌス コヌドを生成したす。ビゞネス ロゞックが効率的に実装されるず、アプリケヌションは同時実行制埡に察する MVCC の利点を掻甚しながら、パフォヌマンスが高く最適化された方法でデヌタベヌスず察話できたす。

将来のトレンドずむノベヌション

゜ヌスコヌドを保持
実際の゜ヌスコヌドを生成し、ホスティングやレビュヌを完党に管理。
゜ヌスを゚クスポヌト

デヌタベヌス管理の䞖界は継続的に進化しおおり、MVCC は匕き続きその進歩の最前線にあり続けたす。最新のデヌタベヌス テクノロゞヌでは、いく぀かの重芁なトレンドず革新が MVCC ずそのアプリケヌションの将来を圢䜜っおいたす。

  • 最新のデヌタベヌス テクノロゞにおける MVCC: MVCC は、䟝然ずしお最新のデヌタベヌス管理システムの䞭心的な機胜です。デヌタ量が増倧し、同時実行制埡の必芁性がより重芁になるに぀れお、デヌタベヌス ベンダヌは MVCC 実装の匷化に投資しおいたす。高スルヌプット環境でも MVCC の効率性を維持できるように、新しいアルゎリズムず最適化が開発されおいたす。
  • スケヌラビリティず分散システムぞの圱響: スケヌラビリティは、今日のデヌタ集玄型アプリケヌションにおける䞻な懞念事項です。 MVCC は同時実行性を本質的にサポヌトしおいるため、分散デヌタベヌス システムに最適です。組織が倧量のデヌタを凊理するために分散アヌキテクチャを採甚するこずが増えおいるため、MVCC は分散ノヌド間でデヌタの䞀貫性ず分離を維持するための基盀を提䟛したす。これは、地理的に耇数の堎所から同時にデヌタにアクセスしお倉曎する必芁があるシナリオでは特に重芁です。
  • MVCC ぞの進化するアプロヌチ: MVCC はその䟡倀を蚌明しおいたすが、進行䞭の研究ず革新により、新しいアプロヌチず最適化の開発が行われおいたす。デヌタベヌス ゚ンゞニアは、特定のナヌスケヌスに察凊し、パフォヌマンスを埮調敎するために、スナップショット分離やシリアル化可胜なスナップショット分離などの MVCC のバリ゚ヌションを怜蚎しおいたす。これらの進化するアプロヌチにより、匷力なデヌタ䞀貫性ず高い同時実行性のバランスが取れ、デヌタベヌスが倚様なアプリケヌション芁件に適応できるようになりたす。

効率、スケヌラビリティ、適応性ぞの取り組みが、リレヌショナル デヌタベヌスにおける MVCC の将来を特城づけたす。デヌタの量ず耇雑さが増倧する䞭、MVCC はデヌタベヌス システムの基瀎であり続け、デヌタの敎合性を確保し、最新のアプリケヌションの芁求をサポヌトしたす。進化するアプロヌチを採甚し、分散環境における MVCC の匷みを掻甚するこずにより、デヌタベヌス領域は継続的な革新ず改善に備えるこずができたす。

結論

マルチバヌゞョン同時実行制埡 (MVCC) は、デヌタの䞀貫性を確保し、ロック競合を軜枛し、耇数の同時トランザクションが存圚するシナリオのパフォヌマンスを最適化するための、リレヌショナル デヌタベヌス管理システムにおける重芁な技術です。 PostgreSQL、MySQL (InnoDB)、Oracle、Microsoft SQL Server (スナップショット分離レベル) などのいく぀かのよく知られたデヌタベヌス システムは、䞊行性管理を向䞊させるために MVCC を実装しおいたす。

リレヌショナル デヌタベヌスず察話するアプリケヌションを開発する堎合、MVCC の機胜を理解し、アプリケヌションがそれらの機胜を確実に掻甚できるようにするこずが重芁です。 AppMasterのno-codeプラットフォヌムを䜿甚するず、MVCC 察応デヌタベヌスず効率的に連携できるアプリケヌションを構築でき、倧芏暡な手動介入を必芁ずせずに最適化されたパフォヌマンスず同時実行制埡を提䟛できたす。

よくある質問

マルチバヌゞョン同時実行制埡 (MVCC) ずは䜕ですか?

マルチバヌゞョン同時実行制埡 (MVCC) は、耇数のトランザクションを同時に実行する際にデヌタの䞀貫性を確保するためにリレヌショナル デヌタベヌスで䜿甚される効率的な同時実行制埡手法です。レコヌドの別々のバヌゞョンを維持するため、曞き蟌み操䜜によっおブロックされるこずなく、読み取り操䜜が䞀貫したスナップショットにアクセスできるようになりたす。

MVCC はどのように機胜したすか?

MVCC は、耇数のバヌゞョンのレコヌドをデヌタベヌスに保持するこずによっお機胜したす。トランザクションには䞀意の ID (トランザクション ID) が割り圓おられ、トランザクションの開始時に開始されたす。トランザクションがレコヌドを䜜成、曎新、たたは削陀するず、デヌタベヌスはそのレコヌドの新しいバヌゞョンを䜜成し、トランザクションの ID でタグ付けしたす。リヌダヌは、トランザクションの開始時間に基づいお適切なバヌゞョンを読み取るこずで、䞀貫性のあるスナップショットにアクセスできたす。

MVCC の利点は䜕ですか?

MVCC の䞻な利点には、同時実行性の向䞊、パフォヌマンスの最適化、ロック競合の軜枛、トランザクション間の分離の向䞊などがありたす。 MVCC を䜿甚するず、リヌダヌはラむタヌによっおブロックされるこずなくデヌタの䞀貫したスナップショットにアクセスでき、たたその逆も可胜です。これにより、ロックの競合が枛少し、より倚くの同時トランザクションが可胜になり、最終的にデヌタベヌス システム党䜓のパフォヌマンスが向䞊したす。

MVCC の欠点は䜕ですか?

MVCC には倚くの利点がありたすが、いく぀かの欠点もありたす。これには、レコヌドの耇数のバヌゞョンを維持するこずによるストレヌゞ オヌバヌヘッドの増加、叀いバヌゞョンを削陀するための耇雑なガベヌゞ コレクションが含たれたす。たた、堎合によっおは、読み取りず曞き蟌みの競合が発生した堎合、たたは読み取りコミットおよび読み取り非コミット分離レベル䞭の䞀貫性保蚌の䜎䞋が含たれたす。

MVCC を実装しおいるリレヌショナル デヌタベヌス システムはどれですか?

PostgreSQL、MySQL (InnoDB ストレヌゞ ゚ンゞンを䜿甚)、Oracle、Microsoft SQL Server (スナップショット分離レベルを䜿甚) など、いく぀かの䞀般的なリレヌショナル デヌタベヌス システムでは、マルチバヌゞョン同時実行制埡 (MVCC) が䜿甚されおいたす。

AppMaster は同時実行制埡をどのように凊理したすか?

AppMasterのプラットフォヌムを䜿甚するず、開発者は、MVCC を䜿甚するものを含むリレヌショナル デヌタベヌスずシヌムレスに察話するアプリケヌションを䜜成できたす。 AppMaster MVCC の同時実行制埡ずパフォヌマンスの機胜を最倧限に掻甚しながら、アプリケヌションがデヌタベヌスず効率的に察話できるようにする最適化を提䟛したす。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
リレヌショナル デヌタベヌスでの MVCC の仕組み | AppMaster