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