J'utilise Cosmos DB avec l'adaptateur Mongo, y accédant via le pilote Ruby mongo . Actuellement, il y a environ 2,5 millions d'enregistrements dans la base de données.
Lorsque vous interrogez le nombre total d'enregistrements, il n'y a aucun problème:
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
Mais lorsque j'essaie de compter la quantité d'enregistrements trouvés sur la base d'un simple où, je rencontre le Request rate is large
Erreur:
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"]}
Je comprends le fonctionnement de l'erreur, mais je ne comprends pas comment une telle requête peut maximiser la RU/s (fixée à une valeur maximale de 10 000), car le champ que je recherche est censé être indexé (automatiquement).
Tout avis serait grandement apprécié!
L'erreur est de par leur conception, cela signifie qu'une application envoie une demande au service DocumentDB à un taux qui est supérieur au niveau de "débit réservé" pour un niveau de collecte.
La solution consiste à réessayer la même demande après un certain temps. Pour plus de solutions, vérifiez ceci article .
Vous devez augmenter la limite de connexions. Par défaut, il est à 1000, je l'ai laissé à 3000 et il a cessé d'échouer.
J'ai rencontré ça aujourd'hui. Comme d'autres le suggèrent, les services Azure sont régis par le prix que vous êtes prêt à payer. J'ai trouvé une réponse simple qui coûte un peu plus cher.
Je me suis connecté à Azure, j'ai trouvé l'élément Cosmos DB, ouvert la base de données et trouvé la collection. Chaque collection a une option pour "Scale". Là-bas, j'ai augmenté la limite de téléchargement du paramètre précédent de 1 000 au maximum de 10 000 pour cette collection. J'ai exécuté le programme, tous les documents ont été mis à jour sans problème en environ 5 minutes, puis dans Azure, j'ai repoussé la limite à 1 000.
Le prix quotidien est passé de 1,20 $ à 19,20 $ pendant environ 10 minutes, sinon tout va bien.
Il me faudrait une heure ou deux pour déchiffrer toutes les étapes pour relancer les téléchargements et encore quelques heures pour m'assurer que la collection est correcte après cela.