Tour of the MySQL Source Code
by Brian Aker, Michael (Monty) Widenius
MySQLのDirector of ArchitectureとFounderによるMySQL Internal解説:
- MySQLはC,C++,アセンブラで書かれてます.80%はC.client, network communications, I/O, storage enginesがC. Parse treeとoptimizerがC++.String functionalityがパフォーマンスにシビアに影響するのでアセンブラ.
- マルチスレッド,1コネクション=1スレッド,よってクライアントあたりのオーバヘッド最小
- マルチストレージエンジン・アーキテクチャ,クエリキャッシュは上位層で実装
- 各ストレージエンジン概要紹介:MyISAMはDHW向けエンジン by Brian,etc
- カスタムストレージエンジン例(参加者):レガシーデータへのアクセス
- カスタムストレージエンジンの実装を計画している参加者:ちらほら
- NDBはver5.1で非インデックス化データはDisk上に置くようになる(機能追加?)
- Filesytem ソースコードディレクトリ:
-kernel:sql, libmysqld -Storage Engines:mysisam, heap, innobase, merge, isam -Portable Runtime:mysys, strings(includes character sets), dbug -Clients:libmysql, libmysql_r, sql-common -Include -libraries:zlib, regexp, readline, vio
- Adding a Function
-lex.h -sql_yacc.yy -item_create.cc -myfunc.cc -myfunc.h -Makefile.am -Alternative: item_func.cc, item_func.h -Example: WHERE NEAR (A,B,[epislon]) , WHERE A NEAR B
- User Defined Function (Part of the SQL99 standard)
-Can return char*, double, and int -Requires wrting three function: myfunc_init, myfunc, myfunc_deinit -Loaded dynamically via "CREATE FUNCTION.." -Many examples found at http://
- Adding a Field Type
-Files to Edit: field.cc, field.h -Subclass Field (or Field_blob or Field_number ...) -12 methods to implement
- Storage Methods
- Using BK!!
-(Getting the tree) bk clone bk://mysql.bkbits.net/mysql-4.1/my_directory -(Staying Updated) bk pull -(Creating a patch) bk -r diffs -c
感想.このセッションにはMySQL ABの開発者もかなり参加していた模様.参加者100名くらい.パフォーマンスをあげるためにSpecificなFieldを追加した人,カスタムストレージエンジンを書いた人,Oracleのストレージエンジンを書いた人?などヘビーユーザも多数参加.