현재 위치: > 최신 기사 목록> RiSearch + PHP는 시계열 데이터의 효율적인 검색 및 집계를 위한 완벽한 솔루션입니다.

RiSearch + PHP는 시계열 데이터의 효율적인 검색 및 집계를 위한 완벽한 솔루션입니다.

M66 2025-10-20

소개

인터넷 애플리케이션의 지속적인 발전으로 인해 시스템은 센서 데이터, 로그 정보, 주가 등과 같은 시계열 데이터를 점점 더 많이 생성합니다. 이러한 유형의 데이터는 시간 연속성과 높은 성장이 특징입니다. 이를 어떻게 효율적으로 검색하고 집계하는가는 중요한 기술적 과제가 되었습니다. 이 기사에서는 RiSearch 및 PHP를 기반으로 고성능 시계열 데이터 검색 및 집계 솔루션을 구축하는 방법을 소개합니다.

RiSearch 및 PHP의 환경 구성

구현하기 전에 Redis, RiSearch 및 PHP의 Redis 확장을 설치해야 합니다. 다음은 기본 구성 프로세스입니다.

  • Redis 설치: 다운로드 및 설치 방법은 공식 Redis 설명서를 참조하세요.
  • RiSearch 설치: 공식 GitHub 저장소에서 다운로드하여 컴파일 및 설치를 완료하세요.
  • PHP Redis 확장 설치: pecl install redis 명령을 사용하여 이를 설치하고 PHP 구성 파일에서 활성화합니다.

시계열 색인 만들기

RiSearch에서 인덱스를 사용하는 것은 검색 및 집계의 기초입니다. 다음 예에서는 PHP에서 로그 기반 시계열 인덱스를 생성하는 방법을 보여줍니다.

<?php
$redis = new Redis();
$redis-> 연결(&#39;127.0.0.1&#39;, 6379);

$redis->rawCommand(&#39;FT.CREATE&#39;, &#39;로그&#39;, &#39;SCHEMA&#39;, &#39;타임스탬프&#39;, &#39;NUMERIC&#39;, &#39;content&#39;, &#39;TEXT&#39;);

// 인덱스에 로그 데이터를 추가합니다. $logs = array(
    array(&#39;timestamp&#39; => 1615516800, &#39;content&#39; => &#39;첫 번째 로그입니다.&#39;),
    array(&#39;timestamp&#39; => 1615603200, &#39;content&#39; => &#39;두 번째 로그입니다.&#39;),
    // ...
);

foreach($log를 $log로) {
    $redis->rawCommand(&#39;FT.ADD&#39;, &#39;로그&#39;, &#39;doc:&#39;.$log[&#39;timestamp&#39;], 1.0, &#39;FIELDS&#39;,
        &#39;타임스탬프&#39;, $log[&#39;타임스탬프&#39;],
        &#39;콘텐츠&#39;, $log[&#39;콘텐츠&#39;]);
}
?>

위 코드는 먼저 타임스탬프와 콘텐츠라는 두 개의 필드를 포함하는 로그 라는 인덱스를 정의하고 후속 검색 및 집계 작업을 용이하게 하기 위해 인덱스에 여러 로그 데이터를 씁니다.

시계열 데이터 검색

RiSearch는 시간 간격에 따라 데이터를 빠르게 검색할 수 있는 효율적인 쿼리 구문을 제공합니다. 다음 코드는 지정된 시간 범위 내에서 로그를 검색하는 방법을 보여줍니다.

<?php
$redis = new Redis();
$redis-> 연결(&#39;127.0.0.1&#39;, 6379);

$query = &#39;@timestamp:[1615516800 1615603200]&#39;; // 2021년 3월 12일부터 2021년 3월 13일까지의 로그 검색 $result = $redis->rawCommand(&#39;FT.SEARCH&#39;, &#39;logs&#39;, $query, &#39;LIMIT&#39;, 0, 10);

// foreach 검색 결과 출력($result as $key => $value) {
    if ($key % 2 === 0) {
        echo &#39;로그 ID:&#39;.$value."\n";
    } 또 다른 {
        echo &#39;콘텐츠:&#39;.$value."\n";
    }
}
?>

FT.SEARCH 명령어를 통해 특정 시간 범위 내의 로그 정보를 빠르게 조회하고 요청에 따라 결과를 출력할 수 있습니다. 이 방법은 복잡한 쿼리 조건과 다중 필드 일치를 지원할 수 있습니다.

시계열 데이터 집계

로그 분석 또는 모니터링 시스템에서는 집계 통계가 일반적인 요구 사항입니다. 예를 들어 특정 기간 동안 특정 유형의 로그가 나타나는 횟수를 계산할 수 있습니다. 다음 예에서는 RiSearch의 집계 명령을 사용하여 이 기능을 구현하는 방법을 보여줍니다.

<?php
$redis = new Redis();
$redis-> 연결(&#39;127.0.0.1&#39;, 6379);

$query = &#39;@timestamp:[1615516800 1615603200]&#39;; // 지정된 시간 범위의 로그를 검색합니다. $result = $redis->rawCommand(&#39;FT.AGGREGATE&#39;, &#39;logs&#39;, $query, &#39;LOAD&#39;, 1,
    &#39;GROUPBY&#39;, 1, &#39;@content&#39;,
    &#39;REDUCE&#39;, &#39;개수&#39;, 0, &#39;AS&#39;, &#39;개수&#39;);

// 집계 결과 foreach ($result as $item) {
    echo &#39;Content:&#39;.$item[&#39;@content&#39;].&#39;, 발생 빈도: &#39;.$item[&#39;count&#39;]."\n";
}
?>

이 집계 명령은 쿼리 결과를 그룹화하고 각 로그 콘텐츠의 발생 횟수를 계산합니다. 로그 분석, 이벤트 통계 등의 시나리오에 매우 적합합니다.

요약

RiSearch와 PHP를 결합하면 시계열 데이터 검색 및 집계를 지원하는 고성능 시스템을 쉽게 구축할 수 있습니다. 인덱스 구축, 검색어, 집계분석의 3단계를 통해 대규모 시계열 데이터를 효율적으로 관리하고 분석할 수 있습니다. 개발자는 데이터 시각화, 지능형 경보 또는 다차원 집계와 같은 기능을 추가하는 등 실제 비즈니스 요구 사항을 기반으로 더욱 확장하여 완전한 데이터 분석 플랫폼을 구축할 수 있습니다.