このドメインは、お名前.comで取得されています。 お名前.comのトップページへ Copyright © 2020 GMO Internet, Inc. All Rights Reserved.
「え!?妻が会社に!?」と一瞬戸惑いましたが奥一穂さんでした。 別に妻が会社に来てもやましいことなど何もありませんが、こんちには、ちわです。こんにちわ。 以前の記事でもご紹介した通り弊社が提供しているまちつく!というサービスでは Q4M 0.9.0 を利用して地図の画像生成と Amazon S3 への転送を行っています。 その Q4M に障害が発生し弊社ではどうも解決できそうにないので Q4M の作者の奥一穂さんに相談させてもらいました。 その際は、デッドロックのバグを踏んでいる可能性があるので Q4M を 0.9.1 以上のものしてみてはどうかと返答を頂きました。 弊社では 64bit 環境であった為、0.9.2 は除外され、0.9.3 は新しすぎるので 0.9.1 を採用することにし、バージョンアップ後に障害もなく安定稼働を続けています。 そんな経緯もありまして、先日弊社に奥一
作業メモです。 src.rpm の取得 # cd /usr/src/redhat/SRPMS # wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-community-5.1.42-0.rhel5.src.rpm/from/http://ftp.iij.ad.jp/pub/db/mysql/ rpmbuild --recompile ビルド時のソースツリーが必要なので recompile # rpmbuild --recompile --define 'community 1' /usr/src/redhat/SRPMS/MySQL-community-5.1.42-0.rhel5.src.rpm checkinstall で rpm 化 make 時に MYSQL_LIBDIR をつけてるのは libmysqlclient.s
レプリケーションとQ4Mを使う - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? レプリケーションを使う MySQL にはレプリケーション機能があるのはとても知られている事です。 レプリケーションの無い MySQL は、ブラウン管の無いブラウン管テレビくらいの物でしょう。 そして ORM でも切っても切れない物では無いでしょうか。 Data::ObjectDriver でも livedoor のどっかのサービスで自作 Driver 書いて使ってるとか DBIC の世界でも DBIx::Class::Storage::DBI::Replicated なんて物があるようです。 もちろん Data::Model でも対応しています。 Driver::DBI::MasterSlave です。 Driver::D
Hoppyいいよ:maaash.jp Hoppyいい シリコンバレー行った時に参加した Flash Game Summit とかでも、FITC Toronto 2009でも、マルチプレーヤーFlash熱そうだったので自分の周りではきてる。 ということで、Flash XMLSocketサーバ「Hoppy」を奇跡的にも気に入ってくれた方がいらっしゃったみたいで、なんとも嬉しい限りです。 作者としては、いつもの悪い癖で、作りっぱなしの放置プレイ状態だったんですが、せっかく「使ってくれてる感」が漂って来ましたので、今一度、愛情を込めてみようと思います! というわけで、少し解説記事でも書いておこうかな思うんですが、その前にmashさんの疑問にちょっと回答させていただいときます。 DBとの連携 POEとか使ったシングルプロセスシングルスレッドのデーモンでデータベース扱う時はどうするのがいいんだろう?
Shibuya.pm #11で発表しました こんにちは、本日のHOTEL担当、素敵なレディーことYappoです。3人の荷物が家族のオモチャにされないか心配だけどもう寝るぞ!話は変わるけど、acotieさんはアクメアクメ言っててどんだけアクメ好きなんだよ!と思ったのは内緒だぞ! という訳でShibuya.pmで発表してきました。二本立てです。 一本目は、一般的なperl userの作法のBやらDevel::Peekの紹介に加えて、新しく作ったDevel::RunOpsAnalizeを使ってOPCODEの実行単位でPerlの動作を覗き見る方法の紹介をしました。 二本目はLTで、dan the eval botの作り方を説明する為のCentOSのインストールをするというのを口実にHatetterのアーキテクチャや、なぜこれらの要素を採用したかを紹介しました。 もちろんCentOSのインストールも
前回、Q4M(Message Queue for MySQL) を Debianにインストールできたので、今度は実際にキューを使用するアプリを書いてみたいと思います。 まずはキューに URL を入れてそれを取り出すだけの簡単なプログラムを作ってみます。使用言語は Ruby。キューへのアクセスには ActiveRecord を使って簡単なライブラリにしてみました。 まずはテーブル作成、初期データ投入。 CREATE DATABASE q4m; USE q4m; CREATE TABLE queue (url text) ENGINE=queue; INSERT INTO queue(url) VALUES('http://www.infosia.co.jp/'); 続いてアプリ側。 require 'rubygems' require_gem 'activerecord' ActiveRec
サイボウズ奥さん作の q4m を職場で提案。 jdbc で接続するのはちょっと・・・という意見が出たので、一個ラッパーを挟むことにして、無事職場で導入されそうだ。 ラッパーは apache の mod で作成した。単純にキュー投入リクエストを受け取り q4m に投入するだけの簡単なもの。とはいえ内部で mod_dbd を使用したコネクションプーリングも行い、(apache 上で動作させているため)ログ出力等の周辺機能もプラガブルに追加、変更可能だ。apache を使わずこれらを作り込むのは結構大変だ。 これでキューへのデータ投入に関しては単純な http リクエストで行えるということになる。 php でも servlet でも cgi でも簡単に作れるこの機能をあえて apache の mod で作成したのは、パフォーマンスを一番期待できるのではと考えてのこと。ラッパーがボトルネックになる
複数のキューの中で、データのあるものを探して取って来る Q4M の便利機能。 mysql> SELECT queue_wait('high_priority_table', 'low_priority_table', 10); これのこと。 エラーキューとしてウチでは使おうと思っているが、これの動きに若干癖があったのでメモっとく。 まず、この書き方をするときは、タイムアウト指定が必須。 select queue_wait('a', 'b'); こういう書き方をすると、a テーブルの中身しか見てくれない。 select queue_wait('a', 'b', 60); のようにタイムアウトを必ず指定する。(上の例だと60秒) ちなみに、これはチュートリアルにも書いてある。 若干??になったのが、 チュートリアルの一番上に書いてある「一番簡単なq4mの使い方」の例 SQL mysql> SE
現状の queue_wait はオーナーモードで呼び出した時に、勝手に queue_end が走るようになっている。また、queue_end は非オーナーモードでも何度でも呼べる。 よく考えられた仕様なのだが、私が若干特殊な使い方をしようとしていることもあって、queue_wait 時に勝手に queue_end してもらいたくない。要するにオーナーモード時は queue_wait してほしくないということだ。また、queue_end もオーナーモードだけで実行出来てほしい。 ※ ちなみに、今自分がオーナーモードに居るかどうかは、 select queue_rowid(); で確認できる。オーナーモードでないと、このSQLはエラーになる。 で、queue_wait, queue_end の動作を上記のように変更する簡単なパッチを作成した。対象バージョンは 0.8.4。 使い方は、q4m の
はてなのお気に入りアンテナをTwitter Clientで見れるゲートウェイ「Hatetter」作りました 注意:ブックマークだけでなく、お気に入りアンテナのフィードを使うようになりました。 はてブのお気に入りリストってRSSリーダとかで見たりするのが多いんですが、もっとTwitterのようにカジュアルにウオッチしたいと思って、お気に入りリストのRSSをTwitter API互換のFeedに変換するサーバを書きました。 Hatter - 太っ腹にソースコードも公開してるので、自宅サーバとかに置いて使うってのもできます。 たとえばid:acotieがお気に入りに入れてる人達のブックマークをTwitter風に変換したい時は http://hatetter.blogdb.jp/acotie/statuses/friends_timeline.json もしくは http://hatetter.b
Q4M取り扱う所を Queue::Q4M 使って楽しようと思ったのだが、Queue::Q4M はそれ単体で使わないとqueue_abortとか呼びまくりそうな実装だったので、全部自分でハンドリングしたった。 use Data::Model::Driver::Queue::Q4M; my $driver = Data::Model::Driver::Queue::Q4M->new( dsn => 'dbi:mysql:database=test', username => '', password => '', timeout => 60, # queue_wait timeout ); { package MyQueue; use base 'Data::Model::Extend::Queue::Q4M'; use Data::Model::Schema; base_driver $dr
Q4MをMacPortsのMySQL環境に入れる方法 macportsでmysql入れると /opt/local/lib/mysql5/mysql とかいう独創的な所にライブラリが入るので、そのまんまのQ4Mのconfigureじゃ./configureすら上手く動かないし、ググっても良くわからないのでてっとり早くconfigure.inを書き換えたよ。 パッチはhttp://gist.github.com/94339から 実行令とかは下記の通り。 $ patch < ../for-macports.patch $ autoconf # include ディレクトリを追加するのが必要 $ CPPFLAGS=-I/opt/local/include ./configure --with-mysql=/opt/local/var/macports/sources/rsync.macports.
ある日Q4Mを利用したシステムを運用していたところ、プログラマの方から 「Q4Mのテーブルが壊れたっぽいのだけども。。。」 との報告があり、状況を聞いてみた。 どうも、Queueに突っ込んだけども処理したくないデータがあったという理由で一部の行をDELETEしたとのこと。 で、早速DBを調べてみると、全部queue_waitで取り出したにも関わらず行数が0にならなかったり、 発行しているqueue_endが実行されずにずっとプロセスが残っていたりして大変カオスな状態になっていた。 (insertも止まっていた) その場ではMySQLを強制的に再起動して、tableやschemaをdropして再作成してもらうことでことなきを得た。 が、今日帰ってきてQ4Mのページを見て謎が解決。 Q4Mの「Limitations and Known Issues」に removal of multiple
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く