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 ADDED
@@ -0,0 +1 @@
1
+ how-to-handle-million-data.rab
@@ -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
+
@@ -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
@@ -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
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'))おわり
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: []