加速大型数据集hibernate查询的数据库设计
我目前有下表,表示hibernate中映射的总线网络,可从基于SpringMVC的总线路线规划器访问 我试图使我的route planner应用程序执行得更快,我将上面所有的表加载到列表中以执行route planner逻辑 如果有人对如何加快我的表演有任何想法,我将不胜感激 或者有没有其他方法来解决处理大量数据的问题的建议加速大型数据集hibernate查询的数据库设计,hibernate,database-design,spring-mvc,database-performance,Hibernate,Database Design,Spring Mvc,Database Performance,我目前有下表,表示hibernate中映射的总线网络,可从基于SpringMVC的总线路线规划器访问 我试图使我的route planner应用程序执行得更快,我将上面所有的表加载到列表中以执行route planner逻辑 如果有人对如何加快我的表演有任何想法,我将不胜感激 或者有没有其他方法来解决处理大量数据的问题的建议 Coordinate Connections Table (INT,INT,INT)( Containing 50,000 Coordinate Connectio
Coordinate Connections Table (INT,INT,INT)( Containing 50,000 Coordinate Connections)
ID, FROMCOORDID, TOCOORDID
1 1 2
2 1 17
3 1 63
4 1 64
5 1 65
6 1 95
Coordinate Table (INT,DECIMAL, DECIMAL) (Containing 4700 Coordinates)
ID , LAT, LNG
0 59.352669 -7.264341
1 59.352669 -7.264341
2 59.350012 -7.260653
3 59.337585 -7.189798
4 59.339221 -7.193582
5 59.341408 -7.205888
Bus Stop Table (INT, INT, INT)(Containing 15000 Stops)
StopID RouteID COORDINATEID
1000100001 100 17
1000100002 100 18
1000100003 100 19
1000100004 100 20
1000100005 100 21
1000100006 100 22
1000100007 100 23
这是从每个表加载所有数据所需的时间:
stop.findAll = 148ms, stops.size: 15670
Hibernate: select coordinate0_.COORDINATEID as COORDINA1_2_, coordinate0_.LAT as LAT2_, coordinate0_.LNG as LNG2_ from COORDINATES coordinate0_
coord.findAll = 51ms , coordinates.size: 4704
Hibernate: select coordconne0_.COORDCONNECTIONID as COORDCON1_3_, coordconne0_.DISTANCE as DISTANCE3_, coordconne0_.FROMCOORDID as FROMCOOR3_3_, coordconne0_.TOCOORDID as TOCOORDID3_ from COORDCONNECTIONS coordconne0_
coordinateConnectionDao.findAll = 238ms ; coordConnectioninates.size:48132
休眠注释
@Entity
@Table(name = "STOPS")
public class Stop implements Serializable {
@Id
@GeneratedValue
@Column(name = "COORDINATEID")
private Integer CoordinateID;
@Column(name = "LAT")
private double latitude;
@Column(name = "LNG")
private double longitude;
}
@Table(name = "COORDINATES")
public class Coordinate {
@Id
@GeneratedValue
@Column(name = "COORDINATEID")
private Integer CoordinateID;
@Column(name = "LAT")
private double latitude;
@Column(name = "LNG")
private double longitude;
}
@Entity
@Table(name = "COORDCONNECTIONS")
public class CoordConnection {
@Id
@GeneratedValue
@Column(name = "COORDCONNECTIONID")
private Integer CoordinateID;
/**
* From Coordinate_id value
*/
@Column(name = "FROMCOORDID", nullable = false)
private int fromCoordID;
/**
* To Coordinate_id value
*/
@Column(name = "TOCOORDID", nullable = false)
private int toCoordID;
//private Coordinate toCoordID;
}
HashMap->CoodinateID到坐标代码
private void setupCoordinateIDToCoordinate() {
HashMap<Integer, Coordinate> coordinateIDToCoordinate = new HashMap<Integer, Coordinate>();
List<Coordinate> coordinates = coordinateDao.findAll();
Iterator <Coordinate> itr = coordinates.iterator();
Coordinate c;
while(itr.hasNext()) {
c = itr.next();
coordinateIDToCoordinate.put(c.getCoordinateID(),c);
}
}
private void setupCoordinatedToCoordinate(){
HashMap CoordinatedToCoordinate=新HashMap();
列表坐标=coordinateDao.findAll();
迭代器itr=坐标。迭代器();
坐标c;
while(itr.hasNext()){
c=itr.next();
coordinatedtocoordinate.put(c.getcoordinated(),c);
}
}
看看在mysql中使用explain命令,让您知道在哪里最好放置索引
下面的链接很好地解释了这一点
使用Hibernate实现EhCache帮助我提高了性能您有相关的索引吗?你用的是什么数据库?我用的是mysql数据库,我不知道你说的相关索引是什么意思?我对上面的代码做了一些小改动,包括使用hashmap通过CoordinateID快速访问坐标