rrd4j与mongoDB的整合
来源:互联网 发布:外文检索数据库 编辑:程序博客网 时间:2024/05/23 12:24
rrd4j (2.1.1) 里面有两个类,RrdMongoDBBackend、 RrdMongoDBBackendFactory 的定义是为了支持mongoDB的存储方式。
具体使用方法代码如下:
static String rrdFile = "F:\\test1.rrd"; static String pngFile = "E:\\rrds\\test1.png";
//从mongo中取数据 Mongo mongo = new Mongo( "localhost" , 27017 ); DB db = mongo.getDB("rrd4j"); DBCollection collection = db.getCollection( "test" ); BasicDBObject basicDbObject = new BasicDBObject("time",1); RrdMongoDBBackendFactory factory = new RrdMongoDBBackendFactory(collection); //创建rrd RrdDef rrdDef = new RrdDef(rrdFile,1341991058L,100000L); rrdDef.addArchive(ConsolFun.AVERAGE,0.5,1,300); rrdDef.addArchive(ConsolFun.AVERAGE,0.5,12,300); rrdDef.addArchive(ConsolFun.MIN,0.5,12,300); rrdDef.addArchive(ConsolFun.MAX,0.5,12,300); rrdDef.addDatasource(new DsDef("value", DsType.DERIVE, 100000, 0, 1)); RrdDb rrdDb = new RrdDb(rrdDef, factory);然后便可使用这个rrdDb来绘图了,但是,在首次创建这个rrdDb时,只是将这个mongoDb里面的一个collection与rrdDb关联了,但是具体怎么插入数据
还需要手工的进行,否则rrdDb不知道如何利用这个collection插入数据,因此在首次使用这个rrdDb时需要手工向其中插入数据。
具体代码如下:
DBCursor cursor = collection.find().sort(basicDbObject); while(cursor.hasNext()){ DBObject object = cursor.next(); if(object.get("time")!=null){ Long time = (Long) object.get("time"); Double value = (Double) object.get("value"); Sample sample = rrdDb.createSample(time+1); sample.setValue("value", value); sample.update(); } } rrdDb.close();这样就可以将mongo的数据按照需求插入rrdDb中。注意:rrdDb.close()是必须的,否则里面还是没有数据。下面的代码就是绘图了:
RrdGraphDef gDef = new RrdGraphDef(); gDef.setFilename(pngFile); gDef.setWidth(450); gDef.setHeight(250); gDef.setImageFormat("png"); gDef.setTimeSpan(1341991058L, 1351991058L ); gDef.setTitle("Test RRD4J and MongoDB demo"); gDef.datasource("a", rrdFile, "value", ConsolFun.AVERAGE); gDef.datasource("b", rrdFile, "value", ConsolFun.MIN); gDef.datasource("c", rrdFile, "value", ConsolFun.MAX); gDef.setStep(12*100000L); gDef.area("a", Color.decode("0xb6e4"), "real"); gDef.line("b", Color.decode("0x22e9"), "min"); gDef.line("c", Color.decode("0xee22"), "max"); new RrdGraph(gDef);
终于绘出图来:
之所以是这样,是因为绘图的时候用了
gDef.setStep(12*100000L);意思是按照上面的12个数据合并的Archieve来绘图,如果不加这句代码:
求平均值的时候粒度更细了。
接着上面的话题,我们的rrd的文件路径为:F:\test1.rrd。但是在F盘中却找不到这个文件,当然不是隐藏了,
这个文件到哪儿去了?
更奇怪的是当我将update这段代码注释掉,即将
DBCursor cursor = collection.find().sort(basicDbObject); while(cursor.hasNext()){ DBObject object = cursor.next(); if(object.get("time")!=null){ Long time = (Long) object.get("time"); Double value = (Double) object.get("value"); Sample sample = rrdDb.createSample(time+1); sample.setValue("value", value); sample.update(); } } rrdDb.close();
这段代码注释掉,再次运行整个绘图程序的时候,仍然绘出有数据的图片。仍然是利用这个rrd文件来绘图的,不可能是用其他的文件绘图的,
但是这个文件存到哪儿呢?
(注:rrdDb.close()也要注释掉否则声称没有数据的图片)。因此我怀疑这个文件是存在mongoDb中。
到mongoDB的客户端中测试,发现运行绘图程序前collection里面的数据时1001条,运行之后是1002条,这多一条数据很
可能就是rrd文件。果然:
- rrd4j与mongoDB的整合
- ZendFramework2 与MongoDB的整合
- MongoDB与Java的整合
- 论搜索引擎solr与MongoDB的整合
- rrd4j与collectd结合生成图片
- mongodb与spring整合
- spring+mongodb的整合
- mongodb的java驱动与spring的整合
- mongodb的java驱动与spring的整合
- MongoDB与Spring、Maven整合
- mongodb--与spring整合1
- Mongodb数据库与springmvc整合
- Spring hadoop之一 mongodb与hadoop的整合使用
- MongoDB与Hadoop技术栈的整合应用
- java利用rrd4j做服务监控的图片
- rrd4j的使用详解1--数据保存入rrd文件
- mongodb和magento的整合!
- MongoDB整合Spring的操作
- MYSQL IBDATA
- ipairs和pairs的区别
- GCC 关于声明,定义,调用(使用),类型定义
- 关于1970-1-1 00:00.000的知识
- WakeLock finalized while still held
- rrd4j与mongoDB的整合
- DLNA學習瞭解一
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- android 按键映射***.kl文件中的WAKE和WAKE_DROPPED的定义
- pydbg的安装和编译过程
- JS加载顺序
- java测试并发类
- 解决WebService部署时出现的“未能创建类型...”错误
- Flex 日期计算用法举例