MongoDBやCouchDBなどのデータベースのスキーマ移行を自動化する方法を探しています。
できれば、この楽器はPythonで書く必要がありますが、他の言語でもかまいません。
nosqlデータベースには大量のデータが含まれている可能性があるため、通常のrdbmsの意味でデータベースを移行することはできません。実際には、データがサイズのしきい値を超えるとすぐに、rdbmsに対してそれを行うことはできません。既存のテーブルにフィールドを追加するためにサイトを1日停止することは実用的ではないため、rdbmsを使用すると、フィールド専用の新しいテーブルを追加したり、データにアクセスするために結合を実行したりするなど、醜いパッチを実行することになります。nosqlの世界では、いくつかのことができます。
データが十分に大きい場合は、データを移行できないか、移行することは有益ではないことに気付くでしょう。つまり、スキーマを変更する場合、コードは古い形式との下位互換性を永久に維持する必要があります。
もちろん、データが「古く」なり、いずれにせよ期限切れになる場合は、スキーマの移行を行うことができます。新しく追加されたデータの形式を変更し、古い形式のすべてのデータが期限切れになるのを待つだけです。その後、下位互換性を廃止できます。コード。
これらのデータベースの想定される利点の1つは、スキーマがないため、スキーマ移行ツールを必要としないことです。代わりに、データベースに格納されているさまざまなデータを処理するためのデータ処理コードを記述します。
プロジェクトでNoSQLデータベースに関してスキーマの移行が必要な場合、リレーショナルデータベースの方法で考えていると思いますが、NoSQLデータベースを使用しています。
誰かがNoSQLデータベースの操作を開始する場合は、RDBMS(つまり、MySQL)のほとんどの「ルール」もウィンドウの外に出る必要があることを理解する必要があります。厳密なスキーマ、正規化、オブジェクト間の多くの関係の使用など。NoSQLは、RDBMSによって提供されるすべての追加の「機能」を必要としない問題を解決するために存在します。
NoSQLデータベースのハードスキーマを予期しない、または必要としない方法でコードを記述することをお勧めします-本当にもっとスキーマが必要な場合は、古いスキーマをサポートし、アクセス時にその場でドキュメントレコードを変換する必要がありますそのレコードのフィールド。
NoSQLストレージは、RDBMSを使用する場合とは異なる考え方や設計を行う場合に最適に機能することに注意してください。