2009-07-29 58 views
2

我收集的時間/值對的載體,在這種情況下,I/O延遲隨時間變化的服務器。我想將它們存儲在可按日期,服務器和其他元數據查詢的MySQL數據庫中。如何存放時間/值數據的矢量數據庫中的

例子:

  • 我希望能夠查詢I/O延遲從下午1:00到下午3:00爲8月19日服務器Atriedes,2007
  • 我也想能夠查詢的時間,關於服務器Harkonnen的I/O延遲,其中I/O等待時間超過40毫秒。
  • 我想找到所有有超過100毫秒的延遲時間8月1日的服務器,2007年

我應該如何構建我的數據庫,很容易讓這個?

回答

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) 
     ) 

我希望能夠查詢I/O延遲從下午1:00到3:00 PM服務器AtriedesAugust 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 

我想還能夠查詢I/O延遲超過40毫秒的服務器Harkonnen上的I/O延遲時間。

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

我想找到所有有上述100毫秒延遲上August 1st, 2007的服務器。

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

無需ID列;服務器加時間戳應該是唯一的,因此組合應該是主鍵。 – 2009-07-29 16:47:49

0

服務器名,IOLatency,transactionStart

其中servername是服務器 IOLatency的名稱是操作了 transactionStart是交易開始的時間。

您可能還需要有transactionEnd時間,而不是IOlatency,或有兩個,這取決於你想優化和存儲方面的考慮是什麼樣的查詢。

0

雖然我理解你指定的MySQL,如果這是一個新的開發項目,並有此要求的靈活性,你可以考慮RRDTool。這是一個簡單易用的數據庫(提供許多與其集成的軟件包),適用於時間序列數據,尤其適用於您描述的系統管理員任務。每次測量

0

一行有類似這些列:

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