国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mongodb聚合排序的一個(gè)巨坑

這篇具有很好參考價(jià)值的文章主要介紹了mongodb聚合排序的一個(gè)巨坑。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

現(xiàn)象:

mongodb cpu動(dòng)不動(dòng)要100%,如下圖

mongodb聚合排序的一個(gè)巨坑,mongodb,數(shù)據(jù)庫? ? ? ? ? ? ? ?

分析原因:

查看慢日志發(fā)現(xiàn),很多條這樣的查詢,一直未執(zhí)行行完成,占用大量的CPU

[
 {
 $match: {
 "tags.taskId": "64dae0a9deb52d2f9a1bd71e",
 grnty: "minute",
 "tags.type": "task",
 "tags.taskRecordId":
 "64e5c004133738231bc36906",
 },
 },
 {
 $sort: {
 _id: -1,
 },
 },
 {
 $limit: 5,
 },
 {
 $unwind: "$ss",
 },
 {
 $group: {
 _id: "$ss.vs.inputQps",
 qps: {
 $avg: "$ss.vs.inputQps",
 },
 },
 },
]

查看程序里面有一段聚合的代碼

Criteria criteria = new Criteria();
tags.forEach((k,v)->{
    String format = String.format(TAG_FORMAT, k);
    criteria.and(format).is(v);
});
criteria.and(MeasurementEntity.FIELD_GRANULARITY).is(Granularity.GRANULARITY_MINUTE);
MatchOperation match = Aggregation.match(criteria);
SortOperation sort = Aggregation.sort(Sort.by(Sort.Direction.DESC, "_id"));
LimitOperation limit = Aggregation.limit(5);
UnwindOperation unwind = Aggregation.unwind("ss", false);
GroupOperation group = Aggregation.group().avg("ss.vs.inputQps").as("qps");
Aggregation aggregation = Aggregation.newAggregation(match, sort, limit, unwind, group);

看一下這個(gè)代碼也沒有多大問題,但是就是執(zhí)行很慢很慢,于是我explain這條語句,發(fā)現(xiàn)是先執(zhí)行全集合sort 然后再match的,理論上應(yīng)該是先match,然后再執(zhí)行針對(duì)查詢的結(jié)果做sort的

mongodb聚合排序的一個(gè)巨坑,mongodb,數(shù)據(jù)庫

已經(jīng)使用了 $match 和 $sort 操作來篩選和排序文檔。仍然對(duì)整個(gè)集合進(jìn)行了排序?

這可能是由于 MongoDB 的查詢優(yōu)化器在執(zhí)行查詢時(shí)做出的決策。在 MongoDB 中,查詢優(yōu)化器會(huì)嘗試根據(jù)查詢計(jì)劃和索引來優(yōu)化查詢性能。在某些情況下,優(yōu)化器可能會(huì)選擇在 $match 操作之后對(duì)整個(gè)集合進(jìn)行排序,而不僅僅是對(duì) $match 操作篩選出的文檔進(jìn)行排序。這可能是因?yàn)閮?yōu)化器認(rèn)為在整個(gè)集合上進(jìn)行排序的成本更低,或者由于其他優(yōu)化策略。如果你希望只對(duì) $match 操作篩選出的文檔進(jìn)行排序,可以嘗試使用索引來優(yōu)化查詢。確保你的查詢條件和排序字段都有適當(dāng)?shù)乃饕@樣可以幫助優(yōu)化器做出更好的決策,以便只對(duì)篩選結(jié)果進(jìn)行排序。

解決方案

在這種情況下,你可以嘗試創(chuàng)建一個(gè)復(fù)合索引,包含篩選條件和排序字段。例如,你可以創(chuàng)建一個(gè)包含 "tags.taskId","grnty","tags.typ","tags.taskRecordId","_id" 字段的復(fù)合索引。這樣,MongoDB 在執(zhí)行查詢時(shí)可以使用該索引來加速篩選和排序操作。

?總結(jié)

為了只對(duì)篩選結(jié)果進(jìn)行排序,你可以嘗試以下步驟:

  1. 創(chuàng)建一個(gè)復(fù)合索引,包含篩選條件和排序字段。

  2. 確保查詢條件和排序字段在索引中的順序與聚合管道中的順序一致。

  3. 使用 explain() 方法來查看查詢的執(zhí)行計(jì)劃和索引使用情況,以便進(jìn)行優(yōu)化。文章來源地址http://www.zghlxwxcb.cn/news/detail-677225.html

到了這里,關(guān)于mongodb聚合排序的一個(gè)巨坑的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL數(shù)據(jù)庫:數(shù)據(jù)庫的約束以及數(shù)據(jù)的聚合、聯(lián)合查詢

    MySQL數(shù)據(jù)庫:數(shù)據(jù)庫的約束以及數(shù)據(jù)的聚合、聯(lián)合查詢

    目錄 一.關(guān)系模型的簡(jiǎn)要概述 二.數(shù)據(jù)庫的約束? 2.1約束類型 ? ? ? ??2.2NULL約束 2.3?UNIQUE:唯一約束 2.4 默認(rèn)約束 2.5 PRIMARY KEY:主鍵約束 2.6 FOREIGN KEY:外鍵約束 2.7 CHECK約束 三.高效率查詢 3.1高效率查詢的分類 3.2聚合查詢 3.2.1聚合函數(shù) 3.2.2 GROUP BY子句 3.2.3HAVING 3.3.聯(lián)合查詢

    2024年02月10日
    瀏覽(50)
  • MySQL數(shù)據(jù)庫,聚合查詢

    MySQL數(shù)據(jù)庫,聚合查詢

    目錄 1、聚合查詢 1.1聚合函數(shù) 1.1.1count函數(shù) 1.1.2sum函數(shù) 1.1.3avg函數(shù) 1.1.4max函數(shù) 1.1.5min函數(shù) 1.2group by子句 1.3having 聚合函數(shù)查詢又叫函數(shù)查詢,它是通過一些特定的函數(shù)根據(jù)需求來查詢相關(guān)的信息,常見的聚合函數(shù)為: COUNT - 求總數(shù),不包含某字段為null值 SUM - 求和,不包含某字

    2023年04月21日
    瀏覽(34)
  • mongodb 數(shù)據(jù)庫管理(數(shù)據(jù)庫、集合、文檔)

    mongodb 數(shù)據(jù)庫管理(數(shù)據(jù)庫、集合、文檔)

    目錄 一、數(shù)據(jù)庫操作 1、創(chuàng)建數(shù)據(jù)庫 2、刪除數(shù)據(jù)庫 二、集合操作 1、創(chuàng)建集合 2、刪除集合 三、文檔操作 1、創(chuàng)建文檔 2、 插入文檔 3、查看文檔 4、更新文檔 1)update() 方法 2)replace() 方法 創(chuàng)建數(shù)據(jù)庫的語法格式如下: 如果數(shù)據(jù)庫不存在,則創(chuàng)建數(shù)據(jù)庫,否則切換到該數(shù)據(jù)

    2024年02月12日
    瀏覽(33)
  • 【MySql】數(shù)據(jù)庫的聚合查詢

    【MySql】數(shù)據(jù)庫的聚合查詢

    寫在最前面的話 ????????哈嘍,寶子們,今天給大家?guī)淼氖荕ySql數(shù)據(jù)庫的聚合查詢。在前面CRUD章節(jié)我們學(xué)習(xí)了表達(dá)式查詢,表達(dá)式查詢是針對(duì)列和列之間進(jìn)行運(yùn)算的,那么如果想在行和行之間進(jìn)行運(yùn)算,那么就需要用到聚合查詢。 聚合查詢除了包含聚合函數(shù)外(count,

    2024年02月09日
    瀏覽(23)
  • [虛幻引擎 MongoDB Client 插件說明] DTMongoDB MongoDB數(shù)據(jù)庫連接插件,UE藍(lán)圖可以操作MongoDB數(shù)據(jù)庫增刪改查。

    [虛幻引擎 MongoDB Client 插件說明] DTMongoDB MongoDB數(shù)據(jù)庫連接插件,UE藍(lán)圖可以操作MongoDB數(shù)據(jù)庫增刪改查。

    本插件可以在UE里面使用藍(lán)圖操作MongoDB數(shù)據(jù)庫, 對(duì)數(shù)據(jù)庫進(jìn)行查詢,刪除,插入,替換,更新操作。 插件下載地址在文章最后。 Create MongoDB Client - 創(chuàng)建客戶端對(duì)象 創(chuàng)建一個(gè) MongoDB 客戶端對(duì)象。 Connect By Url - 連接到數(shù)據(jù)庫 Url :MongoDB的連接地址。 如 mongoDB://account:password@ip:

    2024年02月14日
    瀏覽(64)
  • MongoDB數(shù)據(jù)庫從入門到精通系列文章之:MongoDB數(shù)據(jù)庫百篇技術(shù)文章匯總

    MongoDB數(shù)據(jù)庫系列文章持續(xù)更新中: 更多數(shù)據(jù)庫內(nèi)容請(qǐng)閱讀博主數(shù)據(jù)庫專欄,數(shù)據(jù)庫專欄涵蓋了Mysql、SQLServer、PostgreSQL、MongoDB、Oracle、Cassandra等數(shù)據(jù)庫 數(shù)據(jù)庫專欄 文章名稱 文章鏈接 數(shù)據(jù)庫安裝部署系列之:部署Mongodb5.0.6高可用集群詳細(xì)步驟 數(shù)據(jù)庫安裝部署系列之:部署M

    2024年02月11日
    瀏覽(54)
  • 探索存證、溯源類數(shù)據(jù)庫最優(yōu)解,聚合數(shù)據(jù)區(qū)塊鏈數(shù)據(jù)庫AnchorDB發(fā)布

    探索存證、溯源類數(shù)據(jù)庫最優(yōu)解,聚合數(shù)據(jù)區(qū)塊鏈數(shù)據(jù)庫AnchorDB發(fā)布

    近日,聚合數(shù)據(jù)區(qū)塊鏈數(shù)據(jù)庫AnchorDB 正式對(duì)外發(fā)布,這是企業(yè)對(duì)于數(shù)字化技術(shù)應(yīng)用的又一次探索,產(chǎn)品的發(fā)布,將為存證、溯源類場(chǎng)景提供更高效、易用的數(shù)據(jù)庫解決方案,并且進(jìn)一步豐富聚合數(shù)據(jù)的數(shù)字化產(chǎn)品矩陣。 作為一款具有區(qū)塊鏈不可篡改特性的輕量級(jí)存證數(shù)據(jù)庫,

    2024年02月11日
    瀏覽(22)
  • redis數(shù)據(jù)庫和MongoDB數(shù)據(jù)庫基本操作

    (1) 設(shè)置鍵值 (2) 讀取鍵值 (3) 數(shù)值類型自增1 (4) 數(shù)值類型自減1 (5) 查看值的長(zhǎng)度 (1)對(duì)列表city插入元素:Shanghai Suzhou Hangzhou (2)將列表city里的頭部的元素移除 (3) 對(duì)一個(gè)已存在的列表插入新元素 (4)查看list的值長(zhǎng)度 (1) 設(shè)置一個(gè)hash表,order表里包括的

    2024年02月16日
    瀏覽(33)
  • MongoDb數(shù)據(jù)庫

    1.顯示所有數(shù)據(jù)庫: show dbs 2.切換到指定數(shù)據(jù)庫,如果沒有則自動(dòng)創(chuàng)建數(shù)據(jù)庫 use databaseName 3.顯示當(dāng)前所在數(shù)據(jù)庫 db 4.刪除當(dāng)前數(shù)據(jù)庫 use?庫名 db.dropDatabase() 1.創(chuàng)建集合 db.createCollection(\\\'集合名稱\\\') 2.顯示當(dāng)前數(shù)據(jù)庫中所有集合 show colletions? 3.刪除某個(gè)集合 db.xxx.drop(); 4.重命名集

    2024年02月04日
    瀏覽(64)
  • Mongodb連接數(shù)據(jù)庫

    Mongodb連接數(shù)據(jù)庫

    npm init ??npm i mongoose ?const mongoose=require(\\\"mongoose\\\") mongoose.connect(\\\"mongodb://127.0.0.1:27017/user\\\") 說明:mongodb是協(xié)議,user是數(shù)據(jù)庫,如果沒有會(huì)自動(dòng)創(chuàng)建user數(shù)據(jù)庫?。 node 文件名 ? ? mongoose.disconnect()

    2024年02月15日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包