Сегодня я столкнулся с интересной проблемой:
Предположим, что выполнены следующие условия
1.Количество пользователей n
2.Система собирает GPS-координаты каждого водителя при его движении
3.Мы должны запросить последние 10 записей GPS-координат на пользователя, отсортированные по LAST_UPDATE_DATE в порядке убывания
4.В таблице более 1982008 записей
Я решил эту проблему, запросив последние {(10 + [пороговое значение]) * n} записей, и расположил их в java, используяHashMap, где пользователь имеет значение Key, а список соответствующих координат - значения
. Это не лучшее решение, так как оно может выбирать случайные записи и может не покрывать 10 записей на пользователя,
Запрос его на пользователя в цикле for также не является лучшим решением, так как для этого потребуется несколько вызовов базы данных.
Кто-нибудь может подсказать, что было бы наилучшим возможным решением для этого с использованием данных Spring JPA, я тожеоткрыт для использования обычного JDBC в случае, если данные Spring JPA не могут решить эту проблему
Я использую данные Spring JPA, Mysql, Java 8 для этого
Вот команда создания таблицы для этого
@ RaymondNijland Хорошо, конечно, вот команда создания таблицы
CREATE TABLE `gps_coordinate` (
`ID` BIGINT(50) NOT NULL AUTO_INCREMENT,
`user_id` VARCHAR(255) NULL DEFAULT '0',
`driver_id` INT(20) NULL DEFAULT '0',
`latitude` VARCHAR(50) NULL DEFAULT '0.00000000',
`longitude` VARCHAR(50) NULL DEFAULT '0.00000000',
`distance_in_miles` VARCHAR(50) NULL DEFAULT '0.00',
`distance_in_kms` VARCHAR(50) NULL DEFAULT '0.00',
`device_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_by` VARCHAR(50) NULL DEFAULT 'Anonymous',
`created_date` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
`updated_by` VARCHAR(50) NULL DEFAULT 'Anonymous',
`updated_date` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ID_HUB`),
INDEX `user_fk` (`user_id`),
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=208445
;