Проектирование базы данных для регистрации больших объемов данных - Система слежения за автомобилем - PullRequest
0 голосов
/ 24 декабря 2018

Я создаю систему слежения за автомобилями и хочу хранить данные, которые каждый автомобиль отправляет каждые 5 секунд, в базе данных MySql.Предполагая, что у меня есть 1000 автомобилей, передающих данные в мою систему через 5 секунд, и данные хранятся в одной таблице.В какой-то момент я хотел бы запросить эту таблицу для создания отчетов для конкретного транспортного средства.Я запутался между регистрацией всех данных транспортных средств в одной таблице или созданием таблицы для каждого транспортного средства (1000 таблиц).Что является более эффективным?

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Один стол, а не один стол на машину.База данных с 1000 таблицами будет запускать мусорную корзину, когда вы попытаетесь ее сохранить или сохранить.

Сохраняйте строки этой таблицы настолько короткими, насколько это возможно;в нем будет много записей.

Индексируйте эту таблицу как по временной, так и по (car_id, timestamp).Второй индекс позволит вам эффективно отчитываться по отдельным автомобилям.

Читать https://use -the-index-luke.com /

0 голосов
/ 24 декабря 2018

Это «верхушка айсберга».Здесь и на dba.stackexchange есть около 5 тем, касающихся отслеживания легковых и грузовых автомобилей.Вот еще несколько советов.

  • Сохраняйте типы данных как можно меньше.Ваша таблица (таблицы) станет огромной - угроза переполнения диска и замедление запросов из-за «громоздких строк означает, что в ОЗУ может быть кэшировано меньше строк».
  • Сохраняете ли вы «ту же» информациюдля машины, которая бездействует всю ночь?Подумайте о том, сколько дискового пространства это занимает.
  • Если вы используете жесткие диски, наберите 100 INSERTs / секунду, прежде чем вам понадобится изменить дизайн процесса загрузки.(1000 / сек для твердотельных накопителей.) Существуют методы, которые могут дать вам 10x, может быть, 100x, но вы должны применять их.
  • Будете ли вы иметь несколько серверов, собирающих данные, а затем делать простые вставки в базу данных?Я хочу сказать, что , что может быть вашим первым узким местом.
  • PRIMARY KEY(car_id, ...), так что доступ к данным для одного автомобиля эффективен.
  • Сегодня вы говорите, что данные будутнавсегдаНо рассчитали ли вы, насколько большим должен быть ваш диск?
  • Один из способов радикального сокращения данных - это консолидация «старых» данных, скажем, с 1-минутными интервалами, скажем, через один месяц.Начните думать о том, что вы хотите сохранить.Например: мин / макс / средняя скорость, а не только мгновенная скорость.Иметь дополнительную запись, когда происходит какое-либо существенное изменение (двигатель включен; двигатель выключен; подушка безопасности сработала и т. Д.)
  • (вероятно, у меня есть еще советы.)
0 голосов
/ 24 декабря 2018

ОК, 86400 секунд в день / 5 = 17280 записей на машину и день.Результатом будет 17 280 000 записей в день.Это не проблема для MYSQL в целом.И хорошо разработанную таблицу будет легко запросить.Если вы идете за одним столом для каждого автомобиля - что будет, когда в будущем будет 2000 автомобилей.Но вопрос также: как долго вы хотели бы хранить данные?Это легко рассчитать, когда ваша база данных составляет 200 ГБ, 800 ГБ, 2 ТБ, ....

...