DE102021115115A1 - Kodieren und Dekodieren von Metriken aus physikalischen Anlagen - Google Patents
Kodieren und Dekodieren von Metriken aus physikalischen Anlagen Download PDFInfo
- Publication number
- DE102021115115A1 DE102021115115A1 DE102021115115.5A DE102021115115A DE102021115115A1 DE 102021115115 A1 DE102021115115 A1 DE 102021115115A1 DE 102021115115 A DE102021115115 A DE 102021115115A DE 102021115115 A1 DE102021115115 A1 DE 102021115115A1
- Authority
- DE
- Germany
- Prior art keywords
- time
- values
- time value
- value
- data structure
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 69
- 238000000053 physical method Methods 0.000 claims abstract 2
- 238000005259 measurement Methods 0.000 description 11
- 238000009434 installation Methods 0.000 description 5
- 230000001174 ascending effect Effects 0.000 description 3
- 101100180402 Caenorhabditis elegans jun-1 gene Proteins 0.000 description 1
- 239000002253 acid Substances 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000009472 formulation Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000002028 premature Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/46—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
-
- F—MECHANICAL ENGINEERING; LIGHTING; HEATING; WEAPONS; BLASTING
- F03—MACHINES OR ENGINES FOR LIQUIDS; WIND, SPRING, OR WEIGHT MOTORS; PRODUCING MECHANICAL POWER OR A REACTIVE PROPULSIVE THRUST, NOT OTHERWISE PROVIDED FOR
- F03D—WIND MOTORS
- F03D17/00—Monitoring or testing of wind motors, e.g. diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Computerimplementiertes Kodierungsverfahren, umfassend: Empfangen einer Vielzahl physikalischer Messwerte und entsprechender Zeitwerte; Bestimmen der zeitlichen Abstände zwischen aufeinanderfolgenden Zeitwerten; Durchführen einer Lauflängenkodierung der Zeitwerte, wobei die Anzahlen aufeinanderfolgender identischer zeitlicher Abstände ermittelt werden; Speichern der ermittelten Anzahlen und des entsprechenden zeitlichen Abstands sowie aller Messwerte in mehreren Datenstrukturen, wobei in jeder der Datenstrukturen Anzahlen, zeitliche Abstände und Messwerte gespeichert werden, die aufeinanderfolgenden Zeitwerten entsprechen; Speichern eines minimalen Zeitwerts und eines maximalen Zeitwerts in jeder der Datenstrukturen, wobei der minimale Zeitwert den ältesten Zeitwert und der maximale Zeitwert den jüngsten Zeitwert in dieser Datenstruktur angibt; Speichern der Datenstrukturen in einer Datei; und Speichern eines Offsetwerts und einer Länge jeder der Datenstrukturen.
Description
- TECHNISCHES GEBIET
- Die Erfindung betrifft effizientes Speichern von Messwerten aus technischen Anlagen, beispielsweise Anlagen zur Energiegewinnung, insbesondere Windkraftanlagen. Die Erfindung betrifft insbesondere das effiziente Speichern besonders großer Datenmengen, die in zeitlichen Abständen erfasst werden.
- HINTERGRUND
- Beim Betrieb technischer Anlagen fallen Messwerte an, die in regelmäßigen oder unregelmäßigen Abständen erfasst werden und zu Analysezwecken gespeichert werden können. Eine Reihe solcher Messwerte mit zugehörigen Zeitwerten wird als Zeitreihe bezeichnet. Die konkrete Art der Messung, beispielsweise Temperatur, erbrachte Leistung, Geschwindigkeit etc., wird als Metrik bezeichnet.
-
- Zur Erfassung solcher Messwerte wird beispielsweise das SCADA-System (Supervisory Control and Data Acquisition) verwendet. Die Messwerte technischer Anlagen werden durch das System zentral erfasst und gespeichert. Derartige Systeme legen Daten in einer Datenbank ab und ermöglichen direkten Zugriff auf bestimmte Messwerte in benutzerdefinierten Zeiträumen. Eine beispielhafte SQL-Anfrage für die Messwerte eines Jahres für drei Anlagen kann beispielsweise mit der folgenden Syntax formuliert werden:
AggregateByDay ( SELECT * FROM data WHERE windkraftanlage = a1 | a2 | a3 AND metrik = m1 | m1 | m3 AND zeitraum = "letztes Jahr" )
Eine entsprechende Datenbank kann beispielsweise durch den folgenden Ausdruck definiert sein:
CREATE TABLE data10m (device_id INT, metric_id INT, timestamp_unix BIGINT, metric_value DOUBLE)
Eine solche Datenbank, die Messwerte für 2000 Anlagen mit durchschnittlich 10 Metriken erfasst, würde ca. 21 Milliarden Messwerte speichern. Ein einzelner Eintrag umfasst unkomprimiert mindestens 24 Byte, so dass pro Anlage ca. 240 MB und für 20 Anlagen entsprechend ca. 280 GB an Daten zu speichern sind. Für Anfragen von Messwerten anhand Zeitwerten ist ein Index über die Zeitwerte der Messwerte erforderlich. Dieser Index belegt bei den genannten Zahlen etwa 313 GB.
Datenmengen in dieser Größenordnung erfordern mithin viel Speicherplatz. Der Erfindung liegt die Aufgabe zugrunde, Messwerte effizient zu speichern und Anfragen zügig zu beantworten.
ZUSAMMENFASSUNG
Der Gegenstand der Erfindung wird durch die beigefügten Ansprüche definiert.
Figurenliste
-
1 zeigt ein erfindungsgemäßes Kodierungsverfahren. -
2 zeigt ein erfindungsgemäßes Dekodierungsverfahren. -
3 zeigt einen beispielhaften Aspekt des Dekodierungsverfahrens. -
4 zeigt einen weiteren beispielhaften Aspekt des Dekodierungsverfahrens.
AUSFÜHRLICHE BESCHREIBUNG
Ausführungsformen der Erfindung umfassen ein Kodierungsverfahren, das fortlaufend Messwerte und entsprechende Zeitwerte erhält und diese speichert. Die Zeitwerte können alternativ durch eine Einheit, die das Verfahren ausführt, nach Erhalt von Messwerten jeweils sofort bestimmt werden. Die Zeitwerte liegen beispielsweise in Form von Zeitstempeln vor und geben die absolute Zeit eines Tages (16:03, 15:49 etc.) an. Alternativ können die Zeitstempel als koordinierte Weltzeit (Coordinated Universal Time, UTC) oder als Unixzeit (Sekunden seit dem 1. Januar 1970, 00:00 Uhr UTC) vorliegen. Vorzugsweise kann der Zeitstempel auch eine Angabe über eine Zeitzone umfassen, aus der die Messwerte stammen. Beispielsweise kann eine Zeitzone aus der Zeitzonen-Dankenbank (tz database) der Internet Assigned Numbers Authority (IANA) gelesen werden. Die Erfassung der Zeitzone kann alternativ auch nachgelagert erfolgen zu einem Zeitpunkt, an dem Messwerte und Zeitwerte aus einer der hier offenbarten Datenstrukturen gelesen werden. Die Zeitzone kann anhand einer Ortsangabe ermittelt werden, die Bestandteil von hier offenbarten Metadaten sein kann.
Das Verfahren ermittelt für die Messwerte die zeitlichen Abstände/Differenzen zwischen aufeinanderfolgenden Messwerten, beispielsweise in Sekunden. Außerdem vergleicht das Verfahren Abweichungen zwischen aufeinanderfolgenden Zeitabständen und ermittelt die jeweilige Anzahl aufeinander folgender identischer Zeitabstände. Werden beispielsweise 500 Messwerte in konstantem Abstand von 120 Sekunden erhalten, ermittelt das Verfahren die Anzahl 500 und den Abstand 120. Bei einer Zeitreihe mit den Zeitstempeln 0, 600, 1200, 1800, 1900, 2500, 3100 lauten die ermittelten Abstände 600, 600, 600, 100, 600, 600, und die Anzahlen lauten 3, 1, 2. Gespeichert wird also beispielsweise 3×600, 1×100, 2×600.
Die ermittelten Anzahlen und deren Messwerte werden in Datenstrukturen gespeichert, beispielsweise in Arrays, Listen, Tabellen. Da die Anzahl der zu speichernden Werte in bestimmten Anwendungsfällen sehr hoch ist, wird die Anzahl der Werte je Datenstruktur in einer Ausführungsform auf einen maximalen Wert begrenzt, also etwa eine Höchstgrenze an benötigtem Speicher je Datenstruktur oder eine Höchstgrenze der Anzahl von Werten je Datenstruktur. In einer anderen Ausführungsform werden Werte unterschiedlicher Metriken in unterschiedlichen Datenstrukturen gespeichert, so dass eine Datenstruktur je Metrik vorgehalten wird.
In jeder Datenstruktur werden zeitlich aufeinander folgende Messwerte gespeichert. Das Verfahren hält für jede Datenstruktur den ältesten und den jüngsten Zeitwert fest und speichert diese entweder in der Datenstruktur selbst oder in einer Metadatei oder gesonderten Datenstruktur. Beispielsweise können in einer gesonderten Datenstruktur sämtliche jüngste und älteste Zeitwerte mit zugehöriger Datenstruktur abgelegt werden. Die Datenstrukturen werden anschließend vorzugsweise in einer einzigen Datei abgelegt, insbesondere in einer Gerätedatei, die die Daten in LittleEndian Byteorder speichert; sie können jedoch auch in mehreren solchen Dateien gespeichert werden. Das Verfahren speichert ferner einen Offsetwert und eine Länge für jede der Datenstrukturen, wiederum entweder in den Datenstrukturen selbst oder in einer Metastruktur. Der Offsetwert gibt beispielsweise eine Speicheradresse relativ zu einer Anfangsspeicheradresse der Datei an, beispielsweise in Byte. Die Länge einer Datenstruktur wird ebenfalls vorzugsweise in Byte angegeben.
In einer besonderen Ausführungsform ist für die Daten/Datenstrukturen mit Messwerten einer technischen Anlage genau eine Datei vorgesehen. Dies beschleunigt die Bearbeitung von Anfragen, da Anfragen häufig auf bestimmte Anlagen gerichtet sind. Auf diese Weise wird die Anzahl von einzulesenden Dateien von vornherein begrenzt.
In einer weiteren Ausführungsform kann jede der Datenstrukturen in einer Datei die Messwerte einer jeweiligen Metrik speichern. Beispielsweise speichert eine erste Datenstruktur gemessene Temperaturen, eine zweite Datenstruktur Leistungsmessungen, eine dritte Rotationsgeschwindigkeiten. Eine Datenstruktur, die die Messwerte einer Metrik speichert, wird auch als Metrik-Shard bezeichnet. Eine beispielhafte Datei wird unten unter Bezugnahme auf 5 erläutert.
Somit liefert das Verfahren die Möglichkeit des Speicherns von Messwerten, wobei aufgrund der Speicherung lediglich von Abständen der Zeitwerte, insbesondere lediglich einmaligem Speichern mehrfach aufeinander folgenden identischen Zeitwerten, der benötigte Speicherplatz erheblich reduziert wird. Dadurch, dass die Datenstrukturen mit ältesten und jüngsten Zeitwerten versehen sind, ermöglicht die Erfindung ein schnelles Auffinden von Messwerten bei gegebenen Zeitwerten, wie etwa durch das nachfolgend erläuterte Dekodierungsverfahren.
Ausführungsformen der Erfindung umfassen ein Dekodierungsverfahren, das in der Lage ist, Messwerte aus Zeitreihen anhand eines konkreten Zeitwerts schnell aufzufinden.
Das Verfahren erhält einen Zeitwert, für den der zugehörige Messwert nachgeschlagen werden soll. In Ausführungsformen, bei denen Messwerte gleicher Metrik in mehreren Datenstrukturen gespeichert sind, ermittelt das Verfahren unter den Datenstrukturen diejenige Datenstruktur, in der Zeitwerte abgelegt sind, die den erhaltenen Zeitwert umfassen. Zu diesem Zweck wird für jede Datenstruktur der älteste und jüngste Zeitwert ermittelt, und wird geprüft, ob der erhaltene Zeitwert in den Zeitraum zwischen dem ältesten und dem jüngsten Zeitwert fällt. In bestimmen Ausführungsformen kann dies dadurch beschleunigt werden, dass die ältesten und jüngsten Zeitwerte in aufsteigender Reihenfolge gespeichert sind, beispielsweise: Tabelle 1
Datenstruktur | Ältester Zeitwert | Jüngster Zeitwert |
1 | Tue Jun 1 09:20:00 UTC 2021 | Tue Jun 2 15:54:15 UTC 2021 |
2 | Tue Jun 2 16:04:00 UTC 2021 | Tue Jun 3 20:54:15 UTC 2021 |
3 | Tue Jun 3 21:04:00 UTC 2021 | Tue Jun 4 15:54:15 UTC 2021 |
(...) |
In diesem Beispiel enthält die Datenstruktur 1 Zeitwerte vom 1. Juni 2021, 9:20 UTC, bis zum 2. Juni 2021, 15:54:15 UTC. Die Datenstrukturen sind hier nach den aufeinanderfolgenden Zeiträumen geordnet. Liegen nun N Datenstrukturen mit zugehörigen ältesten und jüngsten Zeitwerten geordnet vor, kann zunächst geprüft werden, ob ein Zeitraum einer zeitlich mittleren Datenstruktur, also der Datenstruktur N/2 den erhaltenen Zeitwert enthält. Ist dies der Fall, wird der zugehörige Messwert aus der Datenstruktur N/2 ausgelesen. Ist der erhaltene Zeitwert jedoch größer als der jüngste Zeitwert der Datenstruktur N/2, so wird als nächstes die Datenstruktur (N/2+N)/2 geprüft. Allgemein wird jeweils geprüft, in welchem Intervall von Datenstrukturen der Zeitwert liegt. Liegt der Zeitwert in der Datenstruktur in der Mitte des Intervalls, wird diese Datenstruktur geprüft. Ist der Zeitwert kleiner als der Zeitraum dieser Datenstruktur, wird die Prüfung mit dem älteren Intervall fortgesetzt, andernfalls mit dem jüngeren Intervall. Dieses Verfahren wird unten unter Bezugnahme auf 3 näher erläutert.
Alternativ zu diesem intervallbasierten Vorgehen kann eine Datenstruktur nach der anderen geprüft werden. Hierzu lädt das Verfahren die erste Datenstruktur anhand des Offsets dieser Datenstruktur, und prüft anhand des ältesten und jüngsten Zeitwerts dieser Datenstruktur, ob der Zeitwert dort abgelegt ist. Ist dies der Fall, wird die Datenstruktur zurückgegeben. Andernfalls wird die nächste Datenstruktur anhand ihres Offsets geladen und die Prüfung wiederholt. Die Offsetwerte und Datenstrukturen werden also erst nach und nach geladen. Dies ist insbesondere von Vorteil, wenn die Datenstrukturen in einer Gerätedatei gespeichert sind, denn im Allgemeinen braucht der überwiegende Teil der Datenstrukturen überhaupt nicht geladen werden.
Sobald diejenige Datenstruktur ermittelt wurde, die den Zeitwert enthält, ermittelt das Verfahren die genaue Lage der Datenstruktur im Speicher, unter Verwendung von Offset und Länge dieser Datenstruktur, falls noch nicht geschehen. In einer Ausführungsform können Offset und Länge für jede Datenstruktur in Tabelle 1 enthalten sein. Um den Messwert des erhaltenen Zeitwerts in der Datenstruktur zu erhalten, werden die Zeitabstände und deren Anzahlen in dieser Datenstruktur untersucht. Beispielsweise erzeugt das Verfahren aus der Angabe 3x600, 1x100, 2x600 die Folge 600, 600, 600, 100, 600, 600. Die Datenstruktur oder die obige Tabelle kann zudem eine absolute Anfangszeit enthalten, so dass das Verfahren die genannte Folge durch Addition in konkrete Zeitstempel umwandeln kann. Ist die Anfangszeit beispielsweise 0, lauten die Zeitstempel 0, 600, 1200, 1800, 1900, 2500, 3100 Sekunden.
Um den Messwert zu bestimmen, der dem erhaltenen Zeitwert entspricht, kann dieser Zeitwert in einer Ausführungsform direkt als Index verwendet werden, um aus der Datenstruktur den Messwert auszulesen. Hierzu ist es erforderlich, dass die Datenstruktur Zeitwerte und Messwerte als Array gespeichert, wobei die Zeitwerte als Schlüssel (key) und die Messwerte als Werte (value) dienen.
Diese Form der Dekodierung bietet den Vorteil einer besonders schnellen Auffindung von Messwerten anhand Zeitwerten, bei gleichzeitiger kompakter Speicherung dieser Daten. In bestimmten Ausführungsformen folgt die Geschwindigkeit des Verfahrens daraus, dass es aus mehreren Datenstrukturen in wenigen Schritten diejenige Datenstruktur auffindet, die einen gesuchten Zeitwert enthält.
Die Ergebnisse können einem Benutzer angezeigt werden, wobei Messwerte vorzugsweise zeitlich geordnet dargestellt werden. In einer Ausführungsform kann bei Erstellen einer zeitlichen Abfolge berücksichtigt werden, dass Messwerte aus verschiedenen Zeitzonen stammen. Zu diesem Zweck werden die gespeicherten Zeitstempel der Messwerte mit einer jeweiligen Zeitzone kombiniert und erst anschließend miteinander verglichen, um die anzuzeigende Reihenfolge zu bestimmen.
Ausführungsformen der Erfindung umfassen auch computerlesbare Medien mit darauf gespeicherten Befehlen, die bei ihrer Ausführung durch einen Prozessor eines der hier beschriebenen Verfahren ausführen.
In Schritt 130 wird eine Lauflängenkodierung der Zeitwertdifferenzen vorgenommen, wobei für mehrere aufeinander folgende identische Zeitwertdifferenzen deren Anzahl ermittelt wird. In Schritt 140 speichert das Verfahren die ermittelten Anzahlen jeweils gemeinsam mit der entsprechenden Zeitwertdifferenz und den entsprechenden Messwerten. Außerdem wird in Schritt 150 der älteste und der jüngste Zeitwert aller betrachteten Zeitwerte ermittelt und gemeinsam mit den Zeitwerten gespeichert. Zuletzt speichert das Verfahren in Schritt 160 sämtliche Werte in einer Datenstruktur (Shard) und vermerkt dessen Offset und Länge.
Das Verfahren kann Entscheidungen umfassen darüber, ob empfangene Daten in einer gemeinsamen Datenstruktur/Shard oder in unterschiedlichen Datenstrukturen gespeichert werden sollen, und/oder ob die Datenstrukturen auf unterschiedliche Dateien verteilt werden sollen. Beispielsweise können die erhaltenen Werte eine Angabe über eine jeweilige technische Anlage enthalten, von der die Werte stammen, und das Verfahren kann die Werte der gleichen Anlage in eine einzige Datei schreiben. Ferner können Werte unterschiedlichen Metriken entsprechen, und für jede dieser Metriken wird eine eigene Datenstruktur innerhalb einer Datei vorgehalten. Eine Angabe über die Metrik kann das Verfahren beispielsweise gemeinsam mit den Werten erhalten. Beispiele für eine konkrete Implementation von Dateien und Datenstrukturen werden unten im Hinblick auf die 5 und 6 erläutert.
Schritt 220 umfasst insbesondere auch das Ermitteln von Offsetwerten der betroffenen oder auch sämtlicher Datenstrukturen. Die Offsetwerte können vorab aus einer speziellen Datenstruktur geladen worden sein (vgl. Ausführungen unten, 5 ). Die Offsetwerte dienen dazu, gezielt auf eine jeweilige Datenstruktur zugreifen zu können, ohne deren Beginn erst ermitteln zu müssen, beispielsweise durch Einlesen vorangehend gespeicherter Datenstrukturen.
Die in Schritt 220 ermittelte Datenstruktur wird nun eingelesen und der passende Eintrag in der Datenstruktur gesucht. Dies umfasst Vergleichen des gesuchten Zeitwerts mit den Zeitwerten der Datenstruktur. In einem Beispiel kann die Datenstruktur als Hashtabelle oder assoziativer Array gespeichert sein, und kann der gesuchte Eintrag unmittelbar anhand des gesuchten Zeitwerts nachgeschlagen werden. In einem anderen Beispiel kann das beispielhafte Verfahren aus 3 verwendet werden. Der aufgefundene Messwert wird schließlich in Schritt 230 zurückgegeben und die Anfrage dadurch beantwortet.
Die Anfrage kann neben dem Zeitwert auch Angaben über eine technische Anlage enthalten, und das Verfahren 200 kann neben den obigen Schritten zunächst die korrekte Datei für die Anlage auswählen.
In einem ersten Schritt 310 setzt das Verfahren Variablen „first“ und „last“ auf einen ersten beziehungsweise letzten Speicherindex einer ersten Datenstruktur. Die Speicherindizes aller Datenstrukturen müssen aufsteigend, also in der Reihenfolge aufeinanderfolgender Zeiträume der Datenstrukturen geordnet sein. Im gezeigten Beispiel wird „first“ auf den Wert 1 gesetzt, der der ersten Datenstruktur entspricht, und wird „last“ auf den Wert N gesetzt, der der letzten Datenstruktur entspricht.
In Schritt 320 wird der Mittelwert „center“ aus first und last gebildet, um die Datenstruktur in der „Mitte“ der Datenstrukturen zu identifizieren. In Schritt 330 wird der älteste und der jüngste Zeitwert der Datenstruktur bei Index „center“ eingelesen und mit dem Zeitwert verglichen. Ist der gebildete Mittelwert keine ganze Zahl, kann in geeigneter Weise gerundet werden.
Liegt der Zeitwert in dem durch den ältesten und den jüngsten Zeitwert definierten Zeitraum, gibt das Verfahren 300 in Schritt 340 als Ergebnis die Datenstruktur zurück. In bestimmten Ausführungsformen wird die Datenstruktur zu diesem Zeitpunkt überhaupt erst in den Arbeitsspeicher geladen.
Liegt der Zeitwert jedoch nicht in dem Zeitraum, so wird in Schritt 350 geprüft, ob der Zeitwert kleiner ist als der Zeitraum, also kleiner ist als dessen ältester Zeitwert. Ist dies der Fall, belegt das Verfahren in Schritt 300 die Variable „last“ mit dem aktuellen Wert der Variablen „last“ und fährt bei Schritt 320 fort. Wird in Schritt 350 jedoch festgestellt, dass der Zeitwert größer ist als der Zeitraum, also größer ist als der jüngste Zeitwert der Datenstruktur bei Index „center“, setzt das Verfahren in Schritt 370 die Variable „first“ auf den Wert von „center“ und fährt ebenfalls bei Schritt 320 fort. Das Verfahren 300 konvergiert somit rasch gegen diejenige Datenstruktur, die den gesuchten Zeitwert enthält.
In Schritt 410 setzt das Verfahren 400 Variablen „min“ und „max“ auf den ältesten beziehungsweise jüngsten Zeitwert der Datenstruktur. In Schritt 420 berechnet das Verfahren den Mittelwert aus „min“ und „max“, und belegt eine Variable „center“ mit diesem Wert. Der gesuchte Zeitwert, hier als Variable „time“ gezeigt, wird in Schritt 430 mit dem Wert der Variablen „center“ verglichen. Der in Schritt 420 berechnete Mittelwert kann zu diesem Zweck gerundet werden, um mit ganzen Zahlen zu arbeiten.
Ist der gesuchte Zeitwert mit der in „center“ gespeicherten Zeit identisch, gibt das Verfahren in Schritt 440 den Messwert der Datenstruktur, der diesem Zeitwert zugeordnet ist, zurück, und das Verfahren endet. Andernfalls wird in Schritt 450 geprüft, ob der Zeitwert kleiner ist als die in „center“ gespeicherte Zeit. Ist dies der Fall, setzt das Verfahren in Schritt 460 die Variable „max“ auf den Wert von „center“ und fährt bei Schritt 420 fort. Andernfalls setzt das Verfahren in Schritt 470 die Variable „min“ auf den Wert von „center“ und fährt ebenfalls bei Schritt 420 fort.
Der Index enthält eine Anzahl „metricCount“ der enthaltenen Metriken. In dem gezeigten Beispiel werden also verschiedene Metriken in einer Datei gespeichert. Jede Metrik enthält eine „metricID“, die bei einer Anfrage angegeben werden kann. Auf diese Weise kann der anfragende Benutzer seine Anfrage auf eine bestimmte Metrik, beispielsweise Temperatur, begrenzen. Ferner ist für jede Metrik eine Anzahl „shardCount“ von Datenstrukturen angegeben, die für diese Metrik abgelegt sind. Jeder Shard / jede Datenstruktur enthält einen ältesten Zeitwert „min“ und einen jüngsten Zeitwert „max“; die übrigen Zeitwerte eines Shards liegen zwischen diesen Werten. Ferner gibt „count“ die Anzahl dieser Zeitwerte an. Die Werte „offset“ und „length“ definieren den Beginn und das Ende der gespeicherten Zeitwerte dieses Shards, wobei „offset“ beispielsweise relativ zu dem Anfangsoffset (hier o) der Datei angegeben ist.
In dem als „Payload“ bezeichneten Abschnitt der Datei sind die Shards selbst abgelegt. Die Shards sind jeweils mit dem in 1 erläuterten Verfahren kodiert und sind hier beispielhaft als „RLDE-Shard“ (Run Length Delta Encoding) bezeichnet.
Das Speichern aller Daten in mehreren Dateien ist von Vorteil, um bei Datenbankanfragen die ACID-Eigenschaften (Atomarität, Konsistenz, Isolation, Dauerhaftigkeit) der Datenbank zu gewährleisten. Bei besonders vielen Dateien, etwa aufgrund besonders vieler erfasster technischer Anlagen, können die Dateien ferner in einer Verzeichnishierarchie angeordnet werden. Um Anfragen schnell zu bearbeiten, können die Filedescriptoren dieser Dateien offen gelassen werden.
Die erfassten technischen Anlagen können darüber hinaus mit Bezeichnern UUID assoziiert sein und beispielsweise mittels einer Hashtabelle nachgeschlagen werden, um die jeweilige Datei zu ermitteln:
type DB struct { devices map[UUID]*Device }
Eine derartige Tabelle kann beim Öffnen der Datenbank einmalig erzeugt werden anhand der vorliegenden Dateien und assoziierten Bezeichner.
Unter weiterer Bezugnahme auf 5 wird beim Starten der Datenbank, die auf die Dateien und Datenstukturen/Shards zugreift, der Header und auch der Index aus der Gerätedatei geladen (deserialisiert); der Payload-Abschnitt wird zunächst noch nicht ausgelesen, sondern erst zur Bearbeitung von Anfragen ganz oder in Teilen in den Arbeitsspeicher geladen. Somit stehen bei Eintreffen einer Anfrage bereits sämtliche Indexdaten - also jüngste und älteste Zeitwerte aller Shards sowie deren Offsets und Längen - bereit.
Die Gerätedatei kann beispielsweise in die folgende Struktur geladen werden:
type Device struct{ fd os.File index Metriclndex }
Hierbei steht „os.File“ für den Filedescriptor und „MetricIndex“ für den Index aus der Datei. Dieser MetricIndex kann wie folgt definiert sein:
type Metriclndex struct{ metrics []MetricNode }
Der MetricIndex umfasst also die vorhandenen Metriken für die technische Anlage, die der Datei entspricht. Die Variable „MetricNode“ definiert eine einzelne Metrik:
type MetricNode struct{ id UUID shards []DataShardlndexNode }„UUID“ (Universally Unique Identifier, RFC 4122) ist ein Bezeicher dieser Metrik und kann alternativ als Byte Array mit Zufallswerten implementiert sein. „DataShardIndexNode“ ist ein Array, der Angaben über die Shards enthält, die für diese Metrik erfasst wurden:
type DataShardlndexNode struct{ Min int64 Max int64 Count int64 Offset int64 Length int64 }
Hierbei stehen „Min“ und „Max“ für die bereits erläuterten ältesten und jüngsten Zeitwerte dieses Shards, „Count“ für die Anzahl der Einträge/Zeitwerte in dem Shard, und „Offset“ und „Length“ für Offset und Länge der Speicherposition des Shards bezüglich des Anfangsoffsets.
Die Verwendung der hier beschriebenen Verfahren zum Dekodieren von Messwerten aus Shards bei gegebenem Zeitwert erfordern ein Einlesen einzelner Datenstrukturen/Shards erst, wenn auf deren konkrete Zeitwerte/Messwerte zugegriffen werden soll - nicht jedoch, wenn lediglich geprüft wird, ob ein gegebener Zeitwert zwischen dem ältesten und dem jüngsten Zeitwert eines Shards liegt; diese Information kann aus dem Index bezogen werden. Erst wenn festgestellt wird, dass ein gesuchter Zeitwert in dem von einem bestimmten Shard abgedeckten Zeitraum liegt, wird dieser eingelesen / in den Arbeitsspeicher geladen.
Unkodiert kann ein Zeitwert mit zugehörigem Messwert beispielsweise durch die folgende Struktur dargestellt werden:
type TimeValue struct { Time int64 Value int64 } type TimeSeries []TimeValue
Hierbei speichert „TimeValue“ einen Zeitwert „Time“ und einen Messwert „Value“. Der Zeitwert kann beispielsweise als Unix-Zeitstempel in Sekunden formatiert sein, um Vergleichsoperationen zu vereinfachen. Der Messwert kann wie gezeigt als natürliche Zahl (64 bit integer) gespeichert sein; bei Metriken mit Nachkommastellen können die Messwerte entsprechend skaliert werden, wobei der Skalierungsfaktor an zentraler Stelle, beispielsweise in der Datenstruktur aus 5 , gespeichert wird.
Die in allen obigen Ausführungsbeispielen verwendeten Variablennamen sind beliebig austauschbar. Dem Fachmann ist zudem ersichtlich, dass je nach Ausführungsform bestimmte Variablen entbehrlich sind. Die hier verwendeten Definitionen von Datenstrukturen sind ohne weiteres durch technisch äquivalente Definitionen zu ersetzen, insbesondere durch Formulierungen in anderen Programmiersprachen.
Claims (7)
- Computerimplementiertes Kodierungsverfahren, umfassend: Empfangen einer Vielzahl physikalischer Messwerte und entsprechender Zeitwerte; Bestimmen der zeitlichen Abstände zwischen aufeinanderfolgenden Zeitwerten; Durchführen einer Lauflängenkodierung der Zeitwerte, wobei die Anzahlen aufeinanderfolgender identischer zeitlicher Abstände ermittelt werden; Speichern der ermittelten Anzahlen und des entsprechenden zeitlichen Abstands sowie aller Messwerte in mehreren Datenstrukturen, wobei in jeder der Datenstrukturen Anzahlen, zeitliche Abstände und Messwerte gespeichert werden, die aufeinanderfolgenden Zeitwerten entsprechen; Speichern eines minimalen Zeitwerts und eines maximalen Zeitwerts in jeder der Datenstrukturen, wobei der minimale Zeitwert den ältesten Zeitwert und der maximale Zeitwert den jüngsten Zeitwert in dieser Datenstruktur angibt; Speichern der Datenstrukturen in einer Datei; und Speichern eines Offsetwerts und einer Länge jeder der Datenstrukturen.
- Kodierungsverfahren nach
Anspruch 1 , wobei Speichern der ermittelten Anzahlen, der jeweiligen zeitlichen Abstände sowie aller Messwerte umfasst, als Messwerte lediglich die Differenzen aufeinanderfolgender Messwerte zu speichern. - Kodierungsverfahren nach
Anspruch 1 oder2 , wobei die Datei eine Gerätedatei ist und das Speichern der Datenstrukturen in der Datei mittels LittleEndian Byteorder erfolgt. - Computerimplementiertes Dekodierungsverfahren, umfassend: Empfangen eines Zeitwerts; Ermitteln eines von mehreren Offsetwerten, die einer jeweiligen Datenstruktur in einer Datei entsprechen, in der physikalische Messwerte mit entsprechenden Zeitwerten gespeichert sind, wobei für aufeinanderfolgende identische Zeitabstände die Anzahl dieser Zeitabstände sowie der Zeitabstand gespeichert ist, und in der ein minimaler Zeitwert und ein maximaler Zeitwert sowie eine Länge der Datenstruktur gespeichert ist, wobei der minimale Zeitwert den ältesten Zeitwert und der maximale Zeitwert den jüngsten Zeitwert in dieser Datenstruktur angibt, wobei der ermittelte Offsetwert derjenigen Datenstruktur entspricht, deren minimaler Zeitwert kleiner oder gleich dem empfangenen Zeitwert ist und deren maximaler Zeitwert größer oder gleich dem empfangenen Zeitwert ist; und Einlesen der Datenstruktur anhand des ermittelten Offsets und der Länge der Datenstruktur, und Ermitteln desjenigen Messwerts, der dem empfangenen Zeitwert entspricht.
- Dekodierungsverfahren nach
Anspruch 4 , wobei die Messwerte in den Datenstrukturen lediglich als Differenzen aufeinanderfolgender Messwerte gespeichert sind. - Dekodierungsverfahren nach
Anspruch 4 oder5 , wobei die Datei eine Gerätedatei ist, und wobei vor dem Ermitteln des Offsetwerts lediglich die Offsetwerte der Datei in einen Arbeitsspeicher geladen werden und weitere Daten aus der Datei erst während des Einlesens der Datenstruktur in den Arbeitsspeicher geladen werden. - Computerlesbares Medium mit darauf gespeicherten Anweisungen, die, wenn sie durch einen Prozessor ausgeführt werden, das Verfahren nach einem der vorstehenden Ansprüche durchführen.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102021115115.5A DE102021115115A1 (de) | 2021-06-11 | 2021-06-11 | Kodieren und Dekodieren von Metriken aus physikalischen Anlagen |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102021115115.5A DE102021115115A1 (de) | 2021-06-11 | 2021-06-11 | Kodieren und Dekodieren von Metriken aus physikalischen Anlagen |
Publications (1)
Publication Number | Publication Date |
---|---|
DE102021115115A1 true DE102021115115A1 (de) | 2022-12-15 |
Family
ID=84192382
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE102021115115.5A Pending DE102021115115A1 (de) | 2021-06-11 | 2021-06-11 | Kodieren und Dekodieren von Metriken aus physikalischen Anlagen |
Country Status (1)
Country | Link |
---|---|
DE (1) | DE102021115115A1 (de) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160321323A1 (en) | 2015-04-29 | 2016-11-03 | Gordon GAUMNITZ | Run Index Compression |
-
2021
- 2021-06-11 DE DE102021115115.5A patent/DE102021115115A1/de active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160321323A1 (en) | 2015-04-29 | 2016-11-03 | Gordon GAUMNITZ | Run Index Compression |
Non-Patent Citations (1)
Title |
---|
CHIAROT, G.; SILVESTRI, C.: Time series compression: a survey, Januar 2021. URL: https://arxiv.org/abs/2101.08784 [abgerufen am 10. Februar 2022] |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69701786T2 (de) | Verbesserte indirekte Adressierung für Dateisysteme | |
DE69913618T2 (de) | Verfahren zur Erzeugung eines Prüfpunktes, welcher eine Basisdatei beschreibt, und Verfahren zur Erzeugung einer Differenzdatei zwischen einer aktualisierten Datei und einer Basisdatei | |
DE69333422T2 (de) | Auffindung von Zeichenketten in einer Datenbank von Zeichenketten | |
DE69415115T2 (de) | Rechnerspeichersicherstellung | |
DE112007003678B4 (de) | Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung | |
DE69323863T2 (de) | Verfahren und Vorrichtung zur Adressübersetzung | |
DE112012005533B4 (de) | Unterstützende Abfrage und ein Abfragen | |
DE2131066C3 (de) | Anordnung zum Adressieren eines Tabellenspeichers | |
DE69131941T2 (de) | System und verfahren für informationsauffindung | |
DE69231113T2 (de) | Speicherverfahren für bibliographische Information über Daten aus einer endlichen Textquelle, und insbesondere Dokumentverbuchungen zur Verwendung in einem Suchsystem für Ganztextdokumente | |
DE202012013427U1 (de) | Verknüpfung von Tabellen in einem MapReduce-Verfahren | |
DE102021102442A1 (de) | Katalog der mit schnappschüssen verbundenen dateien | |
DE102008027605A1 (de) | System und Verfahren zur rechnerbasierten Analyse großer Datenmengen | |
DE102014208212A1 (de) | Ableiten eines gerätespezifischen Wertes | |
DE2208664A1 (de) | Verfahren zur Decodierung eines vorsatzfreien Verdichtungscodes veränderlicher Länge | |
WO2015043823A1 (de) | Verfahren und system zum bewerten von erhobenen messwerten eines systems | |
EP3707854A1 (de) | Verfahren zum verknuepfen eines ersten datenblocks mit einem zweiten datenblock, verfahren zum ueberpruefen der integritaet einer blockchain-struktur, vorrichtung und computerprogrammprodukt | |
AT520746B1 (de) | Verfahren zur Erkennung von anormalen Betriebszuständen | |
DE2939411A1 (de) | Datenverarbeitungsanlage mit virtueller speicheradressierung | |
DE102016226338A1 (de) | Bitsequenzbasiertes Datenklassifikationssystem | |
DE102021115115A1 (de) | Kodieren und Dekodieren von Metriken aus physikalischen Anlagen | |
EP1273007B1 (de) | Verfahren zur bestimmung eines charakteristischen datensatzes für ein datensignal | |
EP1330740B1 (de) | Verfahren zum zugriff auf eine speichereinheit bei der suche nach teilzeichenfolgen sowie zugehörige speichereinheit | |
EP3729293B1 (de) | Verfahren zur reduzierung der rechenzeit einer datenverarbeitungseinrichtung | |
Bills et al. | A scale to measure the socioeconomic status of occupations in Brazil |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R012 | Request for examination validly filed | ||
R016 | Response to examination communication | ||
R081 | Change of applicant/patentee |
Owner name: WORLDIETY GMBH, DE Free format text: FORMER OWNER: WORLDIETY GMBH, 26129 OLDENBURG, DE |