2017年02月02日

初めてやってみたこと SQLiteとテーブルやらビューやら

ここ数日で作成した部分成果をアップする。
ソースコードをアップすると商材屋に丸パクリされるのでそれはなし。
あくまでも自分用メモ。

最初にやってみたのは、バックテスト取引ログを読み込んで、時間別に集計する。
時間別の勝ち数負け数、勝ち値幅計、負け値幅計を計算
次に
時間別の勝ち越し数、勝ち越し値幅をもとにスコア点数化して、どの時間がスコアが高いか低いか、ひとめでわかるようにしてみた。

sql書いてて、はまったのはトリガー処理、テーブル単位での更新で動くんじゃなくて、レコード単位での更新で動く、つまりレコードを1行いれると1回トリガーが動く、1万件のデータをいれると1万回動くのだw

テーブルやビューの流れ関係をまとめたER図がこれ
書きかけのEA図.png

MT4インポートTempにデータを流し込むと、カラムを追加してMT4DATAテーブルにコピーしてるのだが、この処理を最初はトリガーでやってて1万件importするのに10分かかった。CPUは1コアしか使わないが、コア使用率80%以上で、RAMDISKに移しても処理時間は少ししか減らないし、コア使用率が50%くらいあった。
あまりにおかしいので調べてみたら、トリガーがレコード挿入の都度動いてた。
まるでSSDの負荷テストしてるようなもん、SSD寿命が減ってもったいない。
トリガーでコピーするのをやめてSQLバッチ処理に切り替えたら1秒ちょいくらいで終わるようになった。
データ取り込みが終わるとビューを重ねていって、スコア集計するときのみテーブルにためている。
ビューでもいいのだが、SQL文が長くなるのでワークテーブルにためている。

20年位前のふっるーいデータベース開発でよくあったやり方だ。

とりあえずこんなやり方で通貨ペアひとつあたりの処理は終わるようになった。
処理時間はデータ流し込み時間込みで2秒以内。
ストレージは安物SSDで、インメモリ化はまだ採用していない。

これから複数通貨対応をDB上でやっていくとディスクIOが増えてくるのでSSDの消耗を減らすためにインメモリに移していく予定。

利用パソコンのスペックは
Windows7 SP1
CPU i7-3770K 定格クロックで利用
メモリ16GB
SSDはいろいろ、DBファイルを置いてるのは ADATA SP550の120GB



為替ブログ FX 専業投資家へ
タグ: sqlite
posted by ワンさん at 07:44 | 大阪 ☀ | Comment(0) | TrackBack(0) | データ分析 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/446562898
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック