Mit der kontinuierlichen Weiterentwicklung von Internetanwendungen generiert das System immer mehr Zeitreihendaten wie Sensordaten, Protokollinformationen, Aktienkurse usw. Diese Art von Daten zeichnet sich durch Zeitkontinuität und hohes Wachstum aus. Die effiziente Suche und Aggregation ist zu einer wichtigen technischen Herausforderung geworden. In diesem Artikel wird vorgestellt, wie Sie eine leistungsstarke Lösung für die Suche und Aggregation von Zeitreihendaten basierend auf RiSearch und PHP erstellen.
Vor der Implementierung müssen Sie Redis, RiSearch und die Redis-Erweiterung von PHP installieren. Das Folgende ist der grundlegende Konfigurationsprozess:
Die Verwendung von Indizes in RiSearch ist die Grundlage für die Suche und Aggregation. Das folgende Beispiel zeigt, wie man in PHP einen logbasierten Zeitreihenindex erstellt:
<?php $redis = new Redis(); $redis-> connect('127.0.0.1', 6379); $redis->rawCommand('FT.CREATE', 'logs', 'SCHEMA', 'timestamp', 'NUMERIC', 'content', 'TEXT'); // Protokolldaten zum Index hinzufügen $logs = array( array('timestamp' => 1615516800, 'content' => 'Dies ist das erste Protokoll'), array('timestamp' => 1615603200, 'content' => 'Dies ist das zweite Protokoll'), // ... ); foreach ($logs als $log) { $redis->rawCommand('FT.ADD', 'logs', 'doc:'.$log['timestamp'], 1.0, 'FIELDS', 'Zeitstempel', $log['Zeitstempel'], 'content', $log['content']); } ?>
Der obige Code definiert zunächst einen Index mit dem Namen logs , der zwei Felder enthält: Zeitstempel und Inhalt, und mehrere Protokolldaten in den Index schreibt, um nachfolgende Such- und Aggregationsvorgänge zu erleichtern.
RiSearch bietet eine effiziente Abfragesyntax zum schnellen Abrufen von Daten basierend auf Zeitintervallen. Der folgende Code zeigt, wie Protokolle innerhalb eines bestimmten Zeitraums durchsucht werden:
<?php $redis = new Redis(); $redis-> connect('127.0.0.1', 6379); $query = '@timestamp:[1615516800 1615603200]'; // Protokolle vom 12.03.2021 bis 13.03.2021 durchsuchen $result = $redis->rawCommand('FT.SEARCH', 'logs', $query, 'LIMIT', 0, 10); // Suchergebnisse foreach ausgeben ($result as $key => $value) { if ($key % 2 === 0) { echo 'Log-ID:'.$value."\n"; } anders { echo 'Content:'.$value."\n"; } } ?>
Mit dem Befehl FT.SEARCH können wir Protokollinformationen innerhalb eines Zeitbereichs schnell abfragen und die Ergebnisse bei Bedarf ausgeben. Diese Methode kann komplexe Abfragebedingungen und den Abgleich mehrerer Felder unterstützen.
In Protokollanalyse- oder Überwachungssystemen sind aggregierte Statistiken eine häufige Anforderung. Sie können beispielsweise zählen, wie oft ein bestimmter Protokolltyp innerhalb eines bestimmten Zeitraums angezeigt wird. Das folgende Beispiel zeigt die Verwendung des Aggregationsbefehls von RiSearch, um diese Funktionalität zu erreichen:
<?php $redis = new Redis(); $redis-> connect('127.0.0.1', 6379); $query = '@timestamp:[1615516800 1615603200]'; // Nach Protokollen im angegebenen Zeitbereich suchen $result = $redis->rawCommand('FT.AGGREGATE', 'logs', $query, 'LOAD', 1, 'GROUPBY', 1, '@content', 'REDUCE', 'COUNT', 0, 'AS', 'count'); // Das Aggregationsergebnis ausgeben foreach ($result as $item) { echo 'Content:'.$item['@content'].', Häufigkeit des Auftretens: '.$item['count']."\n"; } ?>
Dieser Aggregationsbefehl gruppiert die Abfrageergebnisse und zählt die Auftrittszeiten jedes Protokollinhalts. Es eignet sich sehr gut für Szenarien wie Protokollanalyse und Ereignisstatistik.
Durch die Kombination von RiSearch und PHP können wir problemlos ein Hochleistungssystem aufbauen, das die Suche und Aggregation von Zeitreihendaten unterstützt. Durch die drei Schritte Indexerstellung, Suchanfrage und Aggregationsanalyse können umfangreiche Zeitreihendaten effizient verwaltet und analysiert werden. Entwickler können basierend auf den tatsächlichen Geschäftsanforderungen weitere Erweiterungen vornehmen, indem sie beispielsweise Funktionen wie Datenvisualisierung, intelligente Alarme oder mehrdimensionale Aggregation hinzufügen, um eine vollständige Datenanalyseplattform aufzubauen.