Entries from 2010-01-01 to 1 year

MySQL や PostgreSQL でトリガーベースの実体化ビューを後から追加する方法 (もしくは無停止での CREATE INDEX)

読み込み>書き込みなデータベースだと、実体化ビュー (materialized view) を使って読み込み速度を上げるってのは有効な手法 ちなみに MySQL や PostgreSQL だと実体化ビューはトリガーを使って書く *1 では、トリガーベースの実体化ビューを後から追加した…

Solr って、書き込みの Disk I/O が多くて、リアルタイム検索は不可能なのかしら

を読んでいて、pp.266-267 に、以下のような記載があった。 ・Optimize の重要性 コマンドは Solr のインデックスを物理的に最適化するコマンドです。具体的には、Solr では commit のたびに一群 11 個のファイルを作成します。 つまり、細かく commit を繰…

彼氏が LIKE 検索使ってた。別れたい… (もしくは Solr 入門とか Tritonn のインクリメンタルバックアップとか)

LIKE 検索だとデータ増えてきた時なんか恥ずかしいwww 下向いちゃうしww 男にはせめて全文検索エンジン使ってほしい・・・ 検索が遅すぎてユーザー帰っちゃったら・・・・もう最悪www せめて普通 Tritonn や Solr くらいは使って欲しい。 常識的に考えて欲し…

Consistent Hashing を使うべきケース、使う必要がないケース

Consistent Hashing が便利なのは、頻繁にノードが上がったり落ちたりする環境で、ネットワークレベルで可用性を保証する必要がある場合。逆に RDBMS のシャーディング等で ノード毎に高可用性を確保している ノード追加/削除は頻繁じゃない 場合は、値域分…

TCPサーバのテスト用に、空きポートを見つける方法

Perl でサーバをテストするためのモジュール Test::TCP の作者 id:tokuhirom が言ってたことだけど、テスト用に空きポートを見つけるのは、bind の port 番号に 0 を渡すのが一番簡単。Perl で書くなら、こんな感じ。 my $unused_port = do { my $l = IO::So…

OpenSolaris 2009.06 のファイルを emacs + tramp で開けなかった件

http://defect.opensolaris.org/bz/show_bug.cgi?id=9227 経由で http://hub.opensolaris.org/bin/view/Project+ksh93-integration/2009-07-02 をインストールして解決

Cosmic っていうネットワークストレージを作り始めた

GitHub - kazuho/cosmic: fail-safe management tools for network-based software RAID, using mdadm + iSCSI概要 (というか近場の目標) は、以下のとおり。 fail-safe な network RAID 多重マウントが発生しないプロトコルを実装 RAID だから DRBD や MySQ…

安全なファイル書き換えにはディレクトリも fsync すべき。だけど Perl でどう書くか

間違ってたらツッコミお願いします。ext4 が出たタイミングで話題になったことだけど、(ext4 に関係なく一般論として) ファイルを安全に書き換えるためには、いくつかの手順を踏む必要がある。で、Perl だとだいたい以下のようになる。 # 1) 適当なテンポラ…

BPStudy と並カンと LRU

金曜の BPStudy で「TDD なペアプロで 30 分で課題を解きましょう」っていうイベントがあって、初対面の方 (@uranojpさん) と「C 言語にしますかね」とか言ってたら、お題が LRU で、C 言語だと辛いなと思いながら、二人でがんばってなんとか時間内に実装完…

InnoDB で fsync しない方法と、そのメリット

InnoDB はデフォルトでは同期I/O *1だけど、 innodb_flush_method=nosyncっていう隠しオプションがあって、それを有効にすると MyISAM みたく fsync しなくなるよ。ってソースコードちら見した自分が言ってた。この設定がうれしいのって、どういう時だろう?…

はてなのサーバ運用は教科書的なスケールアウト手法?

はてなにおける SSD の実績 - mura日記 (halfrack) の感想。木を見て森を語るような話ですが、この iostat を見ていて興味深かったのが、 ボトルネックは SSD この状態だと iostat -x の ioutil は 100% にかなり近い値40%-50% 前後だと思う*1 CPU がスカス…

死んだプロセスのスタックトレースを自動収集するデーモンを書いた (そして、その出力を開発者に送ってあげると喜ばれるよという話)

死んだプロセス (あるいは kill したプロセス) の core イメージから自動的にスタックトレースを収集するデーモンを書いたので、これをセットアップしてサーバにインストールしとくといいかもです (kaztools/bt_cores at master · kazuho/kaztools · GitHub)…

それでも私が Perl を使いつづける理由

元ネタ: http://d.hatena.ne.jp/tokuhirom/20100120/1263958061なぜ俺が $@%* を使いつづけるのか。* とか良く分かってないけど。 システムプログラミングができる 例えば低水準I/Oが標準で用意されているとか。 gccがない環境にも入っている gccがない環境…

2010年代にはLVMスナップショットベースのバックアップとか流行らない (もしくはログ構造化ファイルシステムへの期待)

感想文です。タイトルはテンプレから。たとえばうちの環境(普段 20-80 IOPS くらいの負荷がかかっている HDD) で、blockdiff (参照: Kazuho@Cybozu Labs: blockdiff を使ったお手軽ホットバックアップ環境の構築 (Linux, MySQL, etc.)) を実行すると、バッ…

nopan っていうレポジトリから直接ソフトウェアをインストールするインストーラを作り始めた件

perl の場合、CPAN モジュールは sudo cpan -i Module の1コマンドでインストールできる。でも、svn や git レポジトリのコードは、チェックアウトして perl Makefile.PL && make all test && sudo make install とか、めんどくさい。なので、svn や git レ…

Perlでマルチプロセスデーモンを作るためのモジュール「Parallel::Prefork」に(Min|Max)SpareServers対応を追加した話 (もしくは read(2) / write(2) の atomicity)

Perl で複数のワーカープロセスを制御するためのモジュールとしては Parallel::ForkManager が古参なんだけど、このモジュールはプロセスを fork するだけで、シグナルを受信したらワーカープロセスを再起動とかそういうことができないので、自分は Parallel…

rsyncを使って、ログとかファイルをリモートサーバに退避する方法

rsync -az -e ssh --out-format='%n' src-dir remote:dest-dir > files_copied.$$ || exit $? rm -f `cat /tmp/files_copied.$$` || exit $?CentOS だと rsync -avqz でコピーしたファイル名だけ一覧で出たんだけど、Ubuntu 9 だと出なかったorz 上なら rsync…

DNS リゾルバに、FQDN 以外でのルックアップをさせない方法

クローラを動かしている DMZ の DNS のログを読んでたら、 2010-01-12 00:25:21.493412500 7f000001:bffd:1023 + 001c foobar.example.com.dmz.localみたいな、「FQDN + DMZ のドメイン名」の検索がいっぱい実行されてた。実在する FQDN であっても応答まで…

めんどうなのでディスク容量監視をワンライナーでcrontabに書いた

15 3 * * * perl -wle 'my $s = `/bin/df -k`; print $s if $s =~ m{^/dev/.* (9[0-9]|100)\%}m'df に限らず、コマンドの結果を正規表現で比較して問題があったらprint、ってのはcrontabで監視する時の基本的なイディオム要出典。もちろん、backquoteじゃな…