成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術文章
文章詳情頁

java - mongodb分片集群下,count和聚合統計問題

瀏覽:159日期:2024-01-18 14:17:41

問題描述

在mongodb分片集群下,直接用count統計會不準確,用聚合統計則可以

java - mongodb分片集群下,count和聚合統計問題

但是在java或mongodb客戶端(非命令行)調用mongodb,使用聚合統計時,統計的結果和count同樣不準確,請問大神們,我的代碼如下,請大神指點,找不到原因!

@Testpublic void testCount() throws Exception { DynamicSqlParameter dsp = new DynamicSqlParameter(); long sT = System.currentTimeMillis(); MongoDatasource mongoDatasource = MongoDatasource.getInstance(mongoService.getDatasource()); DBCollection dbCollection = mongoDatasource.getDB().getCollection('dayFlow'); List arrayList = new ArrayList<>(); DBObject dbObject1 = new BasicDBObject(); dbObject1.put('usedDayFlow', 2); DBObject dbObject2 = new BasicDBObject(); dbObject2.put('_id', null); dbObject2.put('count', new BasicDBObject('$sum', 1)); arrayList.add(new BasicDBObject('$match', dbObject1)); arrayList.add(new BasicDBObject('$group', dbObject2)); System.out.println(JSON.serialize(arrayList)); AggregationOutput size = dbCollection.aggregate(arrayList); System.out.println(size.results()); System.out.println('運行時間:' + ((System.currentTimeMillis() - sT) /1000) + 's');}執行結果:

[ { '$match' : { 'usedDayFlow' : 2}} , { '$group' : { '_id' : null , 'count' : { '$sum' : 1}}}]

[{ '_id' : null , 'count' : 1002223}]

該統計結果比實際數據量要多一些,請教大神,對于分片集群的聚合統計要如何操作?

問題解答

回答1: 該問題已經解決,使用的是最新驅動mongo-java-driver-3.4.0,通過下面的方法可以在分片集群模式下,準確的統計到記錄數量,感謝大家的相助!mongo shell >> db.collection.aggregate([{$match:{categories:'Bakery'},{$group:{'_id':null,'count':{$sum:1}}}}])

public long getCount() {String user = '用戶名';String database = 'admin';String password = '密碼';MongoCredential credential = MongoCredential.createCredential(user,database, password.toCharArray());MongoClientOptions options = MongoClientOptions.builder().connectionsPerHost(10).threadsAllowedToBlockForConnectionMultiplier(10).socketTimeout(20000).connectTimeout(15000).maxWaitTime(50000).build();MongoClient mongoClient = new MongoClient(new ServerAddress('IP地址', '端口'), Arrays.asList(credential), options);MongoDatabase mongoDatabase = mongoClient.getDatabase('數據庫');MongoCollection<Document> collection = mongoDatabase.getCollection('數據表');final long[] count = new long[1];Block<Document> printBlock = new Block<Document>() { @Override public void apply(final Document document) { count[0] = (long) document.get('count'); }};Bson bson = Filters.eq('categories', 'Bakery');collection.aggregate(Arrays.asList(Aggregates.match(bson),Aggregates.group(null, Accumulators.sum('count', 1L)))).forEach(printBlock);return count[0];}回答2:

能否補充一些評論中的信息。多謝!

將評論的內容轉發在這里,方便查看:

1、count和aggregate的不同:在mongoDB中,count和aggregate是在兩支不同的程序中實現的,aggregate的實現是考慮到了shard的環境的,所以官方文檔是推薦使用aggregate來進行shard環境下的count。

2、MongoDB shell下使用aggregate和使用Java MongoDB驅動使用aggregate來進行count,結果應該是一樣的,因為兩者都是使用的aggregate。

您提到Issue大概是MongoDB shell和Java MongoDB驅動進行count的結果不一致。

這種不一致,我覺得可能是:

1)比較的過程有沒有紕漏;2)所用的Java MongoDB驅動是否有紕漏。

供參考。

Love MongoDB! Have Fun!

今晚8點,MongoDB中文社區大神在線講座,請大家踴躍參與;此大神常駐本版哦!

請戳此鏈接。

標簽: java
主站蜘蛛池模板: 国产精品久久久久久一区二区三区 | 男人天堂欧美 | 免费视频日本 | 九九夜色 | 日本精品视频一视频高清 | 欧美曰批人成在线观看 | 一级做a爰片欧美一区 | 久久污| 91精品国产91久久久久久青草 | 免费观看的毛片手机视频 | 国产精品久久久久免费a∨ 国产精品久久久久免费视频 | 中文字幕 日韩在线 | 亚洲男女免费视频 | 日韩精品久久一区二区三区 | 伊人波多野结衣 | 日本成人在线免费观看 | 国产日韩一区二区三区在线播放 | 久久综合久久美利坚合众国 | 男女乱淫真视频免费一级毛片 | 国产亚洲精品一区二区在线播放 | 日韩国产欧美在线观看一区二区 | 另类亚洲视频 | 农村寡妇野外情一级毛片 | 日韩一级视频在线观看播放 | 成人在线网 | 黄色影视频 | 日韩视频精品在线 | 亚洲区精品 | 荡女妇边被c边呻吟久久 | 亚洲欧洲日韩综合色天使不卡 | 国产成人永久免费视频 | 美女美女大片黄a大片 | 国产精品久久一区一区 | 精品在线观看免费 | 久久大胆视频 | 99je全部都是精品视频在线 | 久草草视频在线观看免费高清 | 一个人的视频日本免费 | 国产一级一级 | 美国一级片免费 | 精品国产免费久久久久久 |