数週間前、シカゴで開かれた2017年MongoDB Worldに出席してきました。私とエンジニアたちは、会場で行われたさまざまなデモやプレゼンテーションを見る機会に恵まれました。中でも私が特に感銘を受けたのが、「Compassを使用してクラスタのパフォーマンスの問題を診断する」です。MongoDB CompassはMongoDBのグラフィカルクライアントです。NuxeoリポジトリのホスティングにMongoDBを使用しているユーザにとって、Compassは使い方を習得しておくべきツールの1つです。

CompassはMongoDBクラスタと接続して、[Databases]と[Performance]という2つのタブを表示します。[Database]タブでは、ホスト上のデータベースの作成とブラウズを行うことができ、既存のデータベースに関する統計情報が表示されます。データベースをドリルダウンして、そのデータベースのコレクションをブラウズすることも可能です。nuxeoデータベースでは、一般的な文書階層が格納されているデフォルトコレクションを表示できます。「nuxeo-mongodb-ext」がインストールされている場合は、Nuxeoディレクトリと監査レコードのコレクションを表示できます。コレクションをドリルダウンすると、そのコレクションのスキーマの編集、文書の表示・編集・挿入、インデックスの表示と作成、クエリの説明、検証ルールの表示と編集といった操作を行えます。

[Performance]タブでは、リアルタイムのパフォーマンスメトリクスを確認したり、最もホットなコレクション(使用頻度が最も高いコレクション)を表示したり、実行時間の長いクエリを検査したりすることが可能です。これらのオプションを利用することで、Nuxeo管理者は、データベースレコードを表示して対話的に操作し、インデックスを追加して検索パフォーマンスを高めるほか、潜在的な改善ポイントを特定できるようになります。

MongoDB CompassでNuxeoリポジトリのデータを表示する
画像:MongoDB CompassでNuxeoリポジトリのデータを表示する

[Performance]タブがどのようなメリットをもたらすかを調べるため、数千個のテキスト文書を無作為に選び、Nuxeo Platformインポータを使用してインポートしてみました。インポートの実行中は、新しい文書の挿入、それらの文書に対するデータベースクエリ、フルテキスト情報の生成に伴う文書の更新などを視覚的に確認することができました。

Nuxeoでの無作為データのインポート中に表示されるパフォーマンスメトリクス
画像:Nuxeoでの無作為データのインポート中に表示されるパフォーマンスメトリクス

Nuxeoユーザにとって最も有益なCompassの機能は、インデックスを追加する機能です。Nuxeo Platformでは、リポジトリの初期化時に、「ecm:id」、「ecm:primaryType」、「ecm:parentId」などの共通フィールドに対してインデックスが自動的に作成されます。これはこれで有益な機能ですが、カスタムスキーマからのフィールドに対してはインデックスは作成されません。現時点では、MongoDBでインデックスを定義するためのNuxeoネイティブオプションはありません。ただし、インデックスの作成はCompassで容易に行えるため、このことは問題となりません。たとえば、実行時間の長いクエリを[Performance]タブで特定して検査し、[Explain Plan]機能を使用して、どのフィールドがクエリで使用されているかを特定し、インデックス作成ウィザードを使用して、それらのフィールドのインデックスを追加することが可能です。

2017年MongoDB Worldでのプレゼンテーションの内容は、こちらから視聴できます。

発表者のBrian Blevins氏とコンファレンスの主催者であるMongoDBに、この場をお借りして感謝の意を表したいと思います。