InflexDB에서 데이터를 가져오는 구성 요소 만들기

14601 단어 influxdbAsteriaWARP

저번


InflexDB에 데이터를 넣는 InflexDBPut 구성 요소를 만들었기 때문에 넣은 데이터를 얻는 InflexDBGet 구성 요소도 만들고 싶습니다.

테스트 환경


환경은 지난번과 같다.
contros의 InflexDB17.4 데이터베이스 "asteria"를 사용한다.

구성 요소


이번에 InflexDB에서 데이터를 얻은 InflexDBGet 구성 요소를 제작합니다.
하고 싶은 일
1. 조회를 실행하고 결과를 기록 흐름으로 출력한다.
2. 데이터베이스, Measurement, 보존 정책을 지정하여 간단하게 데이터를 얻을 수 있다
차이가 많지 않다.
그 다음은time가 취득 범위를 지정하고, 페이지에 대한 시작 줄과 취득 수 정도를 지정합니까?

등록 정보



속성 이름
설명
연결 사용
연결을 사용하지 않을 때는 URL, 사용자 이름 및 암호 속성을 통해 지정합니다.
연결 이름
전용 연결을 지정합니다.
데이터베이스
이번에는 이미 제작된'asteria'를 지목한다.
조회
실행할 검색 문자열을 지정합니다.
적재량
가져온 기록 수를 저장합니다.
Measurement
Measurement의 이름을 지정합니다.
보존 정책
보존 정책을 지정합니다.
time>=
지정한 시간 이후의 데이터를 가져옵니다.시간은 문자열 "예: 2019-03-25T05:55:55Z"로 지정됩니다.
time<=
지정한 시간 전의 데이터를 가져옵니다.
읽기 행 시작
대상 데이터에서 가져올 행 번호를 지정합니다.1000개의 데이터 중 100개에서 100개를 얻었을 때 사용한다.
인출 건수
가져올 데이터 수를 지정합니다.

출처


소스의 주요 부분은 다음과 같다.
전용에서 org로 연결합니다.influxdb.InflexDB 객체 수신
_influxDB = InfluxDBConnection.createInfluxDB(url, username, password);
질의 문자열 작성 섹션
String query = _query.strValue();
if (!StringUtil.isEmpty(query)) {
    //クエリープロパティを指定している場合はそのまま実行
} else {
    //クエリー文を作成
    String retentionPolicy = _retentionPolicy.strValue();
    String measurement = _measurement.strValue();
    String database = _database.strValue();
    if (StringUtil.isEmpty(database)) {
        throw new ComponentExceptionByMessageCode(this, ERROR_CODE_DATABASE);
    }
    StringBuilder queryBuilder = new StringBuilder("select * from " + database);
    if (StringUtil.isEmpty(retentionPolicy)) {
        throw new ComponentExceptionByMessageCode(this, ERROR_CODE_RETENTION_POLICY_EMPTY);
    }
    queryBuilder.append(".\"").append(retentionPolicy).append("\"");
    if (StringUtil.isEmpty(measurement)) {
        throw new ComponentExceptionByMessageCode(this, ERROR_CODE_MEASUREMENT_EMPTY);
    }
    queryBuilder.append(".\"").append(measurement).append("\"");
    String ge = _greaterThanOrEqualTo.strValue();
    String le = _lessThanOrEqualTo.strValue();
    if (!StringUtil.isEmpty(ge) || !StringUtil.isEmpty(le)) {
        queryBuilder.append(" where ");
        if (!StringUtil.isEmpty(ge)) {
            queryBuilder.append("time >= '").append(ge).append("'");
            if (!StringUtil.isEmpty(le)) {
                queryBuilder.append(" and time <= '").append(le).append("'");
            }
        } else {
            queryBuilder.append("time <= '").append(le).append("'");
        }
    }
    if (_recordFilter.booleanValue()) {
        int limit = _getCount.intValue();
        int offset = _startRow.intValue();
        if (limit > 0) {
            queryBuilder.append(" limit ").append(limit);
        }
        if (offset > 1) {
            queryBuilder.append(" offset ").append(offset);
        }
    }
    query = queryBuilder.toString();
}
검색을 실행하고 응답을 받는 부분
private List<List<Object>> getQueryResponse(String queryString) {
    Query query = new Query(queryString);
    QueryResult result = _influxDB.query(query);
    List<Result> results = result.getResults();
    for (Result res : results) {
        List<Series> series = res.getSeries();
        if (series != null) {
            for (Series se : series) {
                _columns = se.getColumns();
                List<List<Object>> values = se.getValues();
                return values;
            }
        }
    }
    return null;
}

실행


전체 테스트 데이터를 취득하는 절차, 상위 5개 항목만 취득하는 절차 등을 통해 동작을 확인했다.

전(7458기록)이 얻은 결과.
278ms.

◆ 1000건에서 5건을 얻는 프로세스 정례

◆정해진 시간 동안만 얻을 수 있는 프로세스 설정의 예

총결산


이번에는 플로우 서비스 로그에서 테스트한 것으로, 다양한 센서 데이터를 저장하는 등 다양한 각도에서 조를 나누어 데이터를 얻을 수 있는지 사용법을 생각해 봤다.InflexDB는 많이 사용하는 것 같아요.

좋은 웹페이지 즐겨찾기