本文参考:

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的使用说明相关推荐

  1. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...

    高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF 高性能计算平台ABAQUS 任务调度使用说明 作者:陈林 E-Mail:chenlin@ 日期:2017-1-10 ...

  2. linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...

    cmd replace 文件替换使用说明 帮助信息: 复制代码 代码如下: 替换文件. REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [ ...

  3. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  4. Delphi开发的IOCP测试Demo以及使用说明。

    Delphi开发的IOCP,此为压力测试Demo和使用说明.

  5. oracle database link mysql_oracle database link使用说明

    oracle database link使用说明 作用: 将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象. 简易语法: CREATE [PUBLIC] ...

  6. 序列拼接工具Bowtie使用说明

    序列拼接工具Bowtie使用说明 2011-06-08 ~ ADMIN Bowtie是一个超级快速的,较为节省内存的短序列拼接至模板基因组的工具.它在拼接35碱基长度的序列时,可以达到每小时2.5亿次 ...

  7. benchmarksql测试mysql_数据库压力测试工具 -- BenchmarkSQL 使用说明

    关于数据库的压力测试,之前写过3篇Blog: 数据库基准测试(Database Benchmarking) 说明 数据库压力测试工具 -- Hammerdb 使用说明 数据库压力测试工具 -- Swi ...

  8. 计算机网页基础课专业,关于《计算机应用基础》课程网页下的学习资源使用说明....

    关于<计算机应用基础>课程网页下的学习资源使用说明. 关于<计算机应用基础>课程网页下的学习资源使用说明 各位同学:大家好! 07春学期已接近一半的时间了,新生对课程还需要更多 ...

  9. gh ost mysql_MySQL在线DDL gh-ost 使用说明

    3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW.如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates.根据上面的参数说明按照需求进行调整. 环境:主库 ...

  10. creo 3.0计算机配置,Creo 3.0 Parametric 配置选项文件使用说明

    最近安装了Creo Parametric 3.0 F000,其配置选项与Creo Parametric 2.0有部分更新,研究PTC Creo® 3.0 Parametric 配置选项configop ...

最新文章

  1. linux carry php Soap 扩展
  2. IE6 下div高度显示的问题
  3. (一)Python装饰器的通俗理解
  4. 作为搭建网站的程序员,你有Apsara Clouder云计算专项技能认证吗?
  5. java死信队列_Spring Boot系列教程之死信队列详解
  6. 程序员必备技能之 Git 的体系结构与历史
  7. iphoneX 订单生成器 - 装 b 神器 - 生成虚拟 iphoneX 订单,满足你装 b 的愿望
  8. Servlet中forward和redirect的区别
  9. Linux 痕迹清理
  10. 3.2Abstraction data type
  11. android popupwindow 消失动画,PopupWindow动画结束后dismiss崩溃解决
  12. jenkins添加从节点
  13. python快递分拣_快递背后的黑科技,你造吗?
  14. 基于Core Text实现的TXT电子书阅读器
  15. Linux实战技巧--文件系统操作(二)--创建和删除目录(mkdir/rm)
  16. Joda-Time 入门
  17. 基于java(ssm)旅游网站系统源码成品(java毕业设计)
  18. c++ 字符串相关函数
  19. iPhone分辨率及尺寸
  20. FreeRTOS(一):裸机系统与多任务系统

热门文章

  1. 新元宇宙每周连载《地球人奇游天球记》第十七回海王会龙
  2. Cloudflare CNAME 接入满血复活,一分钱不用花!
  3. 生活,人艰不拆,各种躺枪
  4. 禁止百度转码和百度快照缓存的META声明
  5. 移动硬盘在电脑上显示为本地磁盘并且出现打不开的情况
  6. chloe.mysql 源码_[开源]无sql之旅-Chloe.ORM之增删查改
  7. Java编程题之某年某月某日
  8. 图片批量添加水印批量加背景缩放批量合并工具picUnionV4.0
  9. 成功,侥幸,以小博大?永远离不开的墨菲定律
  10. 社招面试会遇到哪些坑?