Mongodb腳本解決復(fù)雜問題的計(jì)算能力有限,直接使用時(shí)較為吃力。很多情況下需要將數(shù)據(jù)讀出后在主程序中進(jìn)一步完成運(yùn)算,而在Java等高級(jí)語言中編寫這類集合式運(yùn)算也比較麻煩。這時(shí)可以用集算器esProc來輔助,這里通過一個(gè)例子來說明。
為札達(dá)等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及札達(dá)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、札達(dá)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!Mongodb中有一個(gè)test集合如下:
>db.test.find({},{"_id":0})
{"value" : NumberLong(112937552) }
{"value" : NumberLong(715634640) }
{"value" : NumberLong(487229712) }
{"value" : NumberLong(79198330) }
{"value" : NumberLong(440998943) }
{"value" : NumberLong(93148782) }
{"value" : NumberLong(553008873) }
{"value" : NumberLong(336369168) }
{"value" : NumberLong(369669461) }
…
具體的:test集合包含多個(gè)value,每個(gè)value是一個(gè)數(shù)字串。每個(gè)數(shù)字串都要和另外所有的數(shù)字串比較,找出每個(gè)數(shù)字串的大相同數(shù)和大不同數(shù)。如果第1行和第n行都含有數(shù)字1,就算相同數(shù)有1個(gè),如果第1行有1第n行沒有,就算不同數(shù)有1個(gè)。
集算器代碼如下:
A1:連接mongodb,ip和端口號(hào)是localhost:27017,數(shù)據(jù)庫(kù)是test,用戶名和密碼都是test。
A2:使用find函數(shù)從mongodb中取數(shù),形成游標(biāo)。集合是test,過濾條件是空,鍵_id不取出。可以看出,esProc在find函數(shù)中采用了和mongdb的find語句一樣的參數(shù)格式。esProc的游標(biāo)支持分批讀取和處理數(shù)據(jù),可以避免數(shù)據(jù)量過大,內(nèi)存出現(xiàn)溢出的情況。這里因?yàn)閿?shù)據(jù)量不大,所以用fetch出游標(biāo)的所有記錄。
A3:在A2的基礎(chǔ)上增加兩列,用來存放大相同數(shù)和大不同數(shù)。同時(shí)把value轉(zhuǎn)成字符串。
A4:針對(duì)A3集合循環(huán),循環(huán)體是B4到D10。
B4:取當(dāng)前循環(huán)的value。
C4:利用函數(shù)將value分拆成單個(gè)字符組成的序列,去掉重復(fù)的值。
B5:對(duì)A3再進(jìn)行一次內(nèi)層循環(huán)。循環(huán)體是C6到D10。
C5:如果內(nèi)層循環(huán)的循環(huán)位置和外層當(dāng)前位置的相等,也就是說是同一個(gè)value的話,就跳過本次內(nèi)層循環(huán),進(jìn)行下一次內(nèi)層循環(huán)。
C6:取得內(nèi)層循環(huán)的value。
C7:定義兩個(gè)變量same和diff,分別存放本次比較的相同數(shù)和不同數(shù),初始值為0。
C8:利用循環(huán)函數(shù),在內(nèi)層循環(huán)的value中逐個(gè)查找外層循環(huán)的value分拆的序列數(shù)值。如果能找到,則same自加1,否則diff自加1。
C9、C10:將same和diff和A4中的same和diff比較,將較大的重新賦值給A4中的same和diff。
運(yùn)行結(jié)果是:
需要說明的是:esProc并不包含mongodb的java驅(qū)動(dòng)包。用esProc來訪問mongodb,必須提前將mongodb的java驅(qū)動(dòng)包(要求2.12.2或以上版,如mongo-java-driver-2.12.2.jar)放到[esProc安裝目錄]\common\jdbc中。
集算器esProc協(xié)助mongodb計(jì)算的腳本很容易集成到j(luò)ava中,只要增加一行A11,寫成result A3即可向java輸出resultset形式的結(jié)果,具體的代碼參考esProc教程。同樣,用java調(diào)用esProc訪問mongodb也必須將mongdb的java驅(qū)動(dòng)包放到j(luò)ava程序的classpath中。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
本文標(biāo)題:集算器協(xié)助MongoDB計(jì)算之?dāng)?shù)位比較-創(chuàng)新互聯(lián)
文章地址:http://jinyejixie.com/article28/coiecp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、服務(wù)器托管、建站公司、虛擬主機(jī)、面包屑導(dǎo)航、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容