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のストレージエンジンを書いた人?などヘビーユーザも多数参加.