5

私たちのほとんどのように、私はリレーショナルデータベースの世界から来ており、現在、ドキュメントデータベースの世界の可能性を調査しています。私の懸念の1つは、時間の経過に伴うデータモデルの変更の処理です(新しいプロパティが追加され、プロパティの名前が変更され、関係が追加されます。

リレーショナルデータベースでは、これは通常、次のように処理されます。

  • データベース移行の記述
    ->データベーススキーマの変更
    ->既存の行のデータの修正(通常、いくつかのビジネスロジックが含まれています)
  • コードを変更します(ORM更新、..)


ドキュメントデータベースを使用するとき、データモデルへの変更ははるかに簡単だと感じています。データベーススキーマを更新する必要はありません。ほとんどの場合、プロパティを追加するだけで、すべてが「正常に機能」します。チームが実際のエンタープライズプロジェクトでドキュメントデータベースを使用してこの種の移行をどのように管理しているのだろうか。

  • ドキュメントデータベースに保存されているタイプに変更を加えるための厳密なポリシーはありますか?たとえば、そのようなタイプへのすべての変更には、既存のドキュメントを更新するための移行が必要ですか?
  • 結果として、データモデル(ドキュメントデータベースに保存されているタイプ)とビジネスモデルの間に明確な分離がありますか?

お時間をいただきありがとうございます、
Koen

4

2 に答える 2

1

RavenDBを使用すると、パッチを適用してそれを行うことができます。参照:http ://ayende.com/blog/157185/awesome-ravendb-feature-of-the-day-evil-patchingおよび:http ://blog.hibernatingrhinos.com/12705/new-option-in-the -ravendb-studiondash-パッチ

于 2012-11-30T12:43:21.140 に答える
1

MongoDB で「スキーマ」を変更するには、3 つの一般的な方法があります。3 つすべてがうまく機能するのを見てきました。どちらを使用するかは、特定のユース ケースによって大きく異なります。

まず、新しいドキュメントに新しいフィールドを追加するだけで、そのフィールドが存在しない場合を処理するコードを記述できます。たとえば、address「ユーザー」ドキュメントに ' ' フィールドを追加できますが、そのフィールドが存在しない場合を処理するには、クライアント コードを記述する必要があります。

2 番目: コードを記述して、既存のドキュメントを確認し、「古いスタイル」のドキュメントが表示されたときに更新することができます。たとえば、name「user」ドキュメントに「」フィールドがあるかどうかを確認するコードを作成できます。first_nameそのフィールドが見つかった場合、それを " " フィールドと " " フィールド、そのドキュメント内の " " フィールド、および新しい " " フィールドと " sur_name" フィールドに分割$unsetして計算値にします。name$setfirst_namesur_name

3 番目: コレクション内のすべてのドキュメントをバッチ更新して、新しいスキーマを使用できます。上記と同じコードを記述しますが、アプリケーションがドキュメントを読み取るときに遅延適用するのではなく、コレクション内のすべてのドキュメントに適用します。

この最後の戦略は、パフォーマンスに影響を与える可能性があることに注意してください。しばらくアクセスされていない多数のドキュメントをページインすると、MongoDB システムに余分な負荷がかかります。

于 2012-12-17T23:00:24.413 に答える