我今天遇到了一个有趣的问题:
让我们假设以下条件
1.有n个用户
2.系统在移动时收集每个驾驶员的GPS坐标
3.我们必须按降序排序按LAST_UPDATE_DATE排序的每个用户的最后10个GPS坐标记录
4.表中有超过1982008条记录
我通过查询最后{(10 [阈值])* n}记录解决了这个问题,并使用HashMap将它们排列在java中,其中用户是Key,各个坐标的列表是值
这似乎不是最好的解决方案,因为它可能会选择随机记录,并且可能无法覆盖每个用户10条记录,
在for循环中按用户查询它也不是最佳解决方案,因为它需要多个数据库调用
任何人都可以使用Spring数据JPA建议什么是最好的解决方案,我也打开使用Normal JDBC,以防Spring数据JPA无法解决这个问题
我正在使用Spring数据JPA,Mysql,Java 8
这是create table命令
@RaymondNijland好的,这是create table命令
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
;