栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java使用-Rrd4j接口-操作RrdTool数据库

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java使用-Rrd4j接口-操作RrdTool数据库

rrd4j使用 Maven依赖

    org.rrd4j
    rrd4j
    3.5

RRD说明和注意事项
  1. RRD数据库是一种环形数据库,使用 rrd4j 只能存储 double 类型的值。

  2. RRD数据库的存储是基于时间的,比如时间间隔是 5 分钟,在 09:00 和 09:05 可以存储,如果 09:03 传入一个值,而指针又指在 09:00 的时候,这个值就会记录在 09:00,如果指针指在 9:05, 这个插入的值失效。

  3. RRD数据库创建需要一个时间,这个时间可以自己指定,也可以使用默认时间。

rrd4j操作rrdtool数据库

模拟一个小时内,每三秒获取一次数据。

public class RrdController(){
    private static final String FILENAME = "F:/demo.rrd";  //创建文件地址以及文件名称
    private static final Long START_TIME = Util.getTimestamp(2021,11,14,15,0); //设置开始时间
    private static final Long END_TIME = Util.getTimestamp(2021,11,14,16,0);  //设置结束时间

1.创建rrd数据库
    public static void insertFile() throws IOException {
        RrdDef rrdDef = new RrdDef(FILENAME, START_TIME - 1, 3); //创建rrd文件
        rrdDef.addDatasource("number", DsType.GAUGE,600,0,Double.NaN); //添加数据源
        rrdDef.addArchive(ConsolFun.AVERAGE,0.5,1,1200); //添加存档方案
        System.out.println("创建语法为:" + rrdDef.dump());
        RrdDb rrdDb = new RrdDb(rrdDef); //生成rrd数据库
        rrdDb.close();  //关闭rrd数据库
    }
2.添加rrd数据
    public static void addData() throws IOException {
        RrdDb rrdDb = new RrdDb(FILENAME);  //获取rrd文件数据库
        Random random = new Random(100000);  //创建存储的随机数
        Sample sample = rrdDb.createSample(); //创建样本对象

        long startTime = START_TIME;
        long endTime = END_TIME;

        while(startTime<=endTime){
//            System.out.println(startTime);
            sample.setTime(startTime).setValue("number",random.nextDouble());  //存储数据
            sample.update();  //添加数据到rrd数据库中,否则不会添加。
            startTime+=3;
        }
//        sample.setTime(System.currentTimeMillis()/1000).setValue("number",random.nextDouble());  //存储数据
//        sample.setTime(1639465203).setValue("number",random.nextDouble());  //存储数据
//        sample.setTime(1639465206).setValue("number",random.nextDouble());  //存储数据
//        sample.setTime(1639465209).setValue("number",random.nextDouble());  //存储数据
//        sample.setTime(1639465212).setValue("number",random.nextDouble());  //存储数据
        rrdDb.close();  //添加完后必须要关闭数据库,否则添加失败。
    }
3.查询rrd数据
    public static void selectData() throws IOException {
        RrdDb rrdDb = new RrdDb(FILENAME);
        //创建获取请求
        FetchRequest request = rrdDb.createFetchRequest(
                ConsolFun.AVERAGE,  //获取请求的方式,必须和创建时的一样
                START_TIME,  //存储数据开始时间
                END_TIME);  //存储数据结束时间
        FetchData fetchData = request.fetchData(); //获取存档数据对象

        System.out.println("上次更新时间为:" + rrdDb.getLastUpdateTime());
        System.out.println("最后更新信息为:" + rrdDb.getInfo());

        System.out.println("--获取一天的数据--");
        System.out.println(request.dump());
//        System.out.println(fetchData);

        long[] timestamps = fetchData.getTimestamps();
        double[] numbers = fetchData.getValues("number");

        System.out.println("key: number");
        for (int i = 0; i < numbers.length; i++) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date(timestamps[i]*1000);
            String format = simpleDateFormat.format(date);

            System.out.println("时间:"+format+"-----"+"value:"+numbers[i]);
        }
    }
4.绘制线路图
    public static void createPicture() throws IOException {
        RrdDb rrdDb = new RrdDb(FILENAME);
        RrdGraphDef gDef = new RrdGraphDef();
        gDef.setWidth(600);
        gDef.setHeight(400);
        gDef.setFilename("F://demo.png");
        gDef.setStartTime(START_TIME);
        gDef.setEndTime(END_TIME);
        gDef.setTitle("xuhy-number");
        gDef.setImageFormat("png");

        gDef.datasource("Number",FILENAME,"number",ConsolFun.AVERAGE);
        gDef.line("Number", Color.GREEN,"number");
        new RrdGraph(gDef);
    }
5.启动测试
    public static void main(String[] args){
        try {
            insertFile();
            addData();
            selectData();
            createPicture();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/673158.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号