大規模なデータセットの冬眠クエリをスピードアップするためのデータベース設計

StackOverflow https://stackoverflow.com/questions/2732817

質問

現在、冬眠でマッピングされたバスネットワークを表す以下のテーブルがあり、スプリング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コードを調整する

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);
    }
}
役に立ちましたか?

解決 2

HibernateでEhcacheを実装することで、パフォーマンスの向上が役立ちました

他のヒント

MySQLで説明コマンドを使用して、インデックスを配置するのが最善の場所についてのアイデアを提供してください。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top