Entries from 2007-01-01 to 1 year

Q4M の DELETE (あるいはメッセージの消費) の実装について

rev. 32 の段階では行のヘッダを write -> fdatasync してるけどこれは良くない。理由は fdatasync 中に他スレッドの read をブロックしてはいけない rev. 30 で、このように実装 そうなると、DELETE の fdatasync が完了する以前に、他スレッドから削除完了…

Q4M 最適化 ToDo

まずは基本的なところから。 リードロックとライトロックの分離 fdatasync の間、SELECT がブロックされるのはヒドすぎるw rev. 32 で対応 最初の rnd_next でメタ情報をスレッドローカルにコピーする SELECT 1回で mutex ロックを2回だけにすべき 後回し…

Q4M のBLOB実装してFC

何ができて何ができないかは README 参照のこと。http://mt.endeworks.jp/d-6/2007/12/q4m.html で dmaki さんが Q4M テストしてくれてるけど、実はさっき (rev. 24) まで blob 対応していませんでした。blob が動くか動かないかは、バッファオーバーランと…

InnoDB における fdatasync 失敗時の処理

abort() したり NULL ポインタにアクセスしたりしてプロセスを殺す。でいいらしい。

Q4M と fdatasync

rev.13 あたりでテストコードを足したりした。あと Linux でも make が通るようになった。 fdatasync をマジメにやっているので遅い。 当然だけど書込速度が 50 rows/sec. とかそんな感じ。 Pluggable Storage Engine の API にバルクアップデートの仕組みは…

Q4M のベンチマーク

rev 15 で測定。mysqlslap だといい感じ。 $ ../mysql-5.1.22-rc/bin/mysqlslap -S /tmp/mysql51.sock --concurrency=10 --iterations=100 --engine=myisam,innodb,memory,queue --auto-generate-sql Benchmark Running for engine myisam Average number of…

Q4M のディスクベースのコードが動き出した

結局、先頭行からの単方向リストにした (+お尻の位置をヘッダに書く)。なので、・行の消費は 1 write + 1 sync ・行の追加は 2 * (1 write + 1 sync)どうせ C/S で運用するんだし、ソケット通信のオーバーヘッドがある以上 mmap とかがんばらなくてもいいよ…

なぜRDBMSでMQを実現するのにプラグインが必要か

自分でも忘れがちなので。理由: 通常テーブルと LISTEN & NOTIFY_ONE では信頼性のあるメッセージの伝達が難しいから。 欠落がないようにしようと思ったら、サブスクライバから ACK を飛ばしてもらう必要がある サーバは、ACK を受信するまで、その行を他の…

Q4M

Kazuho Oku on Twitter: "P::C::MQ のバグ報告したし、独自MQの開発するかな (ぉ" って書いたら Toru Yamaguchi on Twitter: "@kazuho 明後日になると90%くらいの確率でリリースしましたエントリが挙がる悪寒" とか言われたので、なんとか リリース しました…

POE::Component::MessageQueue のバグ

最新版での話 (http://code.hackyourlife.org/bzr/dsnopek/perl_mq の revision 110) 送出する Stomp フレームの末尾にゴミ (0x0A 0x00) がつく でも Net::Stomp のパーサは torelant なのでなんとかなってる ただし、2つ目以降のフレームのメッセージ名に…

MySQL (MyISAM) で運用中のテーブルバックアップ

MyISAM だと --single-transaction が使えないため、普通に mysqldump するとロックがかかってしまって、サービスがストールしてしまう。つーわけでこうした。 MAX_ROW_ID=123456 BLOCK_SIZE=1000 mysqldump -u root --no-data db_name tbl_name for i in `p…

CGI で Authorization ヘッダが読めない理由と認証用クッキー

昔から CGI で Authorization ヘッダは読めないようになっていて、それが WSSE のような規格が使われちゃったりしちゃう原因のひとつにもなっていたりするわけですが。で、その理由は Apache の server/util_script.c あたりを見ると、以下のように書いてあ…

Re: クロスドメインのセキュリティ問題を OAuth で解決する

[あとで] タグをつけていたら、スターがついていた件。中途半端な反応ですみません。 ちゃんと検証してない思いつきレベルの話。JSONP や Flash の crossdomain.xml を使ったクロスドメインアクセスで機密情報を取得する場合は、(何も対策をしないと)機密…

上の続き

OAuth が使えるならサーバ同士で直接データをやり取りすればいいのに、わざわざクライアント側でやる必要あるの?というツッコミだと理解しました。僕もそれほどちゃんと考えていなかったので、この機会に考えてみました。 負荷軽減 … Consumer 側に負荷をか…

IO::Socket::INET のインストールメモ

perl 5.005 以前の場合は IO-1.20 以前が必要 Solaris で /usr/ucb/cc が使えない場合は perl Makefile.PL CC=gcc LD=gcc CCCDLFLAGS=-fpic OPTIMIZE=-O2

sudoers で許可したディレクトリだけ削除させる sudorm

たとえばリモートから ssh でログの退避を行っている場合、コピーが完了したログをどうやって削除するかが問題になったりする。というのは、ログファイルの owner はたいてい root だから、ssh 経由だと削除できない。古典的な方法としては setuid された (…

SuitePro V1 サーバのメンテ

下手な専用サーバよりも速くて(?)安定しているので気に入っている SuitePRO だけど、旧タイプの v1 だとディスク容量が少ない。というわけでちょっとでも空き容量を増やすために rpm -qa してパッケージ削除開始。今日はこれだけ削除した。 gnome-python2 gn…

twitter が落ちてると辛い

IRC で言えない独り言でも twitter なら言えるのに。

CGI::Application::URIMapping 0.04

CGI-Application-URIMapping-0.04 - A dispatcher and permalink builder - metacpan.orgURI がパーマリンク形式じゃない場合にリダイレクトとか書けるようになった。例えば、以下のコードだと、 users?order_by=name users?category=friends&order_by=age&s…

SSH 接続の権限を限定 (しつつトンネリングするとかそういう話)

SSH でサーバへの接続をトンネリング - kazuhoのメモ置き場の続き。 セキュリティ上の要請として、SSH 接続のクライアント側がクラックされても、サーバ側に対して攻撃ができないよう設計したい、ということがある。 先の例のように単純に公開鍵認証をしてい…

SSH でサーバへの接続をトンネリング

zebedee 使おうかと思ったけど面倒そうだったので SSH。 % cat /service/********/run #! /bin/sh exec /usr/local/bin/setuidgid tunnel \ /usr/bin/ssh -R '12345:localhost:12345' tunnel@remote-host \ 'while [ 1 ]; do echo ping ; sleep 60; done' % …

アプリケーションプロトコル設計のベストプラクティス (over TCP)

みたいなものを誰かまとめてないのかな、と思ってる。ないのかな。とりあえず自分用メモ。 概要 接続後最初の電文は client => server であるべき 理由: syn_cookies, dataready, パケット数削減 (w. SYN ACK) 最初の電文は、プロトコルの magic で始めるべ…

MySQL における Bulk Update

またハマったのでメモ。 begin; delete from t; insert into t select ...; commit;とかやると、完了までの間、他の更新がブロックされてしまう。更新系と参照系が同一のウェブサーバで動いていたりすると、サービス全体がその間利用不可能になる、というこ…

Re: 文字列を作る::JavaScriptでのおはなし

var x = "またきてね"; $userdata //ここでxの中身を書き換えます。 alert(x);上記のように、$userdataがあって自由に書けるとき、「こんにちは」とalertさせましょうという遊びです。条件は、、"、'、/、を使わない、fromCharCode()も使わない・・・です。…

RDBMS のインデックスの話

以前どっかで読んで、「なるほど〜」「でも必ずしも当てはまるとは限らないんじゃない」と思ったこと。 プライマリキーは HDD 上にシーケンシャルに保存されることが期待できるけど、他のインデックスはシーケンシャルになることは少ない (基本的にそうなら…

メールアドレスをチェックするたったひとつの冴えたやり方

VRFY コマンドを使えば、そのメールアドレスが本当に存在するかまでチェックできるよ。完璧だね☆ PS. ネタですからねっ!!!

MySQL の「tight index scan」

tight index scan て実装されてる? 5.0.45 で、例に挙がってる SELECT c1, c2, c3 FROM t1 WHERE c2 = 'a' GROUP BY c1, c3;を実行しても、インデックスは c1 の部分しか使われてないっぽい。ソースコードを見ても、実装されてるような形跡がみあたんなかっ…

ことえりはなんでオタク仕様なのか

こうだ→「国府田」 こうだまりこ→「國府田マリ子」 さきこ→「咲子」 たまがわさきこ→「玉川紗己子」 さとみ→「里美」 こおろぎさとみ→「こおろぎさとみ」 のりこ→「典子」 ひだかのりこ→「日高のり子」 みつこ→「光子」 ほりえみつこ→「堀江美都子」 他にも…

Installing daemontools onto Mac OS X

# mkdir -m 1755 /package # cd /package # curl -O http://cr.yp.to/daemontools/daemontools-0.76.tar.gz ... # tar xvzf daemontools-0.76.tar.gz ... # rm daemontools-0.76.tar.gz # cd admin/daemontools-0.76This line is only needed for OS X 10.4.…

MySQL - delete の実行プラン

MySQL 5.0.45 でテスト。 delete from t where not exists (seect * from ...); delete from t where exists (seect * from ...); delete from t where c in (select ...);どっちもテーブル t をシーケンシャルアクセスするらしい。まじですか。 それとも、…