0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Mongo APIを採用したCosmosDBに対して要求したコマンドのRU消費量を知るには

Posted at

背景

CosmosDBは1秒間に利用できるRU(リクエストユニット)は任意の値をユーザーで定義できるため、CosmosDBが消費できるRUの値を大きくすればどんなクエリも安定的に処理できる。しかし、なるべく多くのコマンドを少ないコストで捌きたい場合、自分が要求するコマンドによってどの程度のRUが消費されるかを知り、コマンドに対してRUの消費量が大きければコマンド内容を調整してなるべく少ないRUで同一の結果が得られるように対処しなければならない。ここではnode.jsを採用したプロジェクトにおいてCosmosDBへ要求したコマンドがどの程度RUを消費したのかを調査する方法を示す。

Node環境下でRUの消費量を知るには

CosmosDBに対してgetLastRequestStatisticsと呼ばれるCosmosDBにだけ利用できるカスタムコマンドを呼び出すことでRUの消費量を知ることができる。Nodeを使用している環境でgetLastRequestStatisticsコマンドを呼び出すにはdbオブジェクトのcommandメソッドを使用すればよい。具体的なコードを以下に示す。

getLastRequestStatistics.js
const mongodb = require("mongodb")
const mongoClient = require("mongodb").MongoClient;
const connectstring = "CosmosDB接続文字列"
const dbname = "データベース名"

async function getLastRequestStatistics() {
    const client = await mongoClient.connect(connectstring,{useUnifiedTopology: true})
    const db = client.db(dbname)

    //計測したいコマンドを記述する。以下は全件検索をするコマンドの例。
    try {
        const testcursor = db.collection("コレクション名").find({})
        await testcursor.forEach((doc)=>{
            //console.log(doc)
        })
    } catch(error) {
        console.log(error)
    }    

  //直前に実行したコマンドのRU消費量を知るためにgetLastRequestStatisticsコマンドを実行する
    const result = await db.command({ getLastRequestStatistics: 1 })
    console.log(`result:${result['CommandName']}`)
    console.log(`requestCharge:${result['RequestCharge']}`)        
    await client.close()
}

getLastRequestStatistics().catch((reason)=>{console.log(reason)})

上記のように計測したいコマンドの実行、getLastRequestStatisticsコマンドの順でコマンドを実行することで特定のコマンドのRU消費量をしることができる。CosmosDBを利用する場合、本番環境で想定外のRUを消費しないために事前に自分のコマンドがどの程度のRUを消費するのかを一つ一つ確認することをおすすめする。

参考ページ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?