ホームページ >バックエンド開発 >PHPチュートリアル >RiSearch PHP を使用した時系列データの検索と集計を実装するための技術的アイデア

RiSearch PHP を使用した時系列データの検索と集計を実装するための技術的アイデア

WBOY
WBOYオリジナル
2023-10-03 08:34:211011ブラウズ

RiSearch PHP 实现时间序列数据搜索与聚合的技术思路

RiSearch PHP 時系列データの検索と集計を実現するための技術的アイデア

はじめに:
インターネットの発展に伴い、多くのアプリケーション システムは大量のデータを生成します。センサーデータ、ログデータ、株価などの時系列データこのデータの重要な要件は、データを迅速かつ正確に検索して集計できることです。 RiSearch は Redis をベースにした全文検索エンジンです。この記事では、RiSearch と PHP を使用して時系列データの検索と集計機能を実装する方法について説明します。

1. RiSearch のインストールと構成
まず、Redis と RiSearch をインストールし、PHP に Redis 拡張機能をインストールする必要があります。これは、次の手順で実行できます。

  1. Redis のインストール: Redis をダウンロードしてインストールするには、Redis 公式 Web サイト (https://redis.io/) のドキュメントを参照してください。
  2. RiSearch のインストール: RiSearch をダウンロードしてインストールするには、RiSearch 公式 Web サイト (https://github.com/RediSearch/RediSearch) のドキュメントを参照してください。
  3. redis 拡張機能をインストールする: pecl install redis コマンドを実行して redis 拡張機能をインストールし、PHP 拡張機能リストに追加します。

2. 時系列インデックスを作成する
RiSearch を検索と集計に使用する前に、まず時系列インデックスを作成する必要があります。ログ システムがあり、各ログにタイムスタンプとコンテンツ情報が含まれているとします。次のコードを通じて時系列インデックスを作成できます:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$redis->rawCommand('FT.CREATE', 'logs', 'SCHEMA', 'timestamp', 'NUMERIC', 'content', 'TEXT');

// 将日志数据添加到索引中
$logs = array(
    array('timestamp' => 1615516800, 'content' => '这是第一条日志'),
    array('timestamp' => 1615603200, 'content' => '这是第二条日志'),
    // ...
);

foreach ($logs as $log) {
    $redis->rawCommand('FT.ADD', 'logs', 'doc:'.$log['timestamp'], 1.0, 'FIELDS', 'timestamp', $log['timestamp'], 'content', $log['content']);
}

?>

上記のコードでは、まず「logs」という名前の時系列インデックスを作成し、作成時に「timestamp」(タイムスタンプ) という 2 つのフィールドを定義します。 )と「コンテンツ」(コンテンツ)。次に、各ログ データを時系列にインデックスに追加しました。

3. 時系列データの検索

RiSearch を使用して時系列を検索すると、非常に柔軟かつ効率的になります。以下は、時間範囲に基づいてログ データを検索するサンプル コードです。

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$query = '@timestamp:[1615516800 1615603200]'; // 搜索2021-03-12到2021-03-13之间的日志

$result = $redis->rawCommand('FT.SEARCH', 'logs', $query, 'LIMIT', 0, 10);

// 输出搜索结果
foreach ($result as $key => $value) {
    if ($key % 2 === 0) {
        echo '日志ID:'.$value."
";
    } else {
        echo '内容:'.$value."
";
    }
}
?>

上記のコードでは、FT.SEARCH コマンドを使用して検索し、検索するインデックスを指定します。 「logs」とクエリ ステートメント「@timestamp:[1615516800 1615603200]」は、2021-03-12 から 2021-03-13 までのログを検索することを意味します。結果の数を制限し、出力を反復処理することで、検索結果を取得できます。

4. 時系列データの集計

実際のアプリケーションでは、特定の期間内の平均、最大値、最小値などを計算するなど、時系列データを集計する必要があることがよくあります。 . . RiSearch は、対応する集計関数も提供します。次は、特定の時間範囲内のログ コンテンツの頻度を計算するサンプル コードです:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$query = '@timestamp:[1615516800 1615603200]'; // 搜索2021-03-12到2021-03-13之间的日志

$result = $redis->rawCommand('FT.AGGREGATE', 'logs', $query, 'LOAD', 1, 'GROUPBY', 1, '@content', 'REDUCE', 'COUNT', 0, 'AS', 'count');

// 输出聚合结果
foreach ($result as $item) {
    echo '内容:'.$item['@content'].',出现频率:'.$item['count']."
";
}
?>

上記のコードでは、FT.AGGREGATE を使用します。コマンドは、集計対象のインデックス名「logs」、クエリ文「@timestamp:[1615516800 1615603200]」、および各ログ内容の出現頻度を計算する集計方法「COUNT」を指定して集計を行います。結果を反復処理することで、集計された結果を取得できます。

概要:

RiSearch と PHP を組み合わせることで、時系列データの検索や集計機能を簡単に実装できます。時系列インデックスを作成し、検索には FT.SEARCH を使用し、集計には FT.AGGREGATE を使用することで、大量の時系列データを迅速かつ正確に処理して、実際のアプリケーションのニーズを満たすことができます。この記事では基本的なアイデアとコード例のみを提供していることに注意してください。実際に使用するには、特定のニーズに基づいて対応する調整と最適化が必要です。

以上がRiSearch PHP を使用した時系列データの検索と集計を実装するための技術的アイデアの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。