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

Mysql 如何在数据库中存储时间/值数据向量,mysql,database,database-design,Mysql,Database,Database Design,我正在收集时间/值对向量,在本例中,是服务器的I/O延迟与时间的关系。我想将它们存储在MySQL数据库中,该数据库可以按日期、服务器和其他元数据进行查询 示例: 我希望能够查询2007年8月19日下午1:00到3:00之间服务器的I/O延迟。 我还希望能够查询服务器Harkonnen上I/O延迟超过40毫秒的时间。 我想找到2007年8月1日延迟超过100毫秒的所有服务器。 我应该如何构造我的数据库以轻松实现这一点?服务器名、iLocatency、transactionStart 其中serve

我正在收集时间/值对向量,在本例中,是服务器的I/O延迟与时间的关系。我想将它们存储在MySQL数据库中,该数据库可以按日期、服务器和其他元数据进行查询

示例:

我希望能够查询2007年8月19日下午1:00到3:00之间服务器的I/O延迟。 我还希望能够查询服务器Harkonnen上I/O延迟超过40毫秒的时间。 我想找到2007年8月1日延迟超过100毫秒的所有服务器。
我应该如何构造我的数据库以轻松实现这一点?

服务器名、iLocatency、transactionStart

其中serverName是服务器的名称 IOLatency是指手术所需的时间 transactionStart是事务的开始时间

您可能还希望使用transactionEnd time而不是IOlatency,或者同时使用transactionEnd time和IOlatency,具体取决于您希望优化的查询类型和存储注意事项

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)
       )
我希望能够查询2007年8月19日下午1:00到3:00之间服务器的I/O延迟

我还希望能够查询服务器Harkonnen上I/O延迟超过40毫秒的时间

我想找到2007年8月1日延迟超过100毫秒的所有服务器


虽然我知道你在指定MySQL,但是如果这是一个新的开发项目,你可能会考虑到这个要求。这是一个简单易用的数据库,包含许多软件包,可与之集成用于时间序列数据,特别是用于您描述的系统管理任务。

每个度量值有一行,类似于以下列:

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

不需要ID列;服务器加时间戳应该是唯一的,因此组合应该是主键。
SELECT  *
FROM    t_latency
WHERE   server_id = @id_of_harkonnen
        AND latency > .04
--  will use ix_latency_server_latency
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
create table measurements (
  id int primary key,
  servername varchar(64) not null,
  tstamp timestamp not null,
  latency int not null
);