官能的な味わい
はい。。。すみません。大げさなタイトルでした。
本日、自宅へ帰り風呂に入り髪を乾かしながらキッチンの方へ
行くと何と年に一度の私の楽しみの彼女がいました。
毎年、1~3本は飲んでしまう私ですが、
噂では、ここ50年では最高のできとの事で、
今年は、さぞ美味しいだろうと楽しみにしていたところでした。
「きた~~~」
父親が買って飲んだ後、飲んでみろいう意味で
私のために出しておいたのでしょう。ありがたくいただきます。
髪なんか乾かなくても良い。風呂上りの始末も
そこそこにして、キッチンでコップにタップリと
ヌーボーを注ぎ込んだ。
「????」
ふと見るとコルクが2つ
「あぁ?なんじゃこりゃ?」
片方は今にもちぎれそうな程ヒビだらけ、
ボトルにはまっていた方は、ボトルの口にはまる方に
テーパーが入っている。
「さては、コルクが上手く抜けなかったな。」
そう、安易に予想できる。上手く抜けずにコルクがボロボロに
なり、ボロボロのコルクは使えないから他のコルクを
持ってきたがボトルの口に入らないからテーパーカットし
無理にボトルの口に突っ込んだ。
「・・・。うっ。ワインがコルクかすだらけかも・・・。最低・・。」
せっかくの楽しみが一気に覚めてしまった。
そうは言っても楽しみにしていたヌーボー飲まないなんてとんでもない。
ひとくち飲んでみる。
「うっ。あま~~~い」
非常にまろやかで酸味も丁度良く、口の中で広がってゆく
ヌーボーは普通のワインとは違って爽やかでフルーティーな
味を楽しむものであるが、今回のは、フルーティーだけでない
若干、普通のワインぽい熟成を感じる。とにかくバランスが良い。
確かに50年では最高と言われるだけあるかもと思った。
コルクかすの心配もどっかに吹き飛んで舌鼓を打つ私でした。
「美味しい~。もういっぱい」
MySQL vs Postgres パフォーマンステスト
システム屋さんであればご存知のフリーのデータベース
MySQLとPostgresですが、さて、どっちが良いだろうと判断できない
状態ではありませんか?慣れているからと何となく使っていたりします。
それぞれの機能では特徴があり、皆さんご存知かと思いますが、
PL/SQLの真似なのか、PL/pglSQLが使えるPostgres。
処理が早いMyISAMを使うMySQL。
ただ、MyISAMは、コミット、ロールバックが使用できないです。
本日は、
MySQLには有利になってしまう事が安易に予想される
パフォーマンステストの結果をご紹介いたします。
実際どれだけ早いのか測定してみました。
今回は、インサートテスト。
環境は、
CPUが、Athron XP 2500+
メモリが、255M
ハードディクスが、8G
ちょ~オールドマシンで
OSは、CentOS5 kernel2.6.18
MySQLは、5.0.45
Postgresは、8.1.11
PHPが、5.1.6
何れもインストール時に入っていたバージョンを使用しました。
実験は、それぞれに同じテーブルを作成し
PHPによりループで以下のレコード数のインサートを行います。
company_mstには、10万件
department_mstには、50万件
person_mstには、250万件
実行は、コンソール上よりPHPのスクリプトで実行。
(テーブルとプログラムは、このブログの一番下を参照)
ちなみにMySQLは、MyISAMとInnoDBの両方で行ってみました。
さて、結果です。
(ブログでの表組みの方法が分からないので以下ですみません。)
注:単位は、秒です。
MyISAM InnoDB Postgres
company_mst 21 644 771
department_mst 116 3,111 4,048
person_mst 704 16,912 25,154
予想通りにMyISAMの圧勝です。圧倒的に早いです。
以前に大量のデータをインポートするようなシステムを作りましたが、
MySQLのMyISAMを使用しました。パフォーマンスが高いと聞いてましたが
どれ程のものかは実測していなかった事もあり、今回、測定しました。
MyISAMを選んでおいて正解だったようです。
ただし、インポート時の失敗によるロールバックは出来ないので
仕組みを考える必要があります。使用には注意が必要です。
次回、また、インサートしたデータを使用して
色々な実験をしようと思っています。
実験に使用したプログラム(MySQL用)
<?
require_once "common.inc.php";
$start_time = microtime(true);
$con_string = "host=".$server." dbname=".$db." user=".$user." password=".$pass;
$con = mysql_connect($server, $user, $pass);
if (!$con) {
echo "Connection Error";
exit();
}
mysql_select_db($db);
for ($id = 1; $id <= 100000; $id ++) {
$date = date("Y-m-d H:i:s");
$query = "insert into company_mst values ('".$date."', 'hosoya', NULL, NULL, 0, NULL, ".$id.", '株式会社吉岡', 'ヨシダ', '1001000', '東京都中央区中央1-2-3中央ビル12階', '0303030303', '0303030304', 'miyata@xxxxxx.co.jp'
, 0)";
$ret = mysql_query($query);
if (!$ret) {
echo "Query Error";
exit();
}
}
mysql_close($con);
$finish_time = microtime(true);
echo "company_mst insertテスト\n";
echo "start=".$start_time."\n";
echo "end=".$finish_time."\n";
$id --;
echo "レコード数=".$id."\n";
echo "完了しました\n";
$time = $finish_time - $start_time;
echo "処理時間は、".$start_time."~".$finish_time."=".$time."秒です。\n";
?>
実験に使用したテーブル構造(MySQL)
--
-- テーブルの構造 `company_mst`
--
CREATE TABLE IF NOT EXISTS `company_mst` (
`rec_ins_date` datetime NOT NULL,
`rec_ins_id` varchar(16) NOT NULL,
`rec_upd_date` datetime default NULL,
`rec_upd_id` varchar(16) default NULL,
`upd_count` int(11) NOT NULL,
`exp` varchar(256) default NULL,
`company_id` int(11) NOT NULL,
`company_name` varchar(256) NOT NULL,
`company_name_kana` varchar(256) NOT NULL,
`zip_code` varchar(7) default NULL,
`addres` varchar(256) default NULL,
`tel` varchar(11) default NULL,
`fax` varchar(11) default NULL,
`mail` varchar(256) default NULL,
`delete_flag` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`company_id`)
) ENGINE=MyISAM DEFAULT CHARSET=ujis;
-- --------------------------------------------------------
--
-- テーブルの構造 `department_mst`
--
CREATE TABLE IF NOT EXISTS `department_mst` (
`rec_ins_date` datetime NOT NULL,
`rec_ins_id` varchar(16) NOT NULL,
`rec_upd_date` datetime default NULL,
`rec_upd_id` varchar(16) default NULL,
`upd_count` int(11) NOT NULL default '0',
`exp` varchar(255) default NULL,
`department_id` int(11) NOT NULL,
`company_id` int(11) NOT NULL,
`department_name` varchar(255) NOT NULL,
`department_name_kana` varchar(255) NOT NULL,
`zip_code` varchar(7) default NULL,
`address` varchar(256) default NULL,
`tel` varchar(11) default NULL,
`fax` varchar(11) default NULL,
`mail` varchar(255) default NULL,
`delete_flag` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`department_id`),
KEY `company_id` (`company_id`)
) ENGINE=MyISAM DEFAULT CHARSET=ujis;
-- --------------------------------------------------------
--
-- テーブルの構造 `person_mst`
--
CREATE TABLE IF NOT EXISTS `person_mst` (
`rec_ins_date` datetime NOT NULL,
`rec_ins_id` varchar(16) NOT NULL,
`rec_upd_date` datetime default NULL,
`rec_upd_id` varchar(16) default NULL,
`upd_count` int(11) NOT NULL default '0',
`exp` varchar(255) default NULL,
`person_id` int(11) NOT NULL,
`company_id` int(11) NOT NULL,
`department_id` int(11) NOT NULL,
`person_name` varchar(64) NOT NULL,
`person_name_kana` varchar(64) NOT NULL,
`position_id` int(11) default NULL,
`tel` varchar(11) default NULL,
`fax` varchar(11) default NULL,
`cellular` varchar(11) default NULL,
`delete_flag` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`person_id`),
KEY `company_id` (`company_id`),
KEY `department_id` (`department_id`)
) ENGINE=MyISAM DEFAULT CHARSET=ujis;
セレクトテスト:MySQL vs Postgres パフォー…
Thunderbirdのエラーメッセージの消し方
自分は、VistaになってからThunderbirdを使用しています。
そして、私の会社のメールサーバはレンタルサーバを使用しています。
当社用のドメインを取って使っているのですが、
ポップサーバは当社のドメイン、しかし、セキュア認証はサーバ会社の
ドメインとなっているため以下のエラーメッセージが表示されてしまいます。
「"pop.xxxx.jp"との接続を確立しようとしていますが、このサーバが使用している証明書は"(*.zzzz.ne.jp、zzzz.ne.jp)"のものです。可能性は高くありませんが、誰かがこのサイトとの通信を傍受しようとしている可能性があります。」
つまり、
「ドメインが違っているよ。だまされてアクセスさせられてませんか?」
まあ、そんな内容です。
レンタルサーバ会社によってもセキュア認証のドメイン登録が
異なると思いますので全てのレンタルサーバで出る訳ではないでしょう。
これを出ないようにするために設定を変えようと試みましたが、
そんな設定は無いようです。
「しかたがないのかな?」
そう思った時に名前を解決してやれば
出なくなるかもしれないと思いつきました。
私こそ、メーラーをだまそうとしています。
DNSを触る事はできないので、コンピュータのhostsを編集します。
(まあ、DNSを触ると周囲が大変な事になりますので)
エディターで開こうとすると「編集ができない」とエラー出てきました。
Vistaを使用しているのでシステムに関連するファイルは
容易にはいじれないようです。どうやら「管理者で実行」と
いうのがあるそうで、「スタート」→「プログラム」→エディターを
右クリックし「管理者で実行」で開きます。そして、以下の例の様に
ポップサーバのIPアドレスとレンタルサーバの認証ドメインを追記します。
000.000.000.000 xxx.domain.ne.jp
↑ ↑
ポップサーバのIPアドレス レンタルサーバの認証のドメイン
なお、レンタルサーバの認証のドメインのxxxの部分は、
世の中に存在しない物にします。存在するものにすると
本当のxxx.domain.ne.jpをアクセスしたい時に、
hostsに書き込んだ000.000.000.000に行ってしまうからです。
次に、Thunderbirdのアカウントの設定を開きます。
POPメールサーバのサーバ名を入れる欄に
先程hostsに入力したサーバ名(xxx.domain.ne.jp)を入れます。
「さて、エラーメッセージが出なくなったかな?」
早速、受信してみます。
「やった~。エラーメッセージが表示されなくなった~。」
これで、フォーカスを奪われなくなり、入力した文字を変換前に
確定される事もなくなりました。終。



