0

現在、Spring MVC ベースのバス ルート プランナーからアクセスされた、休止状態でマッピングされたバス ネットワークを表す以下のテーブルがあります。ルート プランナー アプリケーションの実行速度を上げようとしています。上記のすべてのテーブルをリストにロードして、ルート プランナー ロジックを実行します。 .

私のパフォーマンスを高速化する方法や、大量のデータを処理するというこの問題に対処するための別の方法の提案を誰かが持っていれば幸いです

    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 から Coordinate コードへ

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);
    }
}
4

2 に答える 2

1

mysql での Explain コマンドの使用を見て、インデックスを配置するのに最適な場所について考えてみましょう。

以下のリンクはそれを非常によく説明しています。

http://forums.spry.com/howtos/1345-using-mysqls-explain-command.html

于 2010-04-29T14:01:54.213 に答える
0

Hibernate で EhCache を実装すると、パフォーマンスが向上しました

于 2010-05-19T01:59:12.060 に答える