スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Stringとint

通常、DBから取得したデータを格納するオブジェクトのメンバー変数の型はStringで統一し、必要であれば、プログラム内で変換している。DbUtilを使うと、DBの型に一致した型でないと値が正しくセットされないので、DbUtilをいじって全部Stringで取得するようにした。
しかしこうすると、その後、数値をプログラム内で計算すると再変換が必要になって、そのコストはどうなるのだろうかとふと思い、テストしてみた。まあ、大概はSQLやストアドでやってしまうので、プログラム内で処理することはそうないが)

テストは、DBからとってきた値を全件加算するだけのものだ。

static long totalInt(ResultSet rs) throws Exception{
int total = 0;
while(rs.next()) {
total += rs.getInt(1);
}
return total;
}

static long totalStr(ResultSet rs) throws Exception{
int total = 0;
while(rs.next()) {
total += Integer.parseInt(rs.getString(1));
}
return total;
}

まずResultSetに、10000件のランダムな整数が変えるようにして計測してみた。初期のオーバーヘッドを鑑みて、複数回連続で行った。

-- executeQuery (int) --
Time: 30
-- executeQuery (string)--
Time: 50
-- executeQuery (int)--
Time: 10
-- executeQuery (string)--
Time: 20
-- executeQuery (int)--
Time: 20
-- executeQuery (string)--
Time: 81
-- executeQuery (int)--
Time: 10
-- executeQuery (string)--
Time: 30
-- executeQuery (int)--
Time: 10
-- executeQuery (string)--
Time: 20
-- Close --


いずれもStringをpaseIntで変換するよりも、倍ぐらい早い。もっと差をはっきりさせるために100000件で行った。

-- executeQuery (int) --
Time: 140
-- executeQuery (string)--
Time: 241
-- executeQuery (int)--
Time: 130
-- executeQuery (string)--
Time: 350
-- executeQuery (int)--
Time: 100
-- executeQuery (string)--
Time: 200
-- executeQuery (int)--
Time: 111
-- executeQuery (string)--
Time: 200
-- executeQuery (int)--
Time: 110
-- executeQuery (string)--
Time: 200
-- Close --

やはり倍違う。この程度の差は見逃すべきか、それともやはり数値は数値で取得すべきか。

ちなみに、MySQLのJDBCで結果セットを持ってくるとき、数値を文字列で持ってきているかそれともバイナリのまま持ってきているか、ダンプを取ってみてみたところ、数値も文字列として持ってきている。ということはResultSet#getInt()のメソッドの中で、変換しているはずである。
Javaのソースを追ってみたがnativeメソッドで先はわからない。一方、Integer.parseInt()は見てみるとずいぶん複雑なことをしている。まあ、時間がかかるわけだ。

ところで、ネットワーク越しにmysqlにアクセスしようとしたら、
Access denied for user 'xxx'@'yyy' (using password: YES)
と弾かれてしまった。grant文で権限を与えても駄目。何でかと思いきやgrant文でidentified byで同時にパスワードもしておかなければならなかったのだ。何とまあ奥の深いことか。

関連記事
スポンサーサイト

コメント

非公開コメント

プロフィール

dayan

Author:dayan
小職は、SE(システムエンジニア)を専門としておりますが、技術的な情報を中心に、それ以外に経済関連の日記、たわいもない日記も載せていきます。
[公式HPもよろしく!]

天気予報

-天気予報コム- -FC2-
リンク
ブロとも申請フォーム

この人とブロともになる

カテゴリー
最近の記事
ブログ内検索
最近のコメント
最近のトラックバック
RSSフィード
月別アーカイブ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。