1. ホーム
  2. データベース
  3. モンゴルディーブ

mongodbデータベースの移行に伴う変更の解決策

2022-01-19 20:52:08

前置き

バージョンの反復中に、テーブルにフィールドを追加したり、フィールドを削除したりといった、データベースの変更が行われる可能性があること。

 変更履歴がない。複数の異なるバージョンの環境をアップグレードする際にも、データベースの変更記録を探してスクリプトを実行するのに多くの時間がかかる。

このソリューションでは、データベースの変更を記録する方法を提供しています。

オープンソースライブラリ:migrateを使用し、現在様々な種類のデータベースをサポートしています(可視化では、既にサポートされているmongodbを使用しています)。

の使用

migrateでは、変更操作を行うために2つの方法が用意されています。1. コマンドラインによる方法 2. SDK による方法 (Go を使用)

このシナリオでは、コマンドライン・アプローチを使用します ( 公式ドキュメント ).

インストール方法

最新のバイナリパッケージは、GitHubの以下のサイトからダウンロードしてください。 github.com/golang-migr ...

を直接解凍すると利用できます。

簡単な使い方

(a)データベースに対するあらゆる変更は、アップ(バージョンアップ)とダウン(バージョンダウン)の2つのケースに分けられる。

そのため、各変更記録は2つのファイル、すなわち

{version}_{title}.up.{extension}
{version}_{title}.down.{extension}


version は現在のバージョン番号で、連番でもタイムスタンプでもよく、プログラムでは '_' の前の最初の文字をバージョン番号として扱います。

title は現在の変更の主題で、主にユーザーへの注意喚起のために使用されます。

extension: ファイルの拡張子を示す。

例えば、mongodbデータベースの場合。

0001_init_database.down.json  
0001_init_database.up.json


マイグレーションファイルを作成する場合は、migrate createコマンドで、次のように作成します。

# migrate create [-ext E] [-dir D] [-seq] [-digits N] [-format] NAME
$ migrate create -ext json -dir migrations -seq init_database
~/migrations/000001_init_database.up.json
~/migrations/000001_init_database.down.json


パラメータの説明です。

  • ext: ファイルの拡張子。
  • dir: 作成されたディレクトリ。
  • seq: シリアルモードで作成するかどうか。
  • digits: シリアル番号の長さ(デフォルトは6)。
  • format: 時刻の形式。

このファイルを使用して、mirationsデータベースのテストコレクションを初期化します。

$ cat migrations/000001_init_database.up.json
[
    {
       "insert": "test",
       "documents": [{ "name": "aaa"}]
    }
]
$migrate -verbose -source file://migrations --database mongodb://root:pwd@<databaseIP>:27017/migrations?authSource=admin up
2021/08/31 14:26:06 Start buffering 1/u init_database
2021/08/31 14:26:08 Read and execute 1/u init_database
2021/08/31 14:26:08 Finished 1/u init_database (read 1.516025172s, ran 75.143261ms)
2021/08/31 14:26:08 Finished after 1.654028624s
2021/08/31 14:26:08 Closing source and database


パラメータの説明です。

  • verbose: 現在の変更履歴を表示します。
  • source: 変更ファイルが保存されているディレクトリ、できればプロジェクトの migrations ディレクトリ、現在のデータベースをすべて見るには ls を使用します。
  • database: monogdb の接続 URI
  • up: アップグレード (ダウングレードには down を使用)

データベースを見ると、データがデータベースに挿入されていますね。

mongos> use migrations;
switched to db migrations
mongos> show collections;
migrate_advisory_lock
schema_migrations
test
mongos> db.test.find()
{ "_id" : ObjectId("612e3f5febb6de55cdeec1de"), "name" : "aaa" }
# Two more tables are generated, where schema_migrations are migration data records;
mongos> db.schema_migrations.find();
{ "_id" : ObjectId("612dcb8023fbb5b85368b874"), "version" : 1, "dirty" : false }


バージョン変更でマイグレーションのアップグレード版を制御する。データベース自体のバージョンがすでに最新版より高い場合、forceコマンドを使用して現在のデータベースマイグレーションのバージョン番号を変更することができる。

$ migrate -verbose -source file://migrations --database mongodb://root:pwd@<database IP>:27017/migrations?authSource=admin force 000004
2021/08/31 14:34:52 Finished after 89.470244ms
2021/08/31 14:34:52 Closing source and database
# Check that the database version has been changed to version 4, and that the up operation will tell you no change.
mongos> db.schema_migrations.find();
{ "_id" : ObjectId("612dcd8c1e88c95afcb426fe"), "version" : 4, "dirty" : false }


フォローアップ

プロジェクト内にデータベース/プロファイルの変更履歴を保持し、プロジェクトを再デプロイする際に、変更履歴を参照し、すべての変更に対して変更を完了させることができます。

mongodbデータベース移行の変更点についての記事は以上となります。mongodbの移行変更については、Scripting Houseの過去記事を検索するか、以下の関連記事を引き続きご覧ください。