RRD_rrd4j的使用说明
本文参考:
rrd4j的介绍和使用:http://blog.chinaunix.net/uid-29962463-id-4568454.html
rrdtool的介绍和使用:http://www.cnblogs.com/smallcoderhujin/p/3796599.html
rrdtool官网:http://oss.oetiker.ch/rrdtool/doc/rrdtool.en.html
rrd4j的maven依赖:
<dependency><groupId>org.rrd4j</groupId><artifactId>rrd4j</artifactId><version>3.1</version>
</dependency>
RRD说明和注意事项
1.RRD数据库是一种环形数据库,使用rrd4j存储只能存储double类型的值
2.RRD数据库的存储是基于时间的,比如时间间隔是5分钟,在9点0分和9点5分可以存储,如果9点3分传入一个值而指针又指在9点0分的时候,
这个值会记录在9点0分(指针看3),如果指针指在9点5分,这个插入的值失效。
3.RRD数据库创建需要一个时间,这个时间可以自己指定,也可以使用默认时间(默认时间是当前时间-10秒,默认步长是5分钟),
之后RRD数据库会有一个类似指针的标记,创建数据库时指针会指在初始时间点上。这时候如果插入数据会有以下几种情况:
1.如果我们插入的数据的时间和指针所指的时间一致,那么就会顺利插入到数据中。2.如果我们插入的数据的时间在指针所指的时间之后,比如指针指在9点0分,我们插入的数据在9点30分,那么这个时候的插入是失效的(即9点30分的值还是之前的值),但是会将指针拨到9点35分。(因为更新了一次,所以指针向下移动了一位,这样之后在9点35分插入的值就可以顺利入库了。)3.指针只能前移,不能向回移动,也就是4所说的,除非指针循环了一圈,不然库中的数据更改不了。
4.向数据库中插入数据后,指针会向下移动,这时如果想更改指针之前的值无效,指针不会向回移动。
Demo
1.rrd数据库的创建
//全局常量
private static final String file_path = "D:/demo.rrd"; public String createRrd() throws Exception{//设置创建时间(unix时间戳)long start = 1494378000L;//创建RrdDef,每300s接受一个新数据(unix时间戳),如果不传入创建时间,默认为当前时间的前10秒RrdDef rrdDef = new RrdDef(file_path, start, 300);//添加数据源,"score"相当于数据源名称,第二个参数为数据源类型,第三个参数为心跳,一般设置为step的两倍rrdDef.addDatasource("score", DsType.GAUGE, 600, 0, Double.NaN);//一个数据库可以添加多个数据源rrdDef.addDatasource("class", DsType.GAUGE, 600, 0, Double.NaN);//创建RRA档,AVERAGE是取平均值,xff为0.5(不用管),steps表示几个PDP合成一个CDP,rows表示数据库一共有多少列数据,RRA档在绘图的时候会用到rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 1, 30*24*12);//环形数据库一共存储一个月的数据//可以创建多个RRA,比如我要记录5个人成绩的平均分和总分,可以如下:rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 5, 30*24*12);rrdDef.addArchive(ConsolFun.TOTAL, 0.5, 5, 30*24*12);//根据数据库的定义创建rrd数据库RrdDb db = new RrdDb(rrdDef);//数据库需要关闭db.close();return null;
}
2.rrd数据库的数据添加
public String addOrUpdateRrdResource(Student student) throws Exception {RrdDb db = new RrdDb(file_path);//创建样本Sample sample = db.createSample(); sample.setTime(student.getTime()); //设置样本的创建时间sample.setValues("score", student.getScore()); //添加值sample.setValues("class", student.getClass());//保存至数据库中sample.update();//数据库必须关闭,否则样本无法存入到数据库中db.close();return null;
}
3.rrd数据库的数据查询
public List<Student> selectRrdResource(long startTime, long endTime) throws Exception {RrdDb db = new RrdDb(file_path);//设置查询条件,这个AVERAGE必须和创建RRA档的类型对上,不然会出错FetchRequest request = db.createFetchRequest(ConsolFun.AVERAGE, startTime/1000, endTime/1000);FetchData fetchData = request.fetchData();List<Student> stuList = new ArrayList<Student>();double[] scoreArr = fetchData.getValues("score"); //获取分数double[] classArr = fetchData.getValues("class"); //获取班级编号try {for (int i = 0; i < scoreArr.length; i++) {Student stu = new Student();stu.setScore(scoreArr[i]);stu.setClass(classArr[i]);stuList.add(stu); }} catch (Exception e) {e.printStackTrace();}finally {try {db.close();} catch (IOException e) {}}return stuList;
}
4.绘制图表
public String showRrdGraph(String imgPath, long startTime, long endTime) throws Exception {RrdGraphDef gDef = new RrdGraphDef();gDef.setWidth(600);gDef.setHeight(400);gDef.setFilename(imgPath); //设置图片的保存路径gDef.setStartTime(startTime/1000);gDef.setEndTime(endTime/1000);gDef.setTitle("Student-Score-Class");gDef.setImageFormat("png"); //设置图片格式,可以设置为png,pdf等//从数据库中获取数据:Score表示你取的数据的别名,file_path:数据库路径,score:数据源,AVERAGE:类型gDef.datasource("Score", file_path, "score", ConsolFun.AVERAGE);gDef.datasource("Class", file_path, "class", ConsolFun.AVERAGE);//定义线状图:Score代表上一步你取的别名,Green是颜色,score表示在图片上的显示的这条线的名称gDef.line("Score", Color.GREEN, "score");gDef.line("Class", Color.BLACK, "class"); //rrd4j提供了定义面积图形,和定义线状图差不多//gDef.area(...);//创建图表new RrdGraph(gDef);return null;
}
RRD_rrd4j的使用说明相关推荐
- abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...
高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF 高性能计算平台ABAQUS 任务调度使用说明 作者:陈林 E-Mail:chenlin@ 日期:2017-1-10 ...
- linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...
cmd replace 文件替换使用说明 帮助信息: 复制代码 代码如下: 替换文件. REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [ ...
- Simple Dynamic Strings(SDS)源码解析和使用说明二
在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...
- Delphi开发的IOCP测试Demo以及使用说明。
Delphi开发的IOCP,此为压力测试Demo和使用说明.
- oracle database link mysql_oracle database link使用说明
oracle database link使用说明 作用: 将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象. 简易语法: CREATE [PUBLIC] ...
- 序列拼接工具Bowtie使用说明
序列拼接工具Bowtie使用说明 2011-06-08 ~ ADMIN Bowtie是一个超级快速的,较为节省内存的短序列拼接至模板基因组的工具.它在拼接35碱基长度的序列时,可以达到每小时2.5亿次 ...
- benchmarksql测试mysql_数据库压力测试工具 -- BenchmarkSQL 使用说明
关于数据库的压力测试,之前写过3篇Blog: 数据库基准测试(Database Benchmarking) 说明 数据库压力测试工具 -- Hammerdb 使用说明 数据库压力测试工具 -- Swi ...
- 计算机网页基础课专业,关于《计算机应用基础》课程网页下的学习资源使用说明....
关于<计算机应用基础>课程网页下的学习资源使用说明. 关于<计算机应用基础>课程网页下的学习资源使用说明 各位同学:大家好! 07春学期已接近一半的时间了,新生对课程还需要更多 ...
- gh ost mysql_MySQL在线DDL gh-ost 使用说明
3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW.如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates.根据上面的参数说明按照需求进行调整. 环境:主库 ...
- creo 3.0计算机配置,Creo 3.0 Parametric 配置选项文件使用说明
最近安装了Creo Parametric 3.0 F000,其配置选项与Creo Parametric 2.0有部分更新,研究PTC Creo® 3.0 Parametric 配置选项configop ...
最新文章
- linux carry php Soap 扩展
- IE6 下div高度显示的问题
- (一)Python装饰器的通俗理解
- 作为搭建网站的程序员,你有Apsara Clouder云计算专项技能认证吗?
- java死信队列_Spring Boot系列教程之死信队列详解
- 程序员必备技能之 Git 的体系结构与历史
- iphoneX 订单生成器 - 装 b 神器 - 生成虚拟 iphoneX 订单,满足你装 b 的愿望
- Servlet中forward和redirect的区别
- Linux 痕迹清理
- 3.2Abstraction data type
- android popupwindow 消失动画,PopupWindow动画结束后dismiss崩溃解决
- jenkins添加从节点
- python快递分拣_快递背后的黑科技,你造吗?
- 基于Core Text实现的TXT电子书阅读器
- Linux实战技巧--文件系统操作(二)--创建和删除目录(mkdir/rm)
- Joda-Time 入门
- 基于java(ssm)旅游网站系统源码成品(java毕业设计)
- c++ 字符串相关函数
- iPhone分辨率及尺寸
- FreeRTOS(一):裸机系统与多任务系统