Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

スキーマのバージョン管理のためのモデルデータ

項目一覧

  • Overview
  • スキーマ バージョン パターン
  • ユースケース

データベース スキーマは時々更新する必要があります。たとえば、ユーザーの連絡先情報を保持するように設計されたスキーマは、Twitter や Skype などの新しい通信方法が普及するにつれて、それらの方法を含めるように更新する必要がある場合があります。

同じコレクション内のさまざまな形状のドキュメントをサポートする MongoDB の柔軟なスキーマ モデルを使用して、コレクションのスキーマを徐々に更新できます。スキーマ モデルを更新すると、スキーマ バージョン管理パターンによって、バージョン番号を使用してこれらの更新を追跡できます。アプリケーション コードでは、バージョン番号を使用して、ダウンタイムなしでさまざまな形状のドキュメントを識別し、処理できます。

スキーマ バージョン管理パターンを実装するには、スキーマを初めて変更するときに、schema_version (または同様の名前の)フィールドをスキーマに追加します。新しいスキーマを使用するドキュメントでは、スキーマの 2 番目の反復に準拠していることを示すために、schema_version2 である必要があります。スキーマを再度更新する場合は、schema_version を増分します。

アプリケーション コードでは、ドキュメントの schema_version またはその欠如を使用して、条件に応じてドキュメントを処理できます。最新のスキーマを使用して、新しい情報をデータベースに保存します。

次の例では、users コレクション内のドキュメントのスキーマを反復処理します。

このスキーマの最初の反復では、レコードには galactic_idname、および phone フィールドが含まれます。

// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Anakin Skywalker",
"phone": "503-555-0000",
}

次の反復では、スキーマが更新され、異なる形式でより多くの情報が含まれるようになります。

// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Darth Vader",
"contact_method": {
"work": "503-555-0210",
"home": "503-555-0220",
"twitter": "@realdarthvader",
"skype": "AlwaysWithYou"
},
"schema_version": "2"
}

schema_version を追加すると、アプリケーションは新しいスキーマに合わせて作成されたドキュメントを識別し、それに応じて処理できるようになります。ドキュメントに schema_version が存在しない場合は、アプリケーションは古いドキュメントを処理できます。

たとえば、galactic_id でユーザーの電話番号を検索するアプリケーションを考えてみましょう。galactic_id が与えられたら、アプリケーションはデータベースを照会する必要があります。

db.users.find( { galactic_id: 123 } );

ドキュメントがデータベースから返された後、アプリケーションはドキュメントに schema_version フィールドがあるかどうかを確認します。

  • schema_version フィールドがない場合、アプリケーションは返されたドキュメントを、元のスキーマから phone フィールドをレンダリングする専用関数に渡します。

  • schema_version フィールドがある場合、アプリケーションはスキーマ バージョンをチェックします。この例では、schema_version2 であり、アプリケーションは返されたドキュメントを、新しい contact_method.work フィールドと contact_method.home フィールドをレンダリングする専用関数に渡します。

schema_version フィールドを使用すると、アプリケーション コードは専用のハンドラー関数をコードに追加することで、同じコレクション内で任意の数のスキーマ反復をサポートできます。

スキーマ バージョン管理パターンは、次のいずれかの場合、またはそれらの組み合わせに最適です。

  • アプリケーションがダウンすることは許されません

  • ドキュメントの更新には、完了するまでに数時間、数日、または数週間かかる場合があります。

  • ドキュメントを新しいスキーマバージョンに更新する必要はありません

スキーマ バージョン管理パターンは、従来の表形式データベースと比較して、データ移行をいつどのように行うかをより適切に決定するのに役立ちます。

戻る

通貨データ