我今天遇到了一个有趣的问题:
让我们假设以下条件
1。有n个用户
2。系统会收集每个驾驶员移动时的GPS坐标
3。我们必须按LAST_UPDATE_DATE降序对每个用户查询最后10个GPS坐标记录
4。表格中有超过1982008条记录
我通过查询最后的 {(10 + [阈值])* n} 记录解决了这个问题,并使用HashMap将它们安排在Java中,其中用户为Key,相应坐标的列表为值
这似乎不是最好的解决方案,因为它可能选择随机记录,并且可能不会为每个用户掩盖10条记录,
在for循环中按用户查询它也不是最佳解决方案,因为它需要多个数据库调用
有人可以建议使用Spring数据JPA来解决此问题的最佳方法吗,如果Spring数据JPA无法解决此问题,我也愿意使用Normal JDBC
我为此使用Spring数据JPA,Mysql,Java 8
这是为此创建表的命令
@RaymondNijland好吧,这是创建表命令
require('dotenv').config();
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
var request = require('request-promise');
var get = function(arg1, arg2, arg3, arg4) {
request(`https://www.googleapis.com/customsearch/v1?key=${process.env.API_KEY}&cx=${process.env.CX}&q=${arg1}`, async function(err, res, body) {
var obj = JSON.parse(body);
var url = obj.items[0].formattedUrl;
var part = await request(`${url}/staffel-${arg2}/episode-${arg3}`, function(err, res, body) {
const dom = new JSDOM(`${body}`);
var part = dom.window.document.getElementsByClassName(arg4)[0];
return part;
});
console.log(part);
});
};
答案 0 :(得分:1)
最好的解决方案通常是将排序和提取留给数据库。 如果需要使用Java在本地对数据进行排序和提取,则需要将所有数据从数据库提取到Java服务器。这会产生巨大的网络流量开销,从而导致性能下降。
有许多数据库可以很好地处理地理空间数据,并且可以查询按距离或类似方式排序的表。如果每个用户只需要获取最后10个职位,则不需要地理空间特征,任何数据库都可以正常工作。
有关MySql中的解决方案,请阅读this article。
对于地理数据库,您也可以使用MySql。这里是MySql支持的spatial data types的链接。