我正在收集时间/值对的向量,在这种情况下,I / O延迟与服务器的时间。我想将它们存储在可以按日期,服务器和其他元数据查询的MySQL数据库中。
示例:
Atriedes
的I / O延迟。Harkonnen
上的I / O延迟时间。我应该如何构建数据库以轻松实现此目的?
答案 0 :(得分: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)
)
我希望能够在下午1:00到3:00查询
Atriedes
上的服务器August 19th, 2007
的I / O延迟
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
我还希望能够查询服务器Harkonnen上I / O延迟超过40毫秒的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
答案 1 :(得分:0)
serverName,IOLatency,transactionStart
其中serverName是服务器的名称 IOLatency是操作所花费的时间 transactionStart是事务的开始时间。
您可能还希望拥有transactionEnd时间而不是IOlatency,或者同时拥有两者,具体取决于您要优化的查询类型和存储注意事项。
答案 2 :(得分:0)
虽然我知道你在指定MySQL,但如果这是一个新的开发项目并且这个要求具有灵活性,你可以考虑RRDTool。这是一个易于使用的数据库(有许多与其集成的软件包),用于时间序列数据,特别是对于您描述的系统管理员任务。
答案 3 :(得分:0)
每个测量一行,有这些列:
create table measurements (
id int primary key,
servername varchar(64) not null,
tstamp timestamp not null,
latency int not null
);