ブログのアクセス解析のリプレースのために,大量のアクセスログデータを mysql に投入する。

マスター - スレーブ構成のマスター側は blackhole エンジンを使うことにした。どんなSQLを投げても何も保存しない、何も結果を返さない、ひたすら処理を無視するだけの文字通りのブラックホール。

何もしないので、もちろん処理は高速だ。そんなのDBとして無意味じゃないかと思うかもしれないけど、通常のDBの前段に入れてやると、入力バッファの役割を果たしてくれるのだ。

問題は、一気に大量のデータをバッチで投入したときのマスターとスレーブの処理速度の違いだ。スレーブは普通の (つまり、ディスクにデータをちゃんと保存する) DBなので、バッチ処理中はスレーブの処理がどんどん遅れていく。

replication

↑このスクリーンショットを撮った時点でのスレーブの遅れは 58000秒。マスターに投入したデータがスレーブ側で観測できるようになるまで、約16時間かかるということだ。

あ,これって「ほしのこえ」のモチーフに似てるな。

ほしのこえ [DVD]ほしのこえ [DVD]
販売元:コミックス・ウェーブ
発売日:2002-04-19
おすすめ度:4.0
クチコミを見る


60000秒近いタイムラグがあるということは,つまり,DBの現在位置は地球から約180億km (120AU)。
太陽系の外縁,エッジワース・カイパーベルト のさらに外側にあり、データはその空の遠くからはるばる地球まで光の速度でやってくるのだと考えてみる。

僕らが見ているのは、今から16時間も前のDBの姿だ。


「ほしのこえ」の中で、会話のキャッチボールが成り立ちにくい超長距離通話に独特の流儀が描かれていたのと同じように、マスター - スレーブ間に常にタイムラグを想定しなければならない状況では、プログラミングのスタイルに独特の流儀が必要になる。
ちょっと面白いと思ったので、そのあたりを少しずつまとめていこうかと思う。

(from intra blog 2009-06-08)



(注: その後、スレーブの時間差は徐々に解消し、無事サービスインを迎えました。今もDBは地球に近づいたり離れたりはしていますが、概ね太陽系内に留まっているようです。)



このエントリを書くために、Google で「光の速度で60000秒って、天文単位でいうとどれくらいの距離だっけ ?」って聞いたらちゃんと計算してくれた。こんな単位も認識するんだなぁ。

google1


日本語でもおk

google2


「で、地球から120天文単位のあたりにはどんな天体がある ?」って質問にも答えてくれたらさらに凄かったんだけど、それはさすがに無理っぽかった。


業務でも、「1.5Gバイトを1時間で転送したら何メガbps相当だっけ ?」みたいな面倒な単位変換をやってくれるので重宝してます。

google3