У меня есть вопрос относительно хранения большого количества данных. Ситуация следующая:
Я хочу хранить
- GPS-координаты (широта и долгота) (каждую минуту или даже меньше интервала, но я рассматриваю каждую минуту)
- Событие, которое можно повторить для нескольких координат
- Дата и время въезда (не знаю, что лучше использовать в моем случае)
- (идентификатор пользователя)
Я хочу иметь возможность запросить:
- Событие по зоне (определение диапазона широты и долготы, например, от (1,1) до (2,2))
- Отслеживание пользователей от даты X до даты Y (один или несколько пользователей)
Пока я думал над решением:
Решение 1
id_user (int)
id_experince (int)
id_event (int)
dt (datetime)
latitude (decimal)
longitude (decimal)
Я начал делать некоторые вычисления, и это было бы что-то вроде:
- около 500 записей в день на пользователя
- поскольку я готовлю приложение для некоторой загрузки, может быть около 100-150 пользователей, что будет 75000 записей в день
- через месяц появятся миллионы записей
Вероятно, Решение 1 не является хорошим решением, поскольку размер базы данных растет очень быстро.
Решение 2
Имеют 2 таблицы, одна из которых будет агрегировать координаты в соответствии с событием, например, у меня есть событие "Ужин", и это занимает 30 минут, поэтому 30 записей будут сгруппированы в одном поле с типом BLOB. Эта таблица будет выглядеть так:
id_user (int)
id_experience (int)
id_event (int)
dt (datetime)
coordinates(blob)
И еще одна таблица, у которой есть рассчитанные местоположения с некоторыми "шириной" и "длиной", имеющие указатель на первую таблицу
latitude (decimal)
longitude (decimal)
id_entry_in_first_table (int)
Это решение только частично решает мою проблему, представьте, что некоторые события не будут длиться больше нескольких минут и есть необходимость во второй базе данных.
Решение 3
Возможно, это не очень правильное решение, но, похоже, оно имеет какой-то смысл. У меня есть пользователь, связанный с каким-то опытом, который имеет дату начала и дату окончания. Когда опыт добавится, я создам дамп данных для этого опыта и сохраню в файл, удалив записи, связанные с опытом. Когда пользователь захочет обратиться к «архивированному» опыту, я загружу данные во временную таблицу и добавлю их в течение одного дня (например), в этом случае я сохраню данные в соответствии с решением 1.
Основной вопрос: приемлемы ли какие-либо из представленных решений с точки зрения производительности базы данных? Есть ли лучшее решение для моей проблемы?