web-dev-qa-db-ja.com

Azure Cosmos DB:単純なカウントクエリの「リクエストレートが大きい」

Ruby mongoドライバー を介してアクセスするMongoアダプターでCosmos DBを使用しています。現在、データベースには約2.5Mのレコードがあります。

レコードの合計量を照会する場合、何の問題もありません。

2.2.5 :011 > mongo_collection.count
D, [2017-11-24T11:52:39.796716 #9792] DEBUG -- : MONGODB | XXX.documents.Azure.com:10255 | admin.count | STARTED | {"count"=>"xp_events", "query"=>{}}
D, [2017-11-24T11:52:39.954645 #9792] DEBUG -- : MONGODB | XXX.documents.Azure.com:10255 | admin.count | SUCCEEDED | 0.15778699999999998s
 => 2565825

しかし、単純なwhereに基づいて見つかったレコードの数をカウントしようとすると、Request rate is largeエラー:

2.2.5 :014 > mongo_collection.find(some_field: 'some_value').count
D, [2017-11-24T11:56:11.926812 #9792] DEBUG -- : MONGODB | XXX.documents.Azure.com:10255 | admin.count | STARTED | {"count"=>"some_table", "query"=>{"some_field"=>"some_value"}}
D, [2017-11-24T11:56:24.629659 #9792] DEBUG -- : MONGODB | XXX.documents.Azure.com:10255 | admin.count | FAILED | Message: {"Errors":["Request rate is large"]}
ActivityId: 0000-0000-0000-000000000000, Request URI: /apps/XXX/services/XXX/partitions/XXX/replicas/XXX/, RequestStats: , SDK: Microsoft.Azure.Documents.Common/1.17.101.1 (16500), Message: {"Errors":["Request rate is large"]}

エラーのしくみは理解していますが、このようなクエリでRU/s(最大値10,000に設定)を最大化できる方法がわかりません。

何かアドバイスをいただければ幸いです!

13
bramj

エラーは仕様によるものであり、アプリケーションがDocumentDBサービスに、コレクション層の「予約済みスループット」レベルよりも高いレートで要求を送信していることを意味します。

解決策は、しばらくしてから同じリクエストを再試行することです。その他の解決策については、これをチェックしてください 記事

6
Kapil Barad

接続の制限を引き上げる必要があります。デフォルトでは1000ですが、3000のままにしておくと失敗しなくなりました。

0
Luckio

今日これに遭遇しました。他の人が示唆するように、Azureサービスは、あなたが支払う意思のある価格によって規制されています。私は少しだけお金がかかる簡単な答えを見つけました。

Azureにログインし、Cosmos DBアイテムを見つけ、データベースを開いてコレクションを見つけました。各コレクションには、「スケール」のオプションがあります。そこでは、アップロードの制限を以前の設定1,000から、その1つのコレクションの最大10,000に引き上げました。プログラムを実行したところ、すべてのドキュメントが約5分でスムーズに更新されました。その後、Azureで制限を1,000に戻しました。

1日の価格は約10分間で$ 1.20から$ 19.20に急上昇しました。

アップロードを再実行するためのすべての手順を解読するのに1〜2時間かかり、その後コレクションが正しいことを確認するのにさらに数時間かかります。

0
pauljohn32