現在の位置: ホーム> 最新記事一覧> 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;logs&#39;, &#39;SCHEMA&#39;, &#39;timestamp&#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;これは 2 番目のログです&#39;),
    // ...
);

foreach ($logs として $log) {
    $redis->rawCommand(&#39;FT.ADD&#39;, &#39;logs&#39;, &#39;doc:&#39;.$log[&#39;timestamp&#39;], 1.0, &#39;FIELDS&#39;,
        &#39;タイムスタンプ&#39;, $log[&#39;タイムスタンプ&#39;],
        &#39;コンテンツ&#39;, $log[&#39;コンテンツ&#39;]);
}
?>

上記のコードは、最初にlogsという名前のインデックスを定義します。このインデックスにはタイムスタンプとコンテンツの 2 つのフィールドが含まれており、後続の検索と集計操作を容易にするために複数のログ データをインデックスに書き込みます。

時系列データの検索

RiSearch は、時間間隔に基づいてデータを迅速に取得するための効率的なクエリ構文を提供します。次のコードは、指定した時間範囲内のログを検索する方法を示しています。

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

$query = &#39;@timestamp:[1615516800 1615603200]&#39;; // 2021-03-12 から 2021-03-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;COUNT&#39;、0、&#39;AS&#39;、&#39;count&#39;);

// 集計結果をforeachに出力($result as $item) {
    echo &#39;コンテンツ:&#39;.$item[&#39;@content&#39;].&#39;、出現頻度: &#39;.$item[&#39;count&#39;]."\n";
}
?>

この集計コマンドは、クエリ結果をグループ化し、各ログ コンテンツの発生回数をカウントします。ログ分析やイベント統計などのシナリオに非常に適しています。

要約する

RiSearchとPHPを組み合わせることで、時系列データの検索・集計をサポートする高性能なシステムを簡単に構築できます。インデックス構築、検索クエリ、集計分析の3つのステップにより、大規模な時系列データを効率的に管理・分析できます。開発者は、データ視覚化、インテリジェントアラーム、多次元集計などの機能を追加するなど、実際のビジネスニーズに基づいてさらに拡張し、完全なデータ分析プラットフォームを構築できます。