rabbit-slide-tommy-mysqluc 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3c94a944734034f661ee165f673ea59fc88e9561
4
+ data.tar.gz: 3a66c6ce34dc6b704cd251171b8243abf728135a
5
+ SHA512:
6
+ metadata.gz: 84c847c7ff850d4c49f6a8608cda565e53d4fe361caf220bbbd1c83c0498d09d439f55c8aa7c380bc5e1075c9e20c52c887f0cd2928faf70e99eb3cf4b687860
7
+ data.tar.gz: bad5968181d8b82e5af12ea9ac168d0f3bdd45be00a800be899aff628e887262c97a54a5c9095809ebbe190ee7ddf6e80575263a684de72a09cef1f04aa37d50
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ mysqluc.md
Binary file
@@ -0,0 +1,22 @@
1
+ # MySQLを拡張する
2
+
3
+ ## For author
4
+
5
+ ### Show
6
+
7
+ rake
8
+
9
+ ### Publish
10
+
11
+ rake publish
12
+
13
+ ## For viewers
14
+
15
+ ### Install
16
+
17
+ gem install rabbit-slide-tommy-mysqluc
18
+
19
+ ### Show
20
+
21
+ rabbit rabbit-slide-tommy-mysqluc.gem
22
+
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("YOUR THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
Binary file
@@ -0,0 +1,19 @@
1
+ ---
2
+ id: mysqluc
3
+ base_name: mysqluc
4
+ tags: []
5
+ presentation_date:
6
+ version: 1.0.0
7
+ licenses: []
8
+ slideshare_id: mysqluc
9
+ speaker_deck_id:
10
+ ustream_id:
11
+ vimeo_id:
12
+ youtube_id:
13
+ author:
14
+ markup_language: :markdown
15
+ name: "とみたまさひろ"
16
+ email: tommy@tmtm.org
17
+ rubygems_user: tommy
18
+ slideshare_user: tmtm
19
+ speaker_deck_user:
Binary file
@@ -0,0 +1,314 @@
1
+ # MySQLを拡張する
2
+
3
+ content-source
4
+ : MySQL User Conference 2015
5
+
6
+ author
7
+ : とみたまさひろ
8
+
9
+ institution
10
+ : 日本MySQLユーザ会
11
+
12
+ date
13
+ : 2015-12-15
14
+
15
+ allotted-time
16
+ : 30m
17
+
18
+ theme
19
+ : clear-blue+
20
+
21
+ # 自己紹介
22
+
23
+ ![](icon.jpg){:relative_height="30" align="right" relative_margin_top="-30" relative_margin_right="-10"}
24
+
25
+ * とみた まさひろ
26
+ * http://tmtms.hatenablog.com
27
+ * http://twitter.com/tmtms
28
+ * https://github.com/tmtm
29
+ * 長野県北部在住プログラマー( Ruby & C )
30
+ * 長野ソフトウェア技術者グループ(NSEG)
31
+
32
+ # 自己紹介
33
+
34
+ * 日本MySQLユーザ会代表
35
+ * MySQL 3.21 の日本語対応 {::note}(1998){:/note}
36
+ * MySQLのRubyバインディング作成 {::note}(1998){:/note}
37
+ * OSS貢献者賞 2013\\n\\n\\n
38
+
39
+ ![](OSS貢献者賞.jpg){:relative_width="20" align="right" relative_margin_top="40" relative_margin_right="0"}
40
+
41
+ # MySQLは「世界でもっとも普及している\\nオープンソースデータベース」\\n{::note}https://www-jp.mysql.com/{:/note}
42
+
43
+ # 「伽藍とバザール」の「伽藍」
44
+
45
+ # フリーソフトウェア(GPL2)
46
+
47
+ # フリーソフトウェアでうれしいこと
48
+
49
+ # 無料(フリー)
50
+
51
+ # 無料でうれしい
52
+
53
+ * 個人ごとの開発環境
54
+ * テスト環境
55
+ * スケールアウトで台数増
56
+
57
+ # 自由(フリー)
58
+
59
+ # 自由でうれしい
60
+
61
+ * ソースが公開されている
62
+ * 自分で調べられる
63
+ * 改変して再配布
64
+
65
+ # 改変
66
+
67
+ * MariaDB
68
+ * AWS RDS
69
+ * 「多様性は善」
70
+
71
+ # *仮に*本家の開発が中断したとしても\\n第三者が継続できる
72
+
73
+ # 拡張
74
+
75
+ # MySQLに機能を追加する
76
+
77
+ # UDF - ユーザー定義関数
78
+
79
+ * 一番簡単な拡張
80
+ * 独自の関数を MySQL に組み込む
81
+ * 通常の関数 / 集約関数
82
+ * MySQLのソースを見なくてもマニュアルだけで作成可能
83
+ {::note}http://dev.mysql.com/doc/refman/5.6/ja/adding-udf.html{:/note}
84
+
85
+ # UDF
86
+
87
+ * `hoge_init()`
88
+ * クエリ実行前に呼び出される(引数チェックとか)
89
+
90
+ * `hoge()`
91
+ * 関数本体
92
+
93
+ * `hoge_deinit()`
94
+ * クエリ実行後に呼び出される(メモリ解放とか)
95
+
96
+ # 例: mysql-mruby
97
+
98
+ https://github.com/mattn/mysql-mruby
99
+
100
+ ```sql
101
+ mysql> SELECT mrb_eval('ARGV.map(&:upcase).join(",")',
102
+ -> 'hoge', 'fuga') as a;
103
+ +-----------+
104
+ | a |
105
+ +-----------+
106
+ | HOGE,FUGA |
107
+ +-----------+
108
+ ```
109
+
110
+ # プラグイン
111
+
112
+ # プラグイン{::note}(5.7.9){:/note}
113
+
114
+ ```
115
+ mysql> show plugins;
116
+ +----------------------------+----------+--------------------+---------+---------+
117
+ | Name | Status | Type | Library | License |
118
+ +----------------------------+----------+--------------------+---------+---------+
119
+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
120
+ | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
121
+ | sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
122
+ | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
123
+ | PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
124
+ | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
125
+ | INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
126
+ | INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
127
+ | INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
128
+ | INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
129
+ | INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
130
+ | INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
131
+ | INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
132
+ | INNODB_CMP_PER_INDEX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
133
+ | INNODB_CMP_PER_INDEX_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
134
+ | INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
135
+ | INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
136
+ | INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
137
+ | INNODB_TEMP_TABLE_INFO | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
138
+ | INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
139
+ ```
140
+
141
+ # プラグイン{::note}(5.7.9){:/note}
142
+
143
+ ```
144
+ | INNODB_FT_DEFAULT_STOPWORD | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
145
+ | INNODB_FT_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
146
+ | INNODB_FT_BEING_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
147
+ | INNODB_FT_CONFIG | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
148
+ | INNODB_FT_INDEX_CACHE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
149
+ | INNODB_FT_INDEX_TABLE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
150
+ | INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
151
+ | INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
152
+ | INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
153
+ | INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
154
+ | INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
155
+ | INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
156
+ | INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
157
+ | INNODB_SYS_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
158
+ | INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
159
+ | INNODB_SYS_VIRTUAL | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
160
+ | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
161
+ | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
162
+ | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
163
+ | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
164
+ | partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
165
+ | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
166
+ | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
167
+ | ngram | ACTIVE | FTPARSER | NULL | GPL |
168
+ +----------------------------+----------+--------------------+---------+---------+
169
+ ```
170
+
171
+
172
+ # プラグイン
173
+
174
+ * ストレージエンジンプラグイン
175
+ * InnoDB, MyISAM, CSV, Blackhole, ...
176
+ * 全文パーサープラグイン
177
+ * 全文検索用トークナイザ: ngram
178
+ * デーモンプラグイン
179
+ * mysqld プロセス空間内で動作
180
+
181
+ # プラグイン
182
+
183
+ * INFORMATION_SCHEMA プラグイン
184
+ * 準同期レプリケーションプラグイン
185
+ * 監査プラグイン
186
+ * 認証プラグイン
187
+ * パスワード検証プラグイン
188
+
189
+ # プラグインの作り方
190
+
191
+ リファレンスマニュアル 24.2.4 プラグインの作成
192
+ {::note}http://dev.mysql.com/doc/refman/5.6/ja/writing-plugins.html{:/note}
193
+
194
+ # ストレージエンジンプラグイン
195
+
196
+ # ストレージエンジンプラグイン
197
+
198
+ * InnoDB, MyISAM, Archive, Blackhole, ...
199
+ * 標準のストレージエンジンは全部プラグイン
200
+
201
+ # 巷のストレージエンジンプラグイン
202
+
203
+ mroonga\\n{::note}http://mroonga.org/ja/{:/note}
204
+
205
+ * 日本語全文検索エンジン Groonga を MySQL から使う
206
+
207
+ # ストレージエンジンの作り方
208
+
209
+ * ドキュメントあり
210
+
211
+ * MySQL Internals Manual\\nChapter 22 Writing a Custom Storage Engine\\n{::note}http://dev.mysql.com/doc/internals/en/custom-engine.html{:/note}
212
+
213
+ * でもソースみないと厳しいかも
214
+
215
+ * フリーソフトウェアだから見放題!
216
+
217
+ # デーモンプラグイン
218
+
219
+ # デーモンプラグイン
220
+
221
+ * mysqld プロセス空間内で何かを動かす
222
+ * 通常とは異なる TCP/IP の口を開けて何かするとか
223
+ * 起動直後から定期的に何かするとか
224
+
225
+ # 巷のデーモンプラグイン
226
+
227
+ * HandlerSocket\\n{::note}https://github.com/DeNA/HandlerSocket-Plugin-for-MySQL{:/note}
228
+ * Transactd\\n{::note}http://www.bizstation.jp/ja/transactd/{:/note}
229
+
230
+ # デーモンプラグインの作り方
231
+
232
+ * リファレンスマニュアル 24.2.4.5 デーモンプラグインの作成
233
+ {::note}http://dev.mysql.com/doc/refman/5.6/ja/writing-daemon-plugins.html{:/note}
234
+
235
+ * `init()` と `deinit()` 関数だけ
236
+
237
+ * 結構簡単
238
+
239
+ # 以上綺麗な拡張\\n(mysqldのコンパイル不要)
240
+
241
+ # 綺麗じゃない拡張\\n(mysqldのコンパイル必要)
242
+
243
+ # 改造
244
+
245
+ # Charset/Collation
246
+
247
+ * リファレンスマニュアル 10.3 文字セットの追加
248
+ {::note}http://dev.mysql.com/doc/refman/5.6/ja/adding-character-set.html{:/note}
249
+
250
+ * 実は1バイト文字セットはコンパイル要らず
251
+ * `/usr/local/mysql/share/charsets/`
252
+
253
+ * マルチバイト文字は要コンパイル
254
+ * `mysql-5.x.x/strings/CHARSET_INFO.txt`
255
+
256
+ * どうしても ハハ=パパ=ババ と 🍣=🍺 問題を解決したい人は改造してみるのもいいかも
257
+
258
+ # ネットワークプロトコル
259
+
260
+ * MySQL Internals Manual\\nChapter 14 MySQL Client/Server Protocol\\n{::note}http://dev.mysql.com/doc/internals/en/client-server-protocol.html{:/note}
261
+
262
+ * MySQLのプロトコル解説\\n{::note}http://slide.rabbit-shocker.org/authors/tommy/mysql-protocol/{:/note}
263
+
264
+ * MySQLクライアントライブラリが無い処理系で実装
265
+
266
+ * Ruby/MySQL - pure Ruby 実装\\n{::note}https://github.com/tmtm/ruby-mysql{:/note}
267
+
268
+ # クエリ
269
+
270
+ * クライアントからのコマンド振り分け
271
+ * `mysql-5.x.x/sql/sql_parse.cc`
272
+ * クエリ構文解析
273
+ * `mysql-5.x.x/sql/sql_yacc.yy`
274
+
275
+ * 独自のクエリを組み込める
276
+
277
+ * {::wait/}「予約語書き換えればSQLインジェクション対策!」
278
+
279
+ # まとめ
280
+
281
+ # まとめ
282
+
283
+ * プラグイン機構でコンパイルせずに結構拡張できる
284
+ * ソースが見れるからプラグインも作りやすい
285
+ * mysqld 自体を改造することもできる
286
+ * 無料もいいけど自由重要
287
+ * フリーソフトウェア万歳!
288
+
289
+ # おまけ
290
+
291
+ # アドベントカレンダー
292
+
293
+ > 元はクリスマスまでの期間を数えるために使われていたカレンダーのことで
294
+ >〜中略〜
295
+ >近年、インターネット上において、このカレンダーにならい、定められたテーマに従い、*参加者が持ち回り*で自身のブログやサイトに記事を投稿する企画が多く実施されています。
296
+
297
+ {::note}http://blog.qiita.com/post/132928437279/adcal2015{:/note}
298
+
299
+ # MySQL 関連のアドベントカレンダー
300
+
301
+ 12/1〜25 まで開催中
302
+
303
+ * MySQL Casual Advent Calendar 2015\\n{::note}http://qiita.com/advent-calendar/2015/mysql-casual{:/note}
304
+ * MySQL Fabric&Routerつらくない Advent Calendar 2015\\n{::note}http://qiita.com/advent-calendar/2015/mysql_fabric{:/note}
305
+ * MySQL 5.7の「罠」に狙われてもやられないための Advent Calendar 2015\\n{::note}http://qiita.com/advent-calendar/2015/mysql57-yoku0825-traps{:/note}
306
+ * MySQLマニュアルを読む Advent Calendar 2015\\n{::note}http://qiita.com/advent-calendar/2015/mysql_manual{:/note}
307
+
308
+ # MySQLだけで4つもある!
309
+
310
+ # 4つのうち3つが\\n「独りアドベントカレンダー」
311
+
312
+ # MySQLの人たちちょっとおかしい
313
+
314
+ # おわり
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-tommy-mysqluc
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - "とみたまさひろ"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: ''
28
+ email:
29
+ - tommy@tmtm.org
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - MyBooks.jpg
36
+ - OSS貢献者賞.jpg
37
+ - README.md
38
+ - Rakefile
39
+ - advent.png
40
+ - config.yaml
41
+ - icon.jpg
42
+ - mysqluc.md
43
+ - pdf/mysqluc-mysqluc.pdf
44
+ - protocol.png
45
+ homepage: http://slide.rabbit-shocker.org/authors/tommy/mysqluc/
46
+ licenses: []
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 2.5.0
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: MySQLを拡張する
68
+ test_files: []