cosmos DB如何计算请求费用(即每种操作类型的总请求费用,以每秒请求单位(RU / s)为单位)。
我运行了一个脚本,该脚本每秒对一个示例JSON进行增补,并发现了怪异的指标,其中我的请求费用超过1.5K
当我在COSMOS DB的MONGO SHELL上运行相同的查询时,它向我返回了 2.31 RUs
的RUdb.cdrs.update({record_key:“ 2088918ecc406535693a48a4f57viren”},{“ call_date”:“ 2020-03-20T23:00:00Z”,“ record_key”:“ 2088918ecc406535693a48a4f57viren”,“ cdr_filename”:“ NVX00322_alliance。 .zip“,” record_number“:1,” source“:” Cdr_Alliance10“,” callid“:” 2296J25CQ“,” switch“:” 10.0.1.11:4000","start_time_utc":"2020-03-20T23:15 :13Z“,” end_time_utc“:” 2020-03-20T23:15:19Z“,” call_duration_seconds“:6,” release_code“:” 200“,” from_number“:” 3205586312“,” to_number“:” 8774400565“, “ bill_to_number”:“ 2221738323”,“ raw_cdr”:{“ authCode”:“”,“ calling_card_no”:“”,“ chargeNumber”:“ 2221738323”,“ cost”:“ 0000000013”,“ countryIndex”:“ 0” ,“ dialAround”:“ 0”,“ duration”:“ 000001”,“ infoDigits”:“ 00”,“ messageId”:“ 2296J25CQ”,“ origCity”:“ WEATHER”,“ origLata”:“ 626”,“ origNo“:” 3205586312“,” origNumber“:” 3205586312“,” origOcn“:” 1123“,” origState“:” MN“,” payComp“:” 0“,” service“:” 8“,” startDate“ :“ 032020”,“ startTime”:“ 231513”,“ termCity”:“ D TOLLFREE”,“ termLata”:“ 000”,“ termNumber”:“ 8774400565”,“ termOcn”:“ 00 00“,” termState“:” NJ“,” term_no“:” 2221738323“,” term_type“:” 0“}},{upsert:true})
Operation consumed 2.31 RUs
如果我了解Cosmos(在COSMOS中也提到),并且一次又一次地执行相同的操作,则不会收取不同的费用。
那么
2.31 * 60 = 120 RU
120 RU /分钟仍然不能解释COSMOS DB Metric显示的1.5K +请求费用(如下图所示)。
cat NVX00322_alliance.cdr-1.json | wc -l
1
在这里插入到cosmos DB的结果代码在这里
func main() {
handler, err := os.OpenFile("NVX00322_alliance.cdr-1.json", os.O_RDONLY, os.ModePerm)
if err != nil {
panic(err)
}
var data map[string]interface{}
if err := json.NewDecoder(handler).Decode(&data); err != nil {
panic(err)
}
ticker := time.NewTicker(1 * time.Second)
for {
select {
case <-ticker.C:
if err := mongoUpload(data); err != nil {
fmt.Println(err)
}
}
}
}
func mongoUpload(data map[string]interface{}) error {
fmt.Printf("\r %d", uploadCount)
uploadCount++
_, err := collection.Upsert(bson.M{"record_key": data["record_key"]}, data)
if err != nil {
if (err == io.EOF) || (strings.Contains(err.Error(), "read: connection reset by peer")) {
mongoSetup()
}
return err
}
return nil
}
为收集分配的RU为MAX RU / s 21000,并且吞吐量设置为“自动缩放”。
分区键为call_date
,但在检查集合(此特定集合)时,给定集合和DB中的文档总数不超过20个。