Как сохранить вектор данных времени / значения в базе данных - PullRequest
2 голосов
/ 29 июля 2009

Я собираю вектор пар время / значение, в данном случае задержка ввода-вывода в зависимости от времени для сервера. Я хотел бы сохранить их в базе данных MySQL, к которой можно обращаться по дате, серверу и другим метаданным.

Примеры:

  • Я хочу иметь возможность запрашивать задержки ввода-вывода с 13:00 до 15:00 для сервера Atriedes 19 августа 2007 г.
  • Я также хочу иметь возможность запрашивать время задержки ввода-вывода на сервере Harkonnen, где задержки ввода-вывода превышают 40 мс.
  • Я хочу найти все серверы с задержкой более 100 мс 1 августа 2007 года.

Как мне структурировать базу данных, чтобы это было легко?

Ответы [ 4 ]

1 голос
/ 29 июля 2009
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)
       )

Я хочу иметь возможность запрашивать задержки ввода-вывода с 13:00 до 15:00 для сервера Atriedes на August 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

Я хочу также иметь возможность запрашивать время задержки ввода-вывода на сервере Harkonnen, где задержки ввода-вывода превышают 40 мс.

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 голосов
/ 29 июля 2009

Одна строка на измерение, которая имеет что-то вроде этих столбцов:

create table measurements (
  id int primary key,
  servername varchar(64) not null,
  tstamp timestamp not null,
  latency int not null
);
0 голосов
/ 29 июля 2009

Хотя я понимаю, что вы указываете MySQL, если это новый проект разработки и есть гибкость в этом требовании, вы можете рассмотреть RRDTool . Это простая в использовании база данных (со многими пакетами, которые обеспечивают ее интеграцию) для данных временных рядов, особенно для задач sysadmin, которые вы описываете.

0 голосов
/ 29 июля 2009

имя_сервера, IOLatency, транзакцияStart

где имя_сервера - имя сервера IOLatency - время, затраченное на операцию actionStart - время начала транзакции.

Возможно, вы захотите использовать время транзакции вместо IOlatency или оба, в зависимости от того, какие запросы вы хотите оптимизировать, и соображений хранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...