如何在数据库中存储时间/值数据向量

时间:2009-07-29 16:31:53

标签: mysql database database-design

我正在收集时间/值对的向量,在这种情况下,I / O延迟与服务器的时间。我想将它们存储在可以按日期,服务器和其他元数据查询的MySQL数据库中。

示例:

  • 我希望能够在2007年8月19日下午1:00到3:00查询服务器Atriedes的I / O延迟。
  • 我还希望能够查询I / O延迟超过40毫秒的服务器Harkonnen上的I / O延迟时间。
  • 我想在2007年8月1日找到所有延迟超过100毫秒的服务器。

我应该如何构建数据库以轻松实现此目的?

4 个答案:

答案 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
);