加速大型数据集hibernate查询的数据库设计

加速大型数据集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

我目前有下表,表示hibernate中映射的总线网络,可从基于SpringMVC的总线路线规划器访问 我试图使我的route planner应用程序执行得更快,我将上面所有的表加载到列表中以执行route planner逻辑

如果有人对如何加快我的表演有任何想法,我将不胜感激 或者有没有其他方法来解决处理大量数据的问题的建议

    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快速访问坐标