Position actuelle: Accueil> Derniers articles> RiSearch + PHP est une solution complète pour une recherche et une agrégation efficaces de données de séries chronologiques

RiSearch + PHP est une solution complète pour une recherche et une agrégation efficaces de données de séries chronologiques

M66 2025-10-20

introduction

Avec le développement continu des applications Internet, le système génère de plus en plus de données de séries chronologiques, telles que des données de capteurs, des informations de journal, des cours boursiers, etc. Ce type de données se caractérise par une continuité temporelle et une forte croissance. Comment les rechercher et les regrouper efficacement est devenu un défi technique important. Cet article expliquera comment créer une solution de recherche et d'agrégation de données de séries chronologiques hautes performances basée sur RiSearch et PHP.

Configuration de l'environnement de RiSearch et PHP

Avant la mise en œuvre, vous devez installer Redis, RiSearch et l'extension Redis de PHP. Voici le processus de configuration de base :

  • Installer Redis : veuillez vous référer à la documentation officielle de Redis pour connaître les méthodes de téléchargement et d'installation.
  • Installez RiSearch : obtenez-le depuis le référentiel officiel GitHub et terminez la compilation et l'installation.
  • Installez l'extension PHP Redis : Utilisez la commande pecl install redis pour l'installer et l'activer dans le fichier de configuration PHP.

Créer un index de séries chronologiques

L'utilisation d'index dans RiSearch constitue la base de la recherche et de l'agrégation. L'exemple suivant montre comment créer un index de séries temporelles basé sur des journaux en PHP :

<?php
$redis = new Redis();
$redis-> connecter(&#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;);

// Ajoute les données du journal à l&#39;index $logs = array(
    array(&#39;timestamp&#39; => 1615516800, &#39;content&#39; => &#39;Ceci est le premier journal&#39;),
    array(&#39;timestamp&#39; => 1615603200, &#39;content&#39; => &#39;Ceci est le deuxième journal&#39;),
    //...
);

foreach ($logs en tant que $log) {
    $redis->rawCommand(&#39;FT.ADD&#39;, &#39;logs&#39;, &#39;doc:&#39;.$log[&#39;timestamp&#39;], 1.0, &#39;FIELDS&#39;,
        &#39;horodatage&#39;, $log[&#39;horodatage&#39;],
        &#39;contenu&#39;, $log[&#39;contenu&#39;]);
}
?>

Le code ci-dessus définit d'abord un index nommé logs , qui contient deux champs : horodatage et contenu, et écrit plusieurs données de journal dans l'index pour faciliter les opérations de recherche et d'agrégation ultérieures.

Rechercher des données de séries chronologiques

RiSearch fournit une syntaxe de requête efficace pour récupérer rapidement des données en fonction d'intervalles de temps. Le code suivant montre comment rechercher des journaux dans une plage de temps spécifiée :

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

$query = &#39;@timestamp:[1615516800 1615603200]&#39;; // Rechercher les journaux du 12/03/2021 au 13/03/2021 $result = $redis->rawCommand(&#39;FT.SEARCH&#39;, &#39;logs&#39;, $query, &#39;LIMIT&#39;, 0, 10);

// Afficher les résultats de la recherche pour chaque ($result as $key => $value) {
    si ($clé % 2 === 0) {
        echo &#39;ID de journal :&#39;.$value."\n";
    } autre {
        echo &#39;Contenu :&#39;.$valeur."\n";
    }
}
?>

Grâce à la commande FT.SEARCH , nous pouvons rapidement interroger les informations du journal dans un intervalle de temps et afficher les résultats à la demande. Cette méthode peut prendre en charge des conditions de requête complexes et une correspondance multi-champs.

Agréger les données de séries chronologiques

Dans les systèmes d’analyse ou de surveillance des journaux, les statistiques globales sont une exigence courante. Par exemple, vous pouvez compter le nombre de fois qu'un certain type de journal apparaît au cours d'une certaine période de temps. L'exemple suivant montre l'utilisation de la commande d'agrégation de RiSearch pour obtenir cette fonctionnalité :

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

$query = &#39;@timestamp:[1615516800 1615603200]&#39;; // Recherche de journaux dans la plage de temps spécifiée $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;);

// Affiche le résultat de l&#39;agrégation pour chaque ($result as $item) {
    echo &#39;Content:&#39;.$item[&#39;@content&#39;].&#39;, fréquence d&#39;occurrence : &#39;.$item[&#39;count&#39;]."\n";
}
?>

Cette commande d'agrégation regroupera les résultats de la requête et comptera les heures d'occurrence de chaque contenu de journal. Il est très adapté aux scénarios tels que l'analyse des journaux et les statistiques d'événements.

Résumer

En combinant RiSearch et PHP, nous pouvons facilement créer un système hautes performances prenant en charge la recherche et l'agrégation de données de séries chronologiques. Grâce aux trois étapes d'établissement de l'index, de requête de recherche et d'analyse d'agrégation, les données de séries chronologiques à grande échelle peuvent être gérées et analysées efficacement. Les développeurs peuvent étendre davantage leur solution en fonction des besoins réels de l'entreprise, par exemple en ajoutant des fonctions telles que la visualisation des données, des alarmes intelligentes ou une agrégation multidimensionnelle, pour créer une plateforme complète d'analyse de données.