Skip to content

Instantly share code, notes, and snippets.

@melpon
Last active February 7, 2016 14:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save melpon/81c2e1440842540e601a to your computer and use it in GitHub Desktop.
Save melpon/81c2e1440842540e601a to your computer and use it in GitHub Desktop.

WandboxのDB分析

Wandboxの2015年のデータを分析してみた。

対象データはSQLiteに永続化されたコード、つまりpermlinkの対象になってるコードだけ。 コードの実行回数ではないので注意(実行する方も一応ログ取ってるけど分析がめんどい)。

対象期間は2015年1月1日〜2015年12月31日。

総保存回数

14307回。1日平均約39回

SELECT
  COUNT(*)
FROM
  code
WHERE
  created_at >= '2015-01-01 00:00:00' AND created_at <= '2015-12-31 23:59:59'

月別保存回数

保存回数
01 846
02 825
03 846
04 738
05 875
06 1266
07 1350
08 1182
09 1346
10 1657
11 1768
12 1608

なんか6月に前月比で約1.45倍とかなり増えてる。 10月にも前月比で約1.23倍とそこそこ増えてる。

SELECT
  strftime('%m', created_at) AS m,
  COUNT(*)
FROM
  code
WHERE
  created_at >= '2015-01-01 00:00:00' AND created_at <= '2015-12-31 23:59:59'
GROUP BY
  m
ORDER BY
  m

コンパイラ別保存回数

コンパイラ 保存回数
gcc-head 4924
clang-head 3083
gcc-4.8.2-c 778
gcc-4.9.2 717
gcc-5.2.0 697
clang-3.6 362
gcc-5.1.0 361
gcc-4.8.2 262
mcs-head 239
php-5.5.6 225
gcc-4.9.1 222
clang-3.7 166
clang-3.5 144
ruby-head 138
java7-openjdk 134
python-3.3.2 127
clang-3.3-c 117
gcc-4.7.3 110
gdc-head 110
python-head 107
scala-2.12.x 103
gcc-4.8.1 91
gcc-4.4.7 82
ghc-7.8.3 74
gcc-4.9.0 60
ghc-head 56
python-2.7.3 56
ruby-2.0.0-p247 55
gcc-4.3.6 53
mcs-2.6.7 53
clang-3.4 51
bash 45
php-head 45
gcc-4.6.4 40
python-3.5.0 40
clisp-2.49.0 26
elixir-head 26
node-head 24
vim-7.4.729 22
mcs-3.2.0 20
python-2.7-head 20
clang-3.3 19
clang-3.0 17
gcc-4.5.4 16
groovy-2.2.1 15
python-3.4.3 15
gcc-4.8.2-pp 14
rust-head 14
clang-3.1 13
perl-5.18.0 12
lua-5.3.0 11
node-0.10.24 11
ruby-1.9.3-p0 11
rust-1.0.0 9
scala-2.11.x 9
clang-3.2 8
sqlite-head 8
mozjs-24.2.0 6
lua-5.2.2 5
scala-2.11.2 5
mruby-head 3
perl-head 3
rill-head 3
swift-2.2 3
coffee-script-1.7.1 2
pypy-2.1 2
sqlite-3.8.1 2
coffee-script-head 1
fpc-2.6.2 1
ghc-7.6.3 1
java8-openjdk 1
perl-5.19.2 1
python-3.5.1 1

gcc-head, clang-head だけで全体の約56%を占めてて面白い。

C#とPHPの保存回数が他と比べて多いのが気になるけど、個別に見るのも面倒なので気にしない。

SELECT
  compiler,
  COUNT(*) AS cnt
FROM
  code
WHERE
  created_at >= '2015-01-01 00:00:00' AND created_at <= '2015-12-31 23:59:59'
GROUP BY
  compiler
ORDER BY
  cnt DESC

利用ファイル数

Wandboxが複数ファイルに対応したのが4月17日なので、それ以降の記録になる。

ファイル数 保存回数
1 9632
2 1372
3 166
4 73
5 71
6 8
7 13
9 1
10 6
11 2
12 3
13 4
15 1
17 22
18 1
29 1
34 9
47 1
182 29

約15%は2ファイル以上で保存しているらしい。 死に機能になってると思ってたけど、意外と使われてて驚き。

あと182ファイル…一体どこの Boost.Hana なんだ…。

SELECT
  cnt + 1,
  COUNT(*)
FROM (
  SELECT
    code.id,
    COUNT(codes.code_id) AS cnt
  FROM
    code
  LEFT JOIN
    codes
  ON
    code.id = codes.code_id
  WHERE
    created_at >= '2015-04-17 00:00:00' AND created_at <= '2015-12-31 23:59:59'
  GROUP BY
    code.id
)
GROUP BY
  cnt
ORDER BY
  cnt

終了コード別保存回数

終了コード 保存回数
0 10355
1 3217
2 13
3 14
4 10
5 6
6 1
7 2
8 5
10 3
11 2
14 1
20 1
22 1
24 7
30 1
34 1
35 1
40 1
42 5
43 2
46 5
50 2
55 2
72 4
73 1
79 1
84 1
101 10
120 1
123 1
124 1
125 1
127 1
134 1
139 1
168 1
201 4
223 1
254 22
255 55

終了コードは0か1で約99.6%を占めてる。

成功率(0の割合)は約75%。

終了コードは0〜255までの256種類あるんだけど、これだけ保存されてて256種類中50種類しかコンプリートできていないのが面白い。

SELECT
  ec,
  COUNT(*)
FROM (
  SELECT
    code.id,
    MIN(CAST(link_output.output AS INTEGER)) AS ec
  FROM
    code, link, link_output
  WHERE
    created_at >= '2015-00-00 00:00:00' AND created_at <= '2015-12-31 23:59:59' AND
    code.id = link.code_id AND
    link.code_id = link_output.link_id AND
    link_output.type = 'ExitCode'
  GROUP BY
    code.id
)
GROUP BY
  ec
ORDER BY
  ec

出力サイズ

コンパイル時の標準出力:

文字数 保存回数
10〜99 183
100〜999 8
1,000〜9,999 4
10,000〜99,999 5

コンパイル時の標準エラー:

文字数 保存回数
1〜9 3
10〜99 202
100〜999 3354
1,000〜9,999 826
10,000〜9,999 173
100,000〜999,999 19

実行時の標準出力:

文字数 保存回数
0 4
1 2370
10 4195
100 1480
1,000 220
10,000 98
100,000 53

実行時の標準エラー:

文字数 保存回数
1 15
10 225
100 213
1000 21
10,000 14

実行時の標準出力は99文字以下が約78%なのに、コンパイル時の標準エラーは100〜999文字だけで約73%を占めてる。 やはりコンパイル時のエラー出力は多い(あるいは多いからこそ保存して共有する)。

SELECT
  type,
  cases,
  COUNT(*)
FROM (
  SELECT
    code.id,
    link_output.type AS type,
    SUM(LENGTH(output)) AS len,
    CASE
      WHEN SUM(LENGTH(output)) >= 1000000 THEN 1000000
      WHEN SUM(LENGTH(output)) >= 100000 THEN 100000
      WHEN SUM(LENGTH(output)) >= 10000 THEN 10000
      WHEN SUM(LENGTH(output)) >= 1000 THEN 1000
      WHEN SUM(LENGTH(output)) >= 100 THEN 100
      WHEN SUM(LENGTH(output)) >= 10 THEN 10
      WHEN SUM(LENGTH(output)) >= 1 THEN 1
      ELSE 0
    END AS cases
  FROM
    code, link, link_output
  WHERE
    created_at >= '2015-00-00 00:00:00' AND created_at <= '2015-12-31 23:59:59' AND
    code.id = link.code_id AND
    link.id = link_output.link_id AND
    link_output.type IN('CompilerMessageS', 'CompilerMessageE', 'StdOut', 'StdErr')
  GROUP BY
    code.id, link_output.type
)
GROUP BY
  type, cases
ORDER BY
  type, cases

コードサイズ

TODO

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment