MongoDBは、分散アーキテクチャによってスケーラビリティが向上し、ドキュメントデータモデルが開発者に優れた柔軟性を提供するため、NoSQLの世界で群を抜いて最も人気のある選択肢です。ほぼ毎年、MongoDBのメジャーバージョンがリリースされ、2018年も例外ではありません。 MongoDB 4.0は2018年7月にリリースされ、その後に他のマイナーリリースもいくつかリリースされました。 MongoDBバージョン4.0では、マルチドキュメントトランザクションと型変換がサポートされるようになりました。 MongoDBは、MongoDBチャート(ベータ)と呼ばれる新しいツールを導入し、2018年にMongoDBコンパスにも集約パイプラインビルダーのサポートを追加しました。この記事では、2018年にリリースされたMongoDBのいくつかのエキサイティングな機能について説明します。
マルチドキュメントACIDトランザクション
これはMongoDBで最も待望されていた機能でした。バージョン4.0以降、レプリカセットに対するマルチドキュメントアシッドトランザクションは本番環境に対応しており、MongoDBでサポートされています。すべてのMongoDBトランザクションは、データの整合性を保証するACIDプロパティを拡張するようになりました。酸トランザクションを必要とするアプリケーションに追加するのは非常に簡単で、酸トランザクションを必要としない他の操作には影響しません。マルチドキュメントACIDトランザクションのサポートにより、トランザクション内で実行される書き込み操作は、トランザクション外では表示されなくなります。アプリケーション内にマルチドキュメントのAcidトランザクションを追加するための便利なコマンドを次に示します。
関数 | 説明 |
---|---|
Session.startTransaction() | 新しいトランザクションを開始します |
Session.commitTransaction() | トランザクションをコミットします |
Session.abortTransaction() | トランザクションを中止します |
Mongoシェルを使用してトランザクション操作を追加する小さな例を次に示します。
akashk:PRIMARY> use mydb
akashk:PRIMARY> db.createCollection(“newColl”)
akashk:PRIMARY> session = db.getMongo().startSession()
akashk:PRIMARY> session { "id" : UUID("62525323-1cd1-4ee8-853f-b78e593b46ba") }
akashk:PRIMARY> session.startTransaction()
akashk:PRIMARY> session.getDatabase("mydb").newColl.insert({name : 'hello'})
akashk:PRIMARY> WriteResult({ "nInserted" : 1 })
akashk:PRIMARY> session.commitTransaction()
すべてのトランザクションは、スナップショットアイソレーションを使用して、データベース内の1つまたは複数のコレクションにわたるデータの一貫したビューを提供します。 MongoDBは、コミットされていない変更をセカンダリノード/レプリカにプッシュしません。トランザクションがコミットされると、すべての変更がセカンダリノードに適用されます。
などのMongoDBマルチドキュメントアシッドトランザクションを使用できる例はたくさんあります。
- 銀行口座間の資金移動
- 支払いシステム
- トレーディングシステム
- サプライチェーンシステム
- 請求システム
トランザクションを追加する際の考慮事項
- MongoDBは、60秒を超えて実行されるすべてのトランザクションを中止します。
- 1回のトランザクションで変更できるドキュメントは1000個までです。読み取り操作に制限はありません。
- MongoDbはトランザクションを単一のエントリとしてoplogに保存するため、トランザクションのサイズは16MB未満である必要があります。
- トランザクションを中止すると、すべての変更がロールバックされます。
集約パイプラインの新しい型変換演算子
データのリアルタイムの洞察を得て、複雑なクエリを作成するために、MongoDB開発者は通常、集約パイプラインを作成することを好みます。 MongoDB 4.0バージョンでは、個々のフィールドをクレンジングせずにデータをクエリするために、いくつかの新しい集計型変換演算子が追加されました。
集計演算子 | 説明 |
---|---|
$ convert | 値を指定されたタイプに変換します |
$ toDate | 値を日付に変換します |
$ toDecimal | 値を10進数に変換します |
$ toDouble | 値をDoubleに変換します |
$ toLong | 値をLongに変換します |
$ toInt | 値を整数に変換します |
$ toObjectId | 値をObjectIdに変換します |
$ toString | 値を文字列に変換します |
$ ltrim | 文字列の先頭から不要な文字を削除します |
$ rtrim | 文字列の末尾から不要な文字を削除します |
$ trim | 文字列の両側から不要な文字を削除します |
変更ストリームの拡張機能
複雑な設定なしでリアルタイムのデータ変更更新を提供する変更ストリームの機能は、バージョン3.6で導入されました。バージョン4.0では、変更ストリームは、単一のコレクションだけでなく、データベース全体またはクラスター全体の変更を追跡できるようになりました。これとは別に、現在、変更ストリームは、サーバーアプリケーションに役立つ可能性のあるイベントに関連付けられたクラスタータイムスタンプも返します。
より高速なデータ移行
データベースがクラスター全体でシャーディングされている場合、シャーディングされたクラスターからノードを柔軟に追加および削除すると、時間がかかる場合があります。すべてのシャードにデータを分散する役割を担うシャードクラスターバランサーは、バージョン4.0でメジャーアップグレードされました。これで、40%速い速度でデータ移行を完了することができます。
ノンブロッキングセカンダリリード
以前は、MongoDBは、oplogエントリがセカンダリノードに適用されているときに、すべてのセカンダリ読み取りをブロックするために使用されていました。これにより、セカンダリ読み取りのレイテンシが変動していました。 MongoDB 4.0以降、レプリカセットのスループットが向上し、読み取りレイテンシが改善されたため、セカンダリ読み取りが非ブロッキングになりました。
コンパスのアグリゲーションパイプラインビルダー
MongoDBコンパスは、MongoDBがデータを視覚化およびクエリするためのGUIツールです。今年、MongoDBコンパスは集約パイプラインの新機能を取得しました。マルチステージ集約パイプラインを構築するためのビジュアルクエリエディタを提供します。これがそのスナップショットです:
コンパスの集計クエリビルダーこの機能に加えて、コンパスには、クエリを任意のネイティブコード言語にエクスポートする機能もあります。
MongoDBチャート
MongoDB Chartsは、ユーザーがMongoDBデータのリアルタイムの視覚化をすばやく作成できるようにする新しいツールです。このツールは、タイプ処理、配列の削減、ネストされたドキュメントもサポートするドキュメントデータモデル用に構築されています。このツールを使用すると、ユーザーはグラフダッシュボードを作成して他のユーザーと共有できます。 MongoDBチャートは、MongoDBAtlasと完全に統合されました。
その他の新しいMongoDB機能
- MongoDB Stitch:Mongoサービスに安全にアクセスできるクライアントアプリケーション開発用のサーバーレスプラットフォーム。
- MongoDB Kubernetes:Kubernetesクラスター内にMongoDBをデプロイするため。
- MongoDB Mobile:コンパクトな形式でMongoDBの柔軟性とパワーを提供し、IOTデバイスで使用できるようにします。
- MongoDBモニタリングクラウドサービス:モニタリングメタデータをMongoDBモニタリングクラウドに無料でプッシュします。
MongoDBの未来
MongoDBは、バージョン4.2でいくつかの新機能をリリースする予定です。これには次のものが含まれます。
- より広範なWiredTigerエンジン
- トランザクションマネージャー
- シャード展開全体のトランザクション
- グローバルポイントインタイムリード