2009-07-29 1 views
2

Ich sammle einen Vektor von Zeit/Wert-Paaren, in diesem Fall I/O-Latenz gegen die Zeit für einen Server. Ich möchte sie in einer MySQL-Datenbank speichern, die nach Datum, Server und anderen Metadaten abfragbar ist.So speichern Sie einen Vektor von Zeit/Wert-Daten in einer Datenbank

Beispiele:

  • ich die I/O-Latenzzeiten von 13.00 bis 15.00 Uhr für den Server Atriedes am 19. August 2007
  • Ich möchte auch die Abfrage der Lage sein wollen in der Lage sein, die Zeiten abzufragen, in denen die I/O-Latenz auf dem Server Harkonnen liegt, wo die I/O-Latenzen über 40 ms liegen.
  • Ich möchte alle Server finden, die 2007

Wie soll ich meine Datenbank-Struktur am 1. August Latenzen über 100 ms musste dies leicht zu?

Antwort

1
CREATE TABLE t_latency (
     id INT NOT NULL PRIMARY KEY, 
     server_id INT NOT NULL, 
     ts DATETIME NOT NULL, 
     latency FLOAT NOT NULL, 
     KEY ix_latency_server_time_latency (server_id, ts, latency), 
     KEY ix_latency_server_latency (server_id, latency), 
     KEY ix_latency_time (ts) 
     ) 

Ich möchte in der Lage, die I/O-Latenzzeiten von 13.00 bis 15.00 für den Server Atriedes auf August 19th, 2007

SELECT * 
FROM t_latency 
WHERE server_id = @id_of_atriedes 
     AND ts BETWEEN '2007-08-19 01:00' AND '2007-08-19 03:00' 
-- will use ix_latency_server_time_latency 

ich abfragen wollen auch in der Lage sein, die Zeiten abzufragen, in denen die I/O-Latenz auf Server-Harkonnen liegt, bei denen die I/O-Latenzen über 40 ms liegen.

SELECT * 
FROM t_latency 
WHERE server_id = @id_of_harkonnen 
     AND latency > .04 
-- will use ix_latency_server_latency 

ich alle Server finden möchten, die auf August 1st, 2007 Latenzen über 100 ms hatte.

SELECT DISTINCT server 
FROM t_latency 
WHERE ts >= '2007-08-01 00:00' 
     AND ts < '2007-08-02 00:00' 
     AND latency > 0.1 
-- will use ix_latency_time 
+0

Keine Notwendigkeit für die ID-Spalte; Der Server plus Zeitstempel sollte eindeutig sein und daher sollte die Kombination der Primärschlüssel sein. –

+0

@ Jonathan: Woher weißt du, dass sie einzigartig sein werden? – Quassnoi

0

-serverName, IOLatency, transactionStart

wo Servername der Name des Servers ist IOLatency ist die Zeit, die Operation nahm transactionStart ist die Startzeit der Transaktion.

Eventuell möchten Sie auch die Transaktion End time anstelle von IOlatency oder beide haben, abhängig von der Art der Abfragen, die Sie optimieren und Speicherüberlegungen möchten.

0

Während ich verstehe Sie MySQL sind die Angabe, ob dies ein neues Entwicklungsprojekt ist und es gibt Flexibilität auf dieser Anforderung Sie RRDTool betrachten könnten. Dies ist eine einfach zu verwendende Datenbank (mit vielen Paketen, die eine Integration damit ermöglichen) für Zeitreihendaten, speziell für Sysadmin-Aufgaben, wie Sie sie beschreiben.

0

Eine Zeile pro Messung, die so etwas wie diese Spalten:

create table measurements (
    id int primary key, 
    servername varchar(64) not null, 
    tstamp timestamp not null, 
    latency int not null 
);