Я разрабатываю приложение, состоящее из сервера в node.js, в основном сокета, который слушает входящие соединения.Производительность socket nodejs + mysql
Данные, которые поступают на мой сервер, поступают из GPS-трекеров (30 приблизительно), которые отправляют по 5 записей в минуту каждый, поэтому через минуту a будет иметь 5*30 = 150
записей, через час у меня будет 150*60 = 9000
записей, в день 9000*24 =216000
и в месяц 216000*30 = 6.480.000
миллионов записей.
В дополнение к широте и долготе я должен хранить в базе данных (MySql) совокупную дистанцию каждого трекера. Каждый трекер отправляет на серверные позиции, и каждый раз, когда я получаю данные, мне приходится вычислять км между 2 пунктами (чтобы уменьшить работу в базе данных, когда она содержит миллионы записей).
Вопрос в том, Каков правильный способ суммирования километров и его хранения?
Я думаю, что вся база данных не является решением, потому что в миллионах записей будет очень медленно. Может быть, каждый раз, когда я должен хранить новую точку (150 раз в минуту), могу ли я сделать выбор последней записи в базе данных, а затем суммировать накопленный километр с новым расходом?
Вы можете использовать хранилище данных в памяти, такое как [Redis] (http://redis.io), чтобы сохранить кумулятивное расстояние. Это ключ -> хранилище значений, поэтому вы можете использовать идентификатор трекера для ключа, а затем использовать метод добавления, чтобы добавить новое расстояние к общей сумме. –
Согласованный @DanielWaghorn мы используем комбинацию Redis и MongoDB на работе и имеем дело с 500 тыс. Записей в день. Redis - отличное решение для хранения данных ключа/значения, которые в противном случае были бы дорогими в db-запросе. В вашем случае вы будете вычислять расстояние между точками каждую минуту, а затем хранить эту сумму в качестве нового значения для этого конкретного ключа в вашем магазине redis. Redis является атомарным и синхронизирует любые записи с ним, как идеальный вариант использования для вашего проекта. Мы также создали задание cron, которое периодически записывает значение на диск в случае сбоев в redis store (еще не произошло) – Alex