nosqlデータベースには大量のデータが含まれている可能性があるため、通常のrdbmsの意味でデータベースを移行することはできません。実際には、データがサイズのしきい値を超えるとすぐに、rdbmsに対してそれを行うことはできません。既存のテーブルにフィールドを追加するためにサイトを1日停止することは実用的ではないため、rdbmsを使用すると、フィールド専用の新しいテーブルを追加したり、データにアクセスするために結合を実行したりするなど、醜いパッチを実行することになります。いくつかのことができます。
- 他の人が示唆しているように、可能なスキーマのさまざまな「バージョン」を処理するようにコードを記述できます。これは通常、見た目よりも単純です。多くの種類のスキーマの変更は、コーディングするのが簡単です。たとえば、スキーマに新しいフィールドを追加する場合は、それをすべての新しいレコードに追加するだけで、すべての古いレコードでは空になります(「フィールドが存在しません」というエラーなどは発生しません;)。古いレコードのフィールドに「デフォルト」値が必要な場合は、コードで簡単に行うことができます。
- 別のオプションであり、実際には、フィールドの名前変更や構造の変更などの重要なスキーマ変更を行う唯一の正しいオプションは、schema_versionを各レコードに格納し、データを任意のバージョンから次のバージョンに移行するコードを用意することです。読む 。つまり、現在のスキーマバージョンが10で、バージョン7のデータベースからレコードを読み取る場合、dbレイヤーはmigrate_8、migrate_9、およびmigrate_10を呼び出す必要があります。このようにして、アクセスされるデータは徐々に新しいバージョンに移行されます。アクセスされていない場合は、誰がどのバージョンであるかを気にします;)