欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

mongodb分頁(yè)優(yōu)化

系統(tǒng) 1752 0

現(xiàn)在參與一個(gè)項(xiàng)目的開(kāi)發(fā),需要用java查詢mongodb數(shù)據(jù)庫(kù),在這里分頁(yè)用的skip sort 和limit結(jié)合,查詢語(yǔ)句如下(已經(jīng)在相關(guān)字段建立索引)

?

    DBCursor cursor = collection.find(query).skip((skip - 1) * PAGESIZE).sort(new BasicDBObject("starttime", -1)).limit(PAGESIZE);//PAGESIZE=10
  


由于分頁(yè),這里需獲取符合條件的總數(shù) 語(yǔ)句如下

?

int count = cursor.count()

根據(jù)count和PAGESIZE的兩個(gè)數(shù)據(jù)來(lái)分頁(yè)。由于帶條件的count()方法執(zhí)行起來(lái)特別耗時(shí),我用二百萬(wàn)的數(shù)據(jù)測(cè)試了一下,cursor.count()就耗時(shí)6.5s多,mongodb權(quán)威指南這不書也指出count()方法隨著查詢條件越多,執(zhí)行速度越慢。

現(xiàn)在問(wèn)題出來(lái)了,現(xiàn)在模擬一下操作

1)點(diǎn)擊查詢執(zhí)行查詢方法queryLists()(這是我代碼中的方法名)并執(zhí)行耗時(shí)的count()方法獲取符合條件的數(shù)量,進(jìn)行分頁(yè)

2)點(diǎn)擊下一頁(yè)或者點(diǎn)擊某一頁(yè)時(shí),同樣執(zhí)行queryLists()方法,同樣也需要執(zhí)行該方法體中的count()方法,這樣count方法又耗去一部分時(shí)間

顯然用戶體驗(yàn)不是很好,每次點(diǎn)擊查詢時(shí)就很耗時(shí)了,點(diǎn)擊下一頁(yè)或者某一頁(yè)時(shí)同樣還得等待,這樣的話誰(shuí)都受不了


下面是我的優(yōu)化方案

1)設(shè)置一個(gè)變量clickQuery,當(dāng)用戶點(diǎn)擊查詢按鈕時(shí) clickQuer賦值為0.當(dāng)點(diǎn)擊下一頁(yè)或者上一頁(yè)或者跳轉(zhuǎn)頁(yè)面時(shí)clickQuery=1.

???? 也就是說(shuō)用clickQuery來(lái)判斷用戶是否點(diǎn)擊查詢按鈕

2)既然點(diǎn)擊查詢時(shí)已經(jīng)獲取了count,何必再點(diǎn)擊下一頁(yè)時(shí)在執(zhí)行cursor.count()方法呢?所以我的做法就是把點(diǎn)擊查詢的時(shí)候獲取的count保存起來(lái)

??? 當(dāng)用戶點(diǎn)擊下一頁(yè)的時(shí)候,直接讀取已經(jīng)保存的count,而不是執(zhí)行耗時(shí)的cursor.count()方法


方法優(yōu)點(diǎn):

????? 點(diǎn)擊下一頁(yè)或者某一頁(yè)或者跳轉(zhuǎn)頁(yè)面時(shí),由于已經(jīng)保存過(guò)查詢時(shí)的count,所以速度很快

方法缺點(diǎn):

??? 用戶點(diǎn)擊查詢按鈕時(shí),因?yàn)橐獔?zhí)行cursor.count方法,所以還是很慢。


代碼實(shí)現(xiàn)如下

?

    int count = 0;

if (click.equals("0")) {// 如果點(diǎn)擊查詢

    count = cursor.count();//獲取符合條件的數(shù)量

    // 序列化,保存count2

   Seria.serializable(new BtnClick(count), Seria.ACTIVITY_COUNT_FILE);

   System.out.println("點(diǎn)擊查詢");//Seria是我自己定義的一個(gè)類,來(lái)序列化數(shù)據(jù)

} else {// 如果點(diǎn)擊下一頁(yè)或者跳轉(zhuǎn)頁(yè)

  // 讀取序列化信息

  BtnClick btnClick = Seria.reverseSer(Seria.ACTIVITY_COUNT_FILE);

  count= btnClick.getCount();

   System.out.println("點(diǎn)擊下一頁(yè)");

}

///分頁(yè)處理略


  


?

    	/**

	 * 序列化

	 */

	public static void serializable(BtnClick btnClick,String file) {

		try {

			

			File serFile = new File(file);

			// 判斷序列化文件是否存在, 不存在則創(chuàng)建

			if (!serFile.exists())

				serFile.createNewFile();

			//打開(kāi)serFile的輸出流

			FileOutputStream fos = new FileOutputStream(serFile);

			ObjectOutputStream oos = new ObjectOutputStream(fos);

			// 將上下文對(duì)象寫到序列化文件中

			oos.writeObject(btnClick);

			oos.close();

			fos.close();

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	

	/**

	 * 反序列化

	 */

	public static BtnClick reverseSer(String file) {

		File serFile = new File(file);

		BtnClick btnClick = null;

		if (!serFile.exists())

			return null;

		try {

			// 得到文件輸入流

			FileInputStream fis = new FileInputStream(serFile);

			ObjectInputStream ois = new ObjectInputStream(fis);

			// 設(shè)置ContextHolder的DownloadContext

		    btnClick = (BtnClick) ois.readObject();

			ois.close();

			fis.close();

		} catch (Exception e) {

			e.printStackTrace();

		}

	

		return btnClick;

	}
  


?

我的問(wèn)題:因?yàn)橛胹kip方法查詢大量數(shù)據(jù)的時(shí)候速度慢,不知道有什么方法可以優(yōu)化一下,mongodb權(quán)威指南的那個(gè)方法,只適合一頁(yè)一頁(yè)的調(diào)整而不適合跨頁(yè)跳轉(zhuǎn),所以大家如果有好的查詢方案,可以和小弟在此說(shuō)一下,謝謝。

?

同樣以上方法如有不當(dāng)之處,歡迎批評(píng)指正

?

?

mongodb分頁(yè)優(yōu)化


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日韩美在线| 视频一区二区三区免费观看 | 久久精品亚洲精品国产欧美kt∨ | 午夜 在线播放 | 99爱在线精品视频免费观看9 | 亚洲一区二区三区深夜天堂 | 久久久无码精品亚洲日韩按摩 | 欧美aav| 成人亚洲一区二区色情无码潘金莲 | 国产一区高清 | 亚洲国产国产综合一区首页 | 一级黄a| 欧美日韩一区二区视频在线观看 | 三级国产短视频在线观看 | 日韩福利在线 | 五月婷婷综合激情网 | 日本高清在线看片免费视频 | 欧美日韩精品国产一区二区 | 人人人人干 | 色播在线播放 | 国产欧美一区二区视频 | 精品一卡2卡三卡四卡二卡 欧美不卡一区二区三区在线观看 | av在线在线 | 成人 在线 | 欧美日韩一区二区在线 | 国产麻豆精品 | 日日日bbb | 免费欧美黄色 | 99精品国产高清一区二区麻豆 | 亚洲国产日韩欧美综合久久 | 日韩在线视频观看 | 精品一区二区高清在线观看 | 国产人成精品 | 爱草在线 | 日韩大片在线永久观看视频网站免费 | 国产乱码精品1区2区3区 | 日本在线亚州精品视频在线 | 毛片网站在线 | 人人干人人模 | 今井夏帆av一区二区 | 综合欧美一区二区三区 |