仕様策定中1
DB構造再編 - diary 六帖の続き
csvを作ってみると、小田急小田原線のダイヤのデータは平日上下合わせて約1MBにすぎないことがわかった。1MBくらいならメモリ中にロードしたところで大したものではない。いまやスマホでさえどの機種でもメモリはGB単位だ。全部メモリ中にDBの内容を読み込んでしまった方が、後々楽だろう。Ajax使わなくてもいいんじゃない?
しかし起動時にこの量を全部ダウンロードするのはあまり得策ではない。おそらく多摩線、江ノ島線を足して2MBといったところだろうが、ADSLで基地局から遠い場合は100KB/秒くらいだと20秒、スマホの転送量制限を超えた場合は128kbps=16KB/sなので2分もかかってしまう。これはダサい。やはりAjaxは必要か。
検証のため旧TrainNaviのサーバーとのやり取りを調べたところ、小田急全線の1時間分の列車情報をゲットするのに約5秒かかり、データ量は2-300KB程度。でかいな。サーバーからJSONを返しているのでかなりの冗長性があるようだ。
[{"LineID":"1","TrainID":"10","StartStationID":"47","EndStationID":"41","StartTime":"05:10:00","EndTime":"05:18:00"},{"LineID":"1","TrainID":"10","StartStationID":"41","EndStationID":"40","StartTime":"05:19:00","EndTime":"05:25:00"},{"LineID":"1","TrainID":"10","StartStationID":"40","EndStationID":"39","StartTime":"05:25:00","EndTime":"05:29:00"}
以下略
無駄だなぁ。。JSONはやめてcsvを返すようにして、クライアント側でパースするようにした方がよさそうだ。1,10,47,41,5:10,5:18 で十分だよね。
で、DBしか使わない場合は拡張性に乏しくなるので、csvをサーバーにアップロードしても使えるようにする。もちろんDBの方が高速だが、扱うデータが高々2MBとそれほど大きくないのでファイルアクセスしてもよいでしょう。共通のインターフェースを作って、どちらでも使えるようにする。Ajaxで路線名、取得範囲をphpに投げて、phpから該当するデータを返してもらう。
csvはヘッダも必要だな。tntrainテーブルに列車の寿命(始発時間と終着時間)を書いておけば、読み込みもスムーズになるでしょう。