2011年11月21日月曜日

apc_fetch() VS Memcached::get() - ローカル環境キャッシュパフォーマンス比較



ローカル環境でのキャッシュは、APCとMemcachedでどちらを使うか?
apc_fetchが手軽に利用できるのでこちらを使ってみましたが、
memcachedでいいんじゃないかと・・・気になったので計測してみました。
ただし、CLI環境です。
テスト環境(DELL PowerEdge R200改)









CPUIntel Xeon CPU X3360 2.83GHz (4core)
メモリ8GB
HDD1TB (Hitachi HDT721010SLA360)
OSCentOS 6.0 (2.6.32-71.29.1.el6.x86_64)


apcの設定



apc.enabled=On
apc.enable_cli=On
apc.shm_size="128M"



比較に使用したソースコード(PHP)


$id = 'testtest';
$test_data = array();
$mem = new Memcached();
$mem->addServer('/tmp/memcached.socket',0);

for ($i = 0; $i < 1000; $i++) {
$cur_array = array();
for ($j = 0; $j < 10; $j++) {
$cur_array[$j] = '0123456789abcdef';
}
array_push($test_data,$cur_array);
}

apc_store($id,$test_data,1000);
$mem->set($id,$test_data,1000);

$time_start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$res = apc_fetch($id);
}
$time_end = microtime(true);
$diff_apc = $time_end - $time_start;

$time_start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$res = $mem->get($id);
}
$time_end = microtime(true);
$diff_mem = $time_end - $time_start;
echo 'APC : ' . $diff_apc . PHP_EOL;
echo 'Mem : ' . $diff_mem . PHP_EOL;



結果









関数平均処理時間(ms)
apc_fetch()10
Memcached::get5

結果は、memcachedが2倍速い
また、new MemcachedとaddServer()を毎回実行した場合でも、
0.5msほどしか影響しませんでした。
5msの違いでも、10000回実行すると50秒差が出ます。
パフォーマンス優先ならmemcachedですね。

ちなみにmemcachedでunix socketを使用していますが、
IPアドレス(127.0.0.1)でのアクセスでも同程度の処理速度となりました。
ローカル環境でtcpポートの枯渇が気になる場合は、unix socketがオススメです。




2011年11月12日土曜日

CentOS 6.1でまだまだLAMP環境 MySQL 5.5.19 インストール編



前回のCentOS 6.1のインストールに引き続き、
MySQL 5.5.19をインストールします。

今回のインストール手順と同じ処理を行うバッチを作成しました。
管理者権限があれば次の1行でインストールできます。
ご使用になられた場合の損害は一切責任を負いませんのでご了承ください。

curl http://dl.dropbox.com/u/30648910/install/mysql/mysql.sh | env MYSQL_VERSION=5.5.19 sh



MySQL 5.5.19をソースコードからインストール




▼インストールに必要なモジュール


yum -y install \
make.x86_64 \
cmake.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
ncurses.x86_64 \
ncurses-devel.x86_64 \
bison.x86_64 \
libaio-devel.x86_64

libaio-devel.x86_64を追加(2012/4/12)



▼mysqlアカウント追加


groupadd mysql
useradd -d /home/mysql -g mysql -r -s /sbin/nologin mysql


▼既存のファイルをリネーム


mv /etc/my.cnf /etc/my.cnf.bak
mv /usr/lib64/mysql /usr/lib64/mysql_bak


▼ソースコードをダウンロードして解凍


cd /usr/local/src
curl -o mysql-5.5.19.tar.gz http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.5/mysql-5.5.19.tar.gz
tar zxfv mysql-5.5.19.tar.gz
cd mysql-5.5.19


▼ビルドしてインストール(utf8mb4をDEFAULT_CHARSET)


cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
make
make install


▼MySQL初期化


mkdir /usr/local/mysql/etc
cd /usr/local/mysql
chown -R mysql:mysql .
./scripts/mysql_install_db --user=mysql --skip-name-resolve


▼my.cnf設置


cp /usr/local/src/mysql-5.5.19/support-files/my-medium.cnf /usr/local/mysql/etc/my.cnf
chown -R root .
chown -R mysql:mysql /usr/local/mysql/data
ln -s /usr/local/mysql/lib /usr/lib64/mysql
ldconfig


▼MySQL起動、停止、再起動


起動
/usr/local/mysql/support-files/mysql.server start
停止
/usr/local/mysql/support-files/mysql.server stop
再起動
/usr/local/mysql/support-files/mysql.server restart


▼パスの設定


bashの場合
vi $HOME/.bashrc
zshの場合
vi $HOME/.zshrc

次の2行を追記して保存する
PATH=$PATH:/usr/local/mysql/bin
export PATH

bashの場合
source $HOME/.bashrc

zshの場合
source $HOME/.zshrc
rehash

MySQLクライアントを起動して確認する
mysql


▼依存関係も含めインストールされるモジュール


make-3.81-19.el6.x86_64
cmake-2.6.4-5.el6.x86_64
gcc-4.4.5-6.el6.x86_64
gcc-c++-4.4.5-6.el6.x86_64
ncurses-5.7-3.20090208.el6.x86_64
pkgconfig-0.23-9.1.el6.x86_64
ncurses-devel-5.7-3.20090208.el6.x86_64
bison-2.4.1-5.el6.x86_64





2011年11月6日日曜日

Macで半角カタカナ・imode絵文字を入力する for OS X Lionの環境設定



久しぶりにフィーチャーフォン(ガラケー)の開発をしてます。
Lionでガラケーの開発するとは思ってなかったんですが・・・。

ガラケーのviewは、Shift_JISでxhtml書いて半角カタカナやimode絵文字を当然のように入力します。
プログラムで出力前に自動変換するのも一般的ですが、
私の場合は、文字コード以外はできるだけ自動変換しないのが好きですね。
見た目と同じほうがデバッグも修正も楽なので。
あと、こだわるとあえて全角にしたい場合もありますからね。

それでは、macで半角カタカナとか入力したことなかったのですが、
作業しやすいように設定を変更してみます。


  • 半角カタカナの入力設定

  • キーボードのファンクションキー(fn)変更

  • imode絵文字の入力




半角カタカナの入力設定




  1. [システム環境設定]→[言語とテキスト]を開く

  2. [入力ソース]タブをクリック

  3. 「 使用する入力ソースを選択してください。」の下に表示されているリストをひたすたスクロールして、なんとか「ことえり」までたどり着く。

  4. [半角カタカナ]にチェックをつける

f:id:ono51:20111105160936p:image:w240

キーボードのファンクションキー(fn)変更


この設定はファンクションのキーの使用頻度に応じて設定してください。
個人的に半角カタカナ入力するときはこちらの方が楽です。


  1. [システム環境設定]→[キーボード]を開く

  2. 「F1、F2などのすべてのキーを標準のファンクションキーとして使用する」にチェックを付ける

f:id:ono51:20111105160659p:image:w240

これで、F8キー1発で半角カタカナに変換できます。
また、Shift+Control+[;セミコロン]で直接半角カタカナの入力モードに変更できます。

imode絵文字の入力


imode絵文字の入力ですが、以前は「エモジモ2」というアプリが使えたようなのですが、
残念ながら開発中止になっているようです。
代替アプリを探しているのですが今のところ見つからないですね。
(あったら教えてください。)

代替アプリではないのですが、
こちらのサイトでクリップボードにコピーして使えます。


  • iモード・絵文字パッド

http://sv.cont-cont.com/emojipad-i/

エディター上に絵文字が表示されるわけではないので、
見た目で確認できないのが少し残念です。

いろいろ試していますが全部mac1台で作業化は今一歩のところですね。
あとは、imode絵文字だけなんですけどね。
とはいえ、フィーチャーフォンで絵文字は必須なので、
viewはWindowsで作業するのが無難なようです。

しばらくはVMWareFusion+Windowsが手放せないようです。




2011年11月5日土曜日

今さら人には聞けないMySQLの話(いにしえのold-passwordsオプション for MySQL5.5)



Perl使いもお世話になっていると思われるphpMyAdminで
MySQLにログインできないことが・・・・あった・・・。


#2000 MySQL サーバにログインできません


というわけで接続確認したところ


<?php
$dbh = mysql_connect("127.0.0.1","ユーザー名","パスワード") or die(mysql_error());


このようなエラーメッセージが、以下抜粋


mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.
Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password').
This will store a new, and more secure, hash value in mysql.user.
If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file


つまり、MySQL4.1以前の古い安全ではない認証では接続できないので、
old-passwordsオプション外して、パスワード再設定してよ!ってことらしい。
http://dev.mysql.com/doc/refman/5.5/en/old-client.html

それならold-passwordsオプションで起動できないようにしてほしいような気もするが。
起動はできるしパスワードも設定できるんだな。
MySQL4.0など古いDBのデータ移行やmy.cnfの設定引き継いだ場合は注意が必要です。

というか、old-passwordsオプション使ってたんだ・・・。