开发整理-sequoiaDB Java实现统计排名sql

          最近使用 sequoiaDB数据库进行开发,发现它对sql的支持还是比较全面的,包括统计sql也可以实现,主要就是它的aggregate函数,支持sql的各种统计函数,我应用到的主要是统计topN排名,以某个字段分组后统计各个组记录数得出topN排名。

          使用java驱动,对应的shell比较简洁,就是转换成java代码,传递的参数虽然也就是shell参数的json结构,但是涉及到嵌套,需要一点点拼凑出一个JSON格式的List对象。下面的代码实现的是一个统计sql,语句为:select count(*) as destIpTotal ,destIpTotal from info group by destIp limit topN。对应的java实现代码如下:

public void aggregateSourceLog(){
		System.out.println("start :"+new Date());
		Sequoiadb sdb = DbConnectionPool.getConnection();
		CollectionSpace db  = sdb.getCollectionSpace("MySpace");
		DBCollection collection = db.getCollection("info");
		BSONObject match = new BasicBSONObject();
		match.put("source_ip", "192.168.1.109");
		BSONObject $matcher = new BasicBSONObject();
		$matcher.put("$match", match);
		
		BSONObject $group = new BasicBSONObject();
		BSONObject group = new BasicBSONObject();
		BSONObject $count = new BasicBSONObject();
		$count.put("$count", "$src_ip");
		group.put("sourceTotal", $count);
		group.put("_id", "$src_ip");
		$group.put("$group", group);
		
		BSONObject $limit = new BasicBSONObject();
		$limit.put("$limit", 5);
		
		BSONObject $sort = new BasicBSONObject();
		BSONObject sort = new BasicBSONObject();
		sort.put("sourceTotal", -1);
		$sort.put("$sort", sort);
		
		BSONObject $project = new BasicBSONObject();
		BSONObject project = new BasicBSONObject();
		project.put("sourceTotal", 1);
		project.put("src_ip", 1);
		$project.put("$project", project);
		
		List params = new ArrayList();
		params.add($matcher);
		params.add($group);
		params.add($limit);
		params.add($sort);
		params.add($project);
		List result = new ArrayList();
		DBCursor cursor = collection.aggregate(params);
		while (cursor.hasNext()) {
			BSONObject record = cursor.getNext();
			result.add(record);
		}
		
		for(BSONObject o:result){
			System.out.println(o);
		}
		
		DbConnectionPool.free(sdb);
		System.out.println("end :"+new Date());
	}
        seqouiaDB的aggregate参考文档:http://www.sequoiadb.com/cn/index.php?a=index&m=Files&cat_id=1432190936&edition_id=200  主要就是对着shell条件,转换成BSONObject对象列表的过程,尽管多,其实并不复杂,跟aggregate一起使用需要指定的属性就是最后params放入的那些对象:$matcher,$group,$limit,$sort,$project,利用这些元素就可以完成sql统计了。

你可能感兴趣的:(项目开发)