powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ведение лога величины
5 сообщений из 5, страница 1 из 1
Ведение лога величины
    #35836572
Ketzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно сохранять значение некой величины (float) в момент времени (datetime)
1 запись каждые две минуты, т.е. 720 в день, 262800 записей в год.
Таких величин 15.
Выборки нужно будет производить по интервалу времени для какой-либо величины .
Добавление значений производит один клиент, запросы на выборку могут посылать несколько клиентов (локально или по сети), запросы на добавление и выборку могут приходить одновременно.
Мой вариант: использовать 15 отдельных таблиц, в которых всё и хранить.

Вопросы : нужно ли поле id, можно ли в качестве первичного ключа использовать поле с датой временем, по какому полю индексировать и нужно ли это делать? Какую технологию использовать InnoDB или MyISAM?

Простите за каламбур, мало смыслю в БД, но задача встала - надо разбираться.
...
Рейтинг: 0 / 0
Ведение лога величины
    #35836766
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ketzer Вопросы : нужно ли поле id, можно ли в качестве первичного ключа использовать поле с датой временем, по какому полю индексировать и нужно ли это делать? Какую технологию использовать InnoDB или MyISAM?Сильно не рекемоендуется делать время PK, потому что если по какой-то причине у вас появится 2 записи одной секундой - то вы их вобще не сможете вставить.

По поводу индексирования, типа БД (я так понимаю это MySQL) - создайте тестовую БД с данными за 2-3 года и погоняйте запросы.

Ваши размеры - не бог весть что, поэтому проблемы могут возникнуть либо из-за MySQL, либо из-за железа.
...
Рейтинг: 0 / 0
Ведение лога величины
    #35839062
Ketzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, вы правильно понимаете, это MySQL :)

Создал две таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE `counter`.`data1` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `datetime` DATETIME NOT NULL,
  `value` FLOAT NOT NULL,
  PRIMARY KEY (`id`)
)
ENGINE = InnoDB;
и
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE `counter`.`data2` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `datetime` DATETIME NOT NULL,
  `value` FLOAT NOT NULL,
  PRIMARY KEY (`id`)
)
ENGINE = MyISAM;

Загнал по миллиону записей в каждую. В таблицу на InnoDB это заняло около восьми часов (загонял каждую запись отдельно без открытия/закрытия транзакций), на MyISAM меньше 30 минут.
Погоняв SELECT, вижу что MyISAM в разы, а местами порядки быстрее.
Далее провёл такой тест:
пускаю двух отдельных клиентов которые с периодичностью 2 сек каждый добавляет новую запись, в это время третий клиент начинает выполнять запрос:
Код: plaintext
SELECT datetime, value FROM data2 WHERE datetime > '2008-02-26 11:14:00' AND datetime < '2019-02-26 11:15:01'
Под который естественно попадают все записи в базе.
Результат: запрос на выборку выполняется около 15 секунд, но при этом два добавляющих клиента работают нормально - все записи добавились.
Но почему они нормально добавились одновременно с запросом SELECT??
Получается насколько MyISAM быстрее настолько InnoDB надёжнее? И в чём тогда эта надёжность?
...
Рейтинг: 0 / 0
Ведение лога величины
    #35839191
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KetzerРезультат: запрос на выборку выполняется около 15 секунд, но при этом два добавляющих клиента работают нормально - все записи добавились.
Но почему они нормально добавились одновременно с запросом SELECT??
Получается насколько MyISAM быстрее настолько InnoDB надёжнее? И в чём тогда эта надёжность?А в чем здесь проблема?
SELECT не блокирует таблицу, а значит ничего не мешает добавлять.
К тому же, весь вопрос упирается есть ли "грязное чтение" в MySQL или нет.
В Oracle - его нет и SELECT не увидит записи, которые начали вставляться после запуска SELECT-а. Но это не мешает их вставить.

Я давно не работал с MySQL (почти 8 лет), поэтому нынешних его фичь не знаю.
Про грязное чтение - даже если оно есть, то так ли оно страшно вам?

Про надежность InnoDB - основа ее надежности - журналирование, насколько помню.
Скажется это в случае, например, скоропостижной пропажи питания или других сбоев.
...
Рейтинг: 0 / 0
Ведение лога величины
    #35841120
Ketzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BelyА в чем здесь проблема?
С форматом таблиц я определился, теперь определяюсь с dbEngine, вот здесь опыт бы очень пригодился. Как выбрать?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ведение лога величины
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]