CentOS5 に SMALL LIGHT をインストール
$ sudo yum -y install ImageMagick ImageMagick-devel $ sudo yum -y --enablerepo=rpmforge install imlib2 imlib2-devel $ cd /usr/local/src $ wget http://smalllight.googlecode.com/files/mod_small_light-1.0.0.tar.gz $ tar xvzf mod_small_light-1.0.0.tar.gz $ cd mod_small_light-1.0.0
そのままだと Symbol not found エラーが発生したので Makefile.in を修正
$ ./configure --with-apxs=/usr/sbin/apxs $ make && sudo make install
- GitHub - yamac/smalllight: The SMALLLIGHT is a module of Apache2 which provides a dynamic image transformation.
- Google Code Archive - Long-term storage for Google Code Project Hosting.
追記
- 2010/01/06 : Gist 貼り付けの際にタブがスペースに置き換わっていたミス修正
symfony 1.4 + Propel の DBレプリケーションで任意のタイミングでマスタ接続に切り替える
データ更新後はマスタに接続する
app.yml
all: propel: force_master_flashes: [notice]
frontendConfiguration.class.php
<?php public function configure() { $this->dispatcher->connect('context.load_factories', array($this, 'loadFactoriesEvent')); } public function loadFactoriesEvent(sfEvent $event) { $user = $event->getSubject()->getUser(); foreach (sfConfig::get('app_propel_force_master_flashes') as $name) { if ($user->hasFlash($name)) { Propel::setForceMasterConnection(true); break; } } }
特定のアクションでは常にマスタに接続する
app.yml
all: propel: force_master_actions: - [module, action]
frontendConfiguration.class.php
<?php public function configure() { $this->dispatcher->connect('controller.change_action', array($this, 'changeActionEvent')); } public function changeActionEvent(sfEvent $event) { $mod_act = array($event['module'], $event['action']); if (in_array($mod_act, sfConfig::get('app_propel_force_master_actions'))) { Propel::setForceMasterConnection(true); } }
さくらのVPS3台でMySQL接続のベンチマーク
MySQL5.1を公式RPMでインストールして、my.cnfはmy-large.cnfをコピーしてskip-name-resolveオプションだけ追加しました。
SSL接続はmysqlslapで上手くテストできませんでした。(マニュアルには55%遅くなると書かれている)
仮想サーバA内でのソケット接続
$ mysqlslap --no-defaults --auto-generate-sql --auto-generate-sql-guid-primary --engine=myisam --number-int-cols=3 --number-char-cols=5 --concurrency=3 --auto-generate-sql-write-number=100 --auto-generate-sql-execute-number=1000 --auto-generate-sql-load-type=mixed -u root Benchmark Running for engine myisam Average number of seconds to run all queries: 0.315 seconds Minimum number of seconds to run all queries: 0.315 seconds Maximum number of seconds to run all queries: 0.315 seconds Number of clients running queries: 3 Average number of queries per client: 1000
仮想サーバA内でのTCP/IP接続
$ mysqlslap --no-defaults --auto-generate-sql --auto-generate-sql-guid-primary --engine=myisam --number-int-cols=3 --number-char-cols=5 --concurrency=3 --auto-generate-sql-write-number=100 --auto-generate-sql-execute-number=1000 --auto-generate-sql-load-type=mixed -u root -h 127.0.0.1 -P 3306 Benchmark Running for engine myisam Average number of seconds to run all queries: 0.352 seconds Minimum number of seconds to run all queries: 0.352 seconds Maximum number of seconds to run all queries: 0.352 seconds Number of clients running queries: 3 Average number of queries per client: 1000
同一物理サーバの仮想サーバBから仮想サーバAにTCP/IP接続
$ mysqlslap --no-defaults --auto-generate-sql --auto-generate-sql-guid-primary --engine=myisam --number-int-cols=3 --number-char-cols=5 --concurrency=3 --auto-generate-sql-write-number=100 --auto-generate-sql-execute-number=1000 --auto-generate-sql-load-type=mixed -u root -h xxx.xxx.xxx.xxx -P 3306 Benchmark Running for engine myisam Average number of seconds to run all queries: 0.762 seconds Minimum number of seconds to run all queries: 0.762 seconds Maximum number of seconds to run all queries: 0.762 seconds Number of clients running queries: 3 Average number of queries per client: 1000
同一物理サーバの仮想サーバBから仮想サーバAにSSH経由で接続
$ ssh -f -L 3320:localhost:3306 -N -4 hostA $ mysqlslap --no-defaults --auto-generate-sql --auto-generate-sql-guid-primary --engine=myisam --number-int-cols=3 --number-char-cols=5 --concurrency=3 --auto-generate-sql-write-number=100 --auto-generate-sql-execute-number=1000 --auto-generate-sql-load-type=mixed -u root -h 127.0.0.1 -P 3320 Benchmark Running for engine myisam Average number of seconds to run all queries: 4.100 seconds Minimum number of seconds to run all queries: 4.100 seconds Maximum number of seconds to run all queries: 4.100 seconds Number of clients running queries: 3 Average number of queries per client: 1000
別物理サーバの仮想サーバCから仮想サーバAにTCP/IP接続
$ mysqlslap --no-defaults --auto-generate-sql --auto-generate-sql-guid-primary --engine=myisam --number-int-cols=3 --number-char-cols=5 --concurrency=3 --auto-generate-sql-write-number=100 --auto-generate-sql-execute-number=1000 --auto-generate-sql-load-type=mixed -u root -h xxx.xxx.xxx.xxx -P 3306 Benchmark Running for engine myisam Average number of seconds to run all queries: 7.124 seconds Minimum number of seconds to run all queries: 7.124 seconds Maximum number of seconds to run all queries: 7.124 seconds Number of clients running queries: 3 Average number of queries per client: 1000
symfony 1.0, 1.3, 1.4 に対応したzsh補完関数
以前作ったものを、subversionの補完関数とzshの本を参考に一から書き直しました。
1.3 以降の場合はオプションの補完にも対応しています。
一部の処理はグローバル変数にキャッシュさせているので、補完速度が上がっていると思います。
http://github.com/aki77/zsh-completion/blob/master/_symfony
ログアウトせずに補完キャッシュを削除
unset -m "_sf_cache_*"
symfony + propel で innodb の SELECT COUNT(*) 対策
http://github.com/aki77/Propel-Behavior/blob/master/AkPropelBehaviorInnodbCount.php
デフォルト
SELECT COUNT(*) FROM `article`
propel behavior 設定後
SELECT COUNT(article.CREATED_AT) FROM `article`