Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Архив базы данных с возможностью быстрого доступа
 
 автор: Киналь   (01.03.2012 в 22:41)   письмо автору
 
 

Попросили меня обдумать вот какую задачу. Есть n-ное количество датчиков (в перспективе — до 256 штук), эти датчики раз в несколько минут опрашиваются, и их показания записываются в базу данных MySQL. Система должна работать годами, при этом оператор (то есть пользователь) должен иметь возможность в любой момент запросить данные, например, с 1 по 10 января прошлого года с датчиков номер 6, 54 и 142. Проблема мне видится в том, что записей при таком подходе будет довольно приличное количество (при опросе раз в минуту получается 525 600 строк в год, каждая минимум по 256 байт, то есть примерно 128 Мб; а если датчики будут с большей разрядностью, чем 8 бит, то уже 256 Мб). Поэтому хочется как-то организовать архив. Сделать просто дамп нельзя — тогда не будет быстрого доступа. Решение вроде бы есть здесь], но нет ли более изящного способа?

Или я зря беспокоюсь, и MySQL такие объёмы данных ничуть не смутят?

  Ответить  
 
 автор: Valick   (01.03.2012 в 22:53)   письмо автору
 
   для: Киналь   (01.03.2012 в 22:41)
 

вот тут некоторые размышления

  Ответить  
 
 автор: Киналь   (01.03.2012 в 23:37)   письмо автору
 
   для: Valick   (01.03.2012 в 22:53)
 

>можно использовать что-то типа буфера (ещё одна таблица куда сплошным потоком будут >записываться ! домен ! страница ! юзер ! , а потом уже раз в час или сутки будут обрабатываться >результаты и на их основе будут изменяться данные в основных таблицах, а буфер очищаться.

Увы, у меня нет обработки данных. То есть этот вариант сводится к тому, что описан по моей ссылке — просто периодическое скидывание свежей информации в другую таблицу.

  Ответить  
 
 автор: Valick   (02.03.2012 в 00:07)   письмо автору
 
   для: Киналь   (01.03.2012 в 23:37)
 

да, но не забывайте о том что в этот буфер идут сплошные инсерты, селект допустим раз в сутки или на тот момент как понадобится свежая статистика, поэтому все поля можно оставить без индекса
а уже в основной таблице можно грамотно расставить индексы

  Ответить  
 
 автор: Киналь   (02.03.2012 в 15:36)   письмо автору
 
   для: Valick   (02.03.2012 в 00:07)
 

Хм. А что значит (в данном случае) "грамотная расстановка индексов"? Одна таблица, все строки вида id | datetime | val1 | val2 | ... valN. Что тут можно придумать с индексами?

  Ответить  
 
 автор: cheops   (02.03.2012 в 15:55)   письмо автору
 
   для: Киналь   (02.03.2012 в 15:36)
 

>id | datetime | val1 | val2 | ... valN
Зря, кстати, так храните, добавится у вас через несколько лет еще пару тысяч датчиков и узнаете, каково это с терабайтной многолетней таблицей связываться... Лучше бы еще нормализовать до уровня
id | datetime | N | val
тогда бы таблица могла обслуживать сколько хочешь датчиков, более того, часть датчиков можно было бы выключать из статистики и вообще система была бы более гибкой... не зря же от параллельных интерфейсов COM, LPT, отказываются в пользу последовательных, но более универсальных USB. Только тут экономите место и увеличиваете гибкость.

  Ответить  
 
 автор: Киналь   (02.03.2012 в 17:28)   письмо автору
 
   для: cheops   (02.03.2012 в 15:55)
 

А ведь это отличная мысль! Тем более что в момент запуска ожидается не больше десятка датчиков, а остальные «когда-нибудь потом».
Вот так поговоришь с умным человеком, сразу всё проще станет)

С сегментацией, к сожалению, не знаком; попробовал на скорую руку погуглить, нашёл ссылку на вашу книгу) Может, есть какие-нибудь статьи на эту тему?

UPD Погуглил более вдумчиво, нашёл вот это. Кажется, это в точности то, что мне нужно. Ещё раз спасибо!

  Ответить  
 
 автор: cheops   (02.03.2012 в 17:42)   письмо автору
 
   для: Киналь   (02.03.2012 в 17:28)
 

Ищите по ключевому слову Partitioning (Partition) - 17 глава мануала. Если возникнут трудности спрашивайте (только лучше в новой теме).

  Ответить  
 
 автор: Valick   (02.03.2012 в 17:49)   письмо автору
 
   для: Киналь   (02.03.2012 в 17:28)
 

А ведь это отличная мысль!
это не совсем так, это всего лишь соблюдение правил и норм построения баз данных
правила нормализации базы данных
просто со временем они доводятся до автоматизма :)

  Ответить  
 
 автор: Киналь   (02.03.2012 в 17:55)   письмо автору
 
   для: Valick   (02.03.2012 в 17:49)
 

Всё в мире относительно) Я с БД работал только на уровне INSERT/UPDATE/SELECT, так что для меня это именно «отличная мысль»=)

  Ответить  
 
 автор: cheops   (02.03.2012 в 15:42)   письмо автору
 
   для: Киналь   (01.03.2012 в 22:41)
 

Вы же вероятно не ограничены версией MySQL, значит можете использовать сегментацию? Хоть по годам, хоть по месяцам пилите таблицу - физически они будут храниться отдельно, вплоть до расположения на разных дисках, а логически будут выглядеть как единая таблица.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования