25

MongoDBやCouchDBなどのデータベースのスキーマ移行を自動化する方法を探しています。

できれば、この楽器はPythonで書く必要がありますが、他の言語でもかまいません。

4

4 に答える 4

18

nosqlデータベースには大量のデータが含まれている可能性があるため、通常のrdbmsの意味でデータベースを移行することはできません。実際には、データがサイズのしきい値を超えるとすぐに、rdbmsに対してそれを行うことはできません。既存のテーブルにフィールドを追加するためにサイトを1日停止することは実用的ではないため、rdbmsを使用すると、フィールド専用の新しいテーブルを追加したり、データにアクセスするために結合を実行したりするなど、醜いパッチを実行することになります。nosqlの世界では、いくつかのことができます。

  • 他の人が示唆したように、可能なスキーマのさまざまな「バージョン」を処理するようにコードを書くことができます。これは通常、見た目よりも単純です。多くの種類のスキーマの変更は、コーディングするのが簡単です。たとえば、スキーマに新しいフィールドを追加する場合は、それをすべての新しいレコードに追加するだけで、すべての古いレコードでは空になります(「フィールドが存在しません」というエラーなどは発生しません;)。古いレコードのフィールドに「デフォルト」値が必要な場合は、コードで簡単に行うことができます。
  • 別のオプションであり、実際には、フィールドの名前変更や構造の変更など、重要なスキーマの変更を行う唯一の正しいオプションは、schema_versionを各レコードに格納し、READで任意のバージョンから次のバージョンにデータを移行するコードを用意することです。つまり、現在のスキーマバージョンが10で、バージョン7のデータベースからレコードを読み取る場合、dbレイヤーはmigrate_8、migrate_9、およびmigrate_10を呼び出す必要があります。このようにして、アクセスされるデータは徐々に新しいバージョンに移行されます。アクセスされていない場合、誰がそれがどのバージョンであるかを気にします;)
于 2010-06-09T16:03:26.987 に答える
2

データが十分に大きい場合は、データを移行できないか、移行することは有益ではないことに気付くでしょう。つまり、スキーマを変更する場合、コードは古い形式との下位互換性を永久に維持する必要があります。

もちろん、データが「古く」なり、いずれにせよ期限切れになる場合は、スキーマの移行を行うことができます。新しく追加されたデータの形式を変更し、古い形式のすべてのデータが期限切れになるのを待つだけです。その後、下位互換性を廃止できます。コード。

于 2009-12-27T16:50:07.403 に答える
2

これらのデータベースの想定される利点の1つは、スキーマがないため、スキーマ移行ツールを必要としないことです。代わりに、データベースに格納されているさまざまなデータを処理するためのデータ処理コードを記述します。

于 2009-12-25T12:18:32.237 に答える
1

プロジェクトでNoSQLデータベースに関してスキーマの移行が必要な場合、リレーショナルデータベースの方法で考えていると思いますが、NoSQLデータベースを使用しています。

誰かがNoSQLデータベースの操作を開始する場合は、RDBMS(つまり、MySQL)のほとんどの「ルール」もウィンドウの外に出る必要があることを理解する必要があります。厳密なスキーマ、正規化、オブジェクト間の多くの関係の使用など。NoSQLは、RDBMSによって提供されるすべての追加の「機能」を必要としない問題を解決するために存在します。

NoSQLデータベースのハードスキーマを予期しない、または必要としない方法でコードを記述することをお勧めします-本当にもっとスキーマが必要な場合は、古いスキーマをサポートし、アクセス時にその場でドキュメントレコードを変換する必要がありますそのレコードのフィールド。

NoSQLストレージは、RDBMSを使用する場合とは異なる考え方や設計を行う場合に最適に機能することに注意してください。

于 2010-06-09T16:13:05.090 に答える