rabbit-slide-myokoym-study-material-20130203 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rabbit +1 -0
- data/README.rdoc +26 -0
- data/Rakefile +9 -0
- data/config.yaml +21 -0
- data/gomiterminal.png +0 -0
- data/how-to-handle-million-data.rab +228 -0
- data/lavie.png +0 -0
- data/million_data.jpg +0 -0
- data/pdf/study-material-20130203-how-to-handle-million-data.pdf +0 -0
- metadata +71 -0
data/.rabbit
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
how-to-handle-million-data.rab
|
data/README.rdoc
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
= 百万件くらいのデータの扱い方
|
2
|
+
|
3
|
+
件数が多いデータの扱い方について。 キーワードは『荷物運び』です。
|
4
|
+
|
5
|
+
※いわゆるビッグデータの話ではありません(Hadoopなどは千兆単位のデータを扱う)
|
6
|
+
|
7
|
+
== 作者向け
|
8
|
+
|
9
|
+
=== 表示
|
10
|
+
|
11
|
+
rake
|
12
|
+
|
13
|
+
=== 公開
|
14
|
+
|
15
|
+
rake publish
|
16
|
+
|
17
|
+
== 閲覧者向け
|
18
|
+
|
19
|
+
=== インストール
|
20
|
+
|
21
|
+
gem install rabbit-slide-myokoym-study-material-20130203
|
22
|
+
|
23
|
+
=== 表示
|
24
|
+
|
25
|
+
rabbit rabbit-slide-myokoym-study-material-20130203.gem
|
26
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require "rabbit/task/slide"
|
2
|
+
|
3
|
+
# Edit ./config.yaml to customize meta data
|
4
|
+
|
5
|
+
Rabbit::Task::Slide.new do |task|
|
6
|
+
# task.spec.files += Dir.glob("doc/**/*.*")
|
7
|
+
# task.spec.files -= Dir.glob("private/**/*.*")
|
8
|
+
# task.spec.add_runtime_dependency("YOUR THEME")
|
9
|
+
end
|
data/config.yaml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
id: study-material-20130203
|
3
|
+
base_name: how-to-handle-million-data
|
4
|
+
tags:
|
5
|
+
- rabbit
|
6
|
+
- unix
|
7
|
+
presentation_date:
|
8
|
+
version: 1.0.0
|
9
|
+
licenses:
|
10
|
+
- CC BY 3.0
|
11
|
+
slideshare_id:
|
12
|
+
speaker_deck_id:
|
13
|
+
ustream_id:
|
14
|
+
vimeo_id:
|
15
|
+
author:
|
16
|
+
markup_language: :rd
|
17
|
+
name: Masafumi Yokoyama
|
18
|
+
email: myokoym@gmail.com
|
19
|
+
rubygems_user: myokoym
|
20
|
+
slideshare_user: myokoym
|
21
|
+
speaker_deck_user: myokoym
|
data/gomiterminal.png
ADDED
Binary file
|
@@ -0,0 +1,228 @@
|
|
1
|
+
= 百万件くらいの\nデータの扱い方
|
2
|
+
|
3
|
+
: subtitle
|
4
|
+
Unix大量ゴミファイル事件簿
|
5
|
+
: author
|
6
|
+
Masafumi Yokoyama
|
7
|
+
# : institution
|
8
|
+
# 所属
|
9
|
+
# : content-source
|
10
|
+
# イベント名
|
11
|
+
# : date
|
12
|
+
# 2013/02/03
|
13
|
+
: allotted-time
|
14
|
+
30m
|
15
|
+
: theme
|
16
|
+
lightning-clear-blue
|
17
|
+
|
18
|
+
= Rabbitについて
|
19
|
+
|
20
|
+
プレゼンテーションツール
|
21
|
+
* 実装: Ruby/GTK+
|
22
|
+
* 動作: PC-UNIX/Win/Mac
|
23
|
+
* 文章とデザインの分離
|
24
|
+
* バージョン管理しやすい
|
25
|
+
|
26
|
+
== プロパティ
|
27
|
+
|
28
|
+
: background-image
|
29
|
+
lavie.png
|
30
|
+
|
31
|
+
: background-image-relative-width
|
32
|
+
50
|
33
|
+
|
34
|
+
= テーマ
|
35
|
+
|
36
|
+
* 件数が多いデータの扱い方
|
37
|
+
|
38
|
+
= キーワードは『荷物運び』
|
39
|
+
|
40
|
+
# image
|
41
|
+
# src = million_data.jpg
|
42
|
+
# relative_height = 100
|
43
|
+
|
44
|
+
= 一度に運ぶ量
|
45
|
+
|
46
|
+
* 大量
|
47
|
+
* 持てない
|
48
|
+
* 少量
|
49
|
+
* 夜になっても終わらない
|
50
|
+
* 適量
|
51
|
+
* 明るいうちに終わる
|
52
|
+
|
53
|
+
== プロパティ
|
54
|
+
|
55
|
+
: background-image
|
56
|
+
million_data.jpg
|
57
|
+
|
58
|
+
: background-image-relative-width
|
59
|
+
35
|
60
|
+
|
61
|
+
= 考え方
|
62
|
+
|
63
|
+
* 件数が多いデータは、適量に分けて処理する
|
64
|
+
* まずは適量を見極める
|
65
|
+
|
66
|
+
= 具体例
|
67
|
+
|
68
|
+
* 大量ファイルの削除
|
69
|
+
* Unixサーバー
|
70
|
+
* GUIが使えない
|
71
|
+
|
72
|
+
= 問題
|
73
|
+
|
74
|
+
* ディレクトリ内の.gomiファイルを全て削除したい
|
75
|
+
|
76
|
+
= 状況分析
|
77
|
+
|
78
|
+
ls(dir)コマンドの末端
|
79
|
+
|
80
|
+
# image
|
81
|
+
# src = gomiterminal.png
|
82
|
+
# relative_height = 100
|
83
|
+
|
84
|
+
= 分析結果
|
85
|
+
|
86
|
+
* 名前が長いファイルが大量にある
|
87
|
+
* ファイル名: 210バイト
|
88
|
+
* ファイル数: 10,000
|
89
|
+
|
90
|
+
# テストデータの作り方
|
91
|
+
$ cd /tmp ; mkdir gomi ; cd gomi
|
92
|
+
$ ruby -e '0.upto((10 ** 4) - 1) {|i| `touch #{"gomi" * 50}_#{"%04d" % i}.gomi` }'
|
93
|
+
$ (cd .. ; tar czf gomi.tar.gz gomi) #バックアップ
|
94
|
+
$ (cd .. ; tar xzf gomi.tar.gz) #復元
|
95
|
+
|
96
|
+
= (1) 普通に削除
|
97
|
+
|
98
|
+
$ ls | wc -l #ファイル数を数える
|
99
|
+
10000
|
100
|
+
|
101
|
+
$ rm *.gomi
|
102
|
+
/bin/rm: cannot execute [引数リストが長すぎます]
|
103
|
+
|
104
|
+
$ ls | wc -l
|
105
|
+
10000
|
106
|
+
|
107
|
+
= 消せない!
|
108
|
+
|
109
|
+
= 原因
|
110
|
+
|
111
|
+
* 一度にrmコマンドに渡せる引数には上限がある
|
112
|
+
|
113
|
+
== プロパティ
|
114
|
+
|
115
|
+
: background-image
|
116
|
+
million_data.jpg
|
117
|
+
|
118
|
+
: background-image-relative-width
|
119
|
+
35
|
120
|
+
|
121
|
+
= NG
|
122
|
+
|
123
|
+
= (2) 1ファイルずつ削除
|
124
|
+
|
125
|
+
$ rm gomi...gomi_0000.gomi
|
126
|
+
$ rm gomi...gomi_0001.gomi
|
127
|
+
$ rm gomi...gomi_0002.gomi
|
128
|
+
$ rm gomi...gomi_0003.gomi
|
129
|
+
$ rm gomi...gomi_0004.gomi
|
130
|
+
$ rm gomi...gomi_0005.gomi
|
131
|
+
$ rm gomi...gomi_0006.gomi
|
132
|
+
$ rm gomi...gomi_0007.gomi
|
133
|
+
$ rm gomi...gomi_0008.gomi
|
134
|
+
$ rm gomi...gomi_0009.gomi
|
135
|
+
$ rm gomi...gomi_0010.gomi
|
136
|
+
$ rm gomi...gomi_0011.gomi
|
137
|
+
$ rm gomi...gomi_0012.gomi
|
138
|
+
$ rm gomi...gomi_0013.gomi
|
139
|
+
$ rm gomi...gomi_0014.gomi
|
140
|
+
$ rm gomi...gomi_0015.gomi
|
141
|
+
$ rm gomi...gomi_0016.gomi
|
142
|
+
$ rm gomi...gomi_0017.gomi
|
143
|
+
$ rm gomi...gomi_0018.gomi
|
144
|
+
$ rm gomi...gomi_0019.gomi
|
145
|
+
$ rm gomi...gomi_0020
|
146
|
+
|
147
|
+
= 徹夜
|
148
|
+
|
149
|
+
= NG
|
150
|
+
|
151
|
+
= (3) 適量ずつ削除
|
152
|
+
|
153
|
+
$ ls | wc -l
|
154
|
+
10000
|
155
|
+
$ rm *0.gomi
|
156
|
+
$ rm *1.gomi
|
157
|
+
$ rm *2.gomi
|
158
|
+
$ rm *3.gomi
|
159
|
+
$ rm *4.gomi
|
160
|
+
$ rm *5.gomi
|
161
|
+
$ rm *6.gomi
|
162
|
+
$ rm *7.gomi
|
163
|
+
$ rm *8.gomi
|
164
|
+
$ rm *9.gomi
|
165
|
+
$ ls | wc -l
|
166
|
+
0
|
167
|
+
|
168
|
+
= (3) 適量ずつ削除
|
169
|
+
|
170
|
+
$ find . -name "*.gomi" | wc -l
|
171
|
+
10000
|
172
|
+
|
173
|
+
$ find . -name "*.gomi" | xargs rm
|
174
|
+
|
175
|
+
$ find . -name "*.gomi" | wc -l
|
176
|
+
0
|
177
|
+
|
178
|
+
= OK!
|
179
|
+
|
180
|
+
= 落とし穴
|
181
|
+
|
182
|
+
* 以下のやり方だと、rmコマンドが一万回呼ばれる
|
183
|
+
|
184
|
+
$ find . -name "*.gomi" | xargs -i rm '{}'
|
185
|
+
|
186
|
+
$ find . -name "*.gomi" -exec rm '{}' \;
|
187
|
+
|
188
|
+
= 遅い
|
189
|
+
|
190
|
+
* コマンドを呼ぶ回数が多いと遅くなる
|
191
|
+
|
192
|
+
$ find . -name "*.gomi" | xargs rm
|
193
|
+
#=> 0.147秒
|
194
|
+
|
195
|
+
$ find . -name "*.gomi" | xargs -i rm '{}'
|
196
|
+
#=> 14.120秒
|
197
|
+
|
198
|
+
$ find . -name "*.gomi" -exec rm '{}' \;
|
199
|
+
#=> 18.512秒
|
200
|
+
|
201
|
+
= 徹夜の恐れ
|
202
|
+
|
203
|
+
= 適量ずつ
|
204
|
+
|
205
|
+
* 大量
|
206
|
+
* 持てない
|
207
|
+
* 少量
|
208
|
+
* 夜になっても終わらない
|
209
|
+
* 適量
|
210
|
+
* 明るいうちに終わる
|
211
|
+
|
212
|
+
== プロパティ
|
213
|
+
|
214
|
+
: background-image
|
215
|
+
million_data.jpg
|
216
|
+
|
217
|
+
: background-image-relative-width
|
218
|
+
35
|
219
|
+
|
220
|
+
= その他の例
|
221
|
+
|
222
|
+
* DBMSのトランザクション処理
|
223
|
+
* DB2では100件くらいずつコミットする
|
224
|
+
* IMPORTのcommitcountオプション
|
225
|
+
* プロセス数やスレッド数
|
226
|
+
* メモリやCPUが100%で固定されない程度に増やすと速い
|
227
|
+
|
228
|
+
(('tag:right'))おわり
|
data/lavie.png
ADDED
Binary file
|
data/million_data.jpg
ADDED
Binary file
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rabbit-slide-myokoym-study-material-20130203
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Masafumi Yokoyama
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rabbit
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.2
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.0.2
|
30
|
+
description: 件数が多いデータの扱い方について。 キーワードは『荷物運び』です。
|
31
|
+
email:
|
32
|
+
- myokoym@gmail.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- .rabbit
|
38
|
+
- config.yaml
|
39
|
+
- Rakefile
|
40
|
+
- README.rdoc
|
41
|
+
- lavie.png
|
42
|
+
- gomiterminal.png
|
43
|
+
- million_data.jpg
|
44
|
+
- how-to-handle-million-data.rab
|
45
|
+
- pdf/study-material-20130203-how-to-handle-million-data.pdf
|
46
|
+
homepage: http://slide.rabbit-shocker.org/authors/myokoym/study-material-20130203/
|
47
|
+
licenses:
|
48
|
+
- CC BY 3.0
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options: []
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ! '>='
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
requirements: []
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 1.8.23
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: 百万件くらいのデータの扱い方
|
71
|
+
test_files: []
|