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.
Avant la mise en œuvre, vous devez installer Redis, RiSearch et l'extension Redis de PHP. Voici le processus de configuration de base :
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('127.0.0.1', 6379); $redis->rawCommand('FT.CREATE', 'logs', 'SCHEMA', 'timestamp', 'NUMERIC', 'content', 'TEXT'); // Ajoute les données du journal à l'index $logs = array( array('timestamp' => 1615516800, 'content' => 'Ceci est le premier journal'), array('timestamp' => 1615603200, 'content' => 'Ceci est le deuxième journal'), //... ); foreach ($logs en tant que $log) { $redis->rawCommand('FT.ADD', 'logs', 'doc:'.$log['timestamp'], 1.0, 'FIELDS', 'horodatage', $log['horodatage'], 'contenu', $log['contenu']); } ?>
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.
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('127.0.0.1', 6379); $query = '@timestamp:[1615516800 1615603200]'; // Rechercher les journaux du 12/03/2021 au 13/03/2021 $result = $redis->rawCommand('FT.SEARCH', 'logs', $query, 'LIMIT', 0, 10); // Afficher les résultats de la recherche pour chaque ($result as $key => $value) { si ($clé % 2 === 0) { echo 'ID de journal :'.$value."\n"; } autre { echo 'Contenu :'.$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.
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('127.0.0.1', 6379); $query = '@timestamp:[1615516800 1615603200]'; // Recherche de journaux dans la plage de temps spécifiée $result = $redis->rawCommand('FT.AGGREGATE', 'logs', $query, 'LOAD', 1, 'GROUPBY', 1, '@content', 'REDUCE', 'COUNT', 0, 'AS', 'count'); // Affiche le résultat de l'agrégation pour chaque ($result as $item) { echo 'Content:'.$item['@content'].', fréquence d'occurrence : '.$item['count']."\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.
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.