Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Организация хранения технологического архива (Max) 29/10/2004 - 06:26:55
      Re: Организация хранения технологического архива (cooler13) 29/10/2004 - 18:56:25
      Re: Организация хранения технологического архива (Dinky) 29/10/2004 - 19:04:31
      Re: Организация хранения технологического архива (cooler13) 29/10/2004 - 19:06:42
      Re: Организация хранения технологического архива (Max) 30/10/2004 - 08:15:17
      Re: Организация хранения технологического архива (cooler13) 31/10/2004 - 04:27:01
      Re: Организация хранения технологического архива (Max) 01/11/2004 - 11:48:01

> Original message text:
> From: Max - 29/10/2004 - 06:26:55
> Subject:Организация хранения технологического архива
> -----------------
> Помогите с организацией хранения данных технологического архива в MySQL.
> Задача следующая:
> - xранить круглосуточный архив приблизительно 5000 тысяч параметров;
> - скорость изменения параметра приблизительно один раз в 5 секунд;
> - ведение круглосуточного хранения данных.
>
> Мною было реализовано два варианта хранения данных в архиве.
>
> Первый вариант был заключался в том что данные хранились в единственной таблице в следующей структуре:
> TableName DATA
> |DT (IDX) | ID (IDX) | Value | Trust|
> 12-03-2004 19:15:01 | 15 | 543.24| 0 |
> 12-03-2004 19:15:01 | 3053 | 1.35| 0 |
> Проблема данной структуры в том, что при выборке (select * from data where ID=15 and DT<='12-03-2004 19:15:01' desc limit 0,1)Union(select * from data where ID=3053 and DT<='12-03-2004 19:15:01' desc limit 0,)… уходит очень много времени, а сервер сильно загружается таким запросом.
>
> Второй вариант хранение каждой переменной в отдельной таблице с индексированным полем дата. Этот вариант всем хорош кроме того что перегружается дисковая система поскольку обращение идет к 4000 таблиц с следующей структурой:
> TableName A15
> |DT (IDX) | Value | Trust|
> 12-03-2004 19:15:01 | 543.24| 0 |
>
> TableName A3053
> |DT (IDX) | Value | Trust|
> 12-03-2004 19:15:01 | 1.35| 0 |
>
> Запрос к данным выглядит следующим образом:
> (SELECT *,0 FROM A4592 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,1 FROM A4593 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,2 FROM A4594 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,3 FROM A4596 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,4 FROM A4595 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,5 FROM A4588 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,6 FROM A4589 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,7 FROM A4590 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,8 FROM A4591 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,9 FROM A4583 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,10 FROM A4584 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,11 FROM A4585 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)UNION(SELECT *,12 FROM A4586 WHERE D<=1071317389750 ORDER BY D DESC LIMIT 1)
> В данной структуре архива MySQL загружается максимум на 10 процентов, что дало возможность использования данной структуры архива.
>
> Каким образом можно организовать хранение данных, чтобы минимально использовать дисковую подсистему SQL сервера с максимальной скоростью выборок различного набора переменных за определенный срез времени?
>
>
>


From: Max - 30/10/2004 - 08:15:17
Subject:Организация хранения технологического архива
-----------------
По первому запросу (пропустил Order By D).
(select * from data where ID=15 and D<= 1070694000000 order by D desc limit 0,1)Union(select * from data where ID=3053 and D<=1070694000000 order by D desc limit 0,1)…

5000 тысяч параметров это серьезно.

Выборки идут по группе каналов за определенный временной срез.
Индексация должна вестись по дате и по ID.

Архивная таблица (первый вариант).
create table Data (D bigint, ID smallint, Val Float, Trust tinyint, KEY(D), KEY (ID))
D=UnixTime*1000+Ms;

Канал в идентифицируется по ID во втором по имени таблицы. Проиндексированные поля ID, DT (DateTime).
Недостаток этого варианта слишком медленная выборка среза 70 каналов при 80-100 % -ой загрузке процессора.

----------------------------------------

Во втором варианте вместо индексации по ID используется выборка по отдельным таблицам (ID присутствует в имени таблицы A4999).
Запросы выборки исполняются быстро. Недостаток загрузка дисковой подсистемы при записи данных в таблицы.

Архивные таблицы A0..A4999 (второй вариант)
create table A4999( D bigint unsigned default NULL, V float default NULL, F tinyint default NULL, PRIMARY KEY (D))
D=UnixTime*1000+Ms;

Мне удалось несколько разгрузить дисковую подсистему множественной вставкой данных (INSERT ( ),( )…( )) для каждого канала (т.е. запись 30 секундного набора данных по каждому каналу для второго варианта).

Можно ли использовать для этой задачи BLOB поля в MySQL?
Для второго варианта не предпочтительней ли выбор одно-файлового SQL сервера (например FireBird 1.5 на ядре INTRBASE)?



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
18198



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |