ablog

不器用で落着きのない技術者のメモ

Shibuya Perl Mongersテクニカルトーク#12 NoSQL特集 に行って来た

Shibuya.pm#12 に行って来た。本物の宮川さんを見れた!(ミーハー)。難しくてわからないところがたくさんあったけど、刺激になった。また行きたい。

最近DB(Oracle)のお勉強しているので、「 NoSQL vs. NoKVS ライトニングディスカッション」が面白かった。特定の目的に特化したデータベースを自分で作られていて、すごいと思った。

以下、とても断片的で不正確なメモ。

特別講演
  • 宮川達彦(id:miyagawa)さん - "Tatsumaki" I/O bound HTTP clients in web frameworks
    • Tatsumaki at Shibuya.pm Tech Talks #12 - bulknews.typepad.com
    • まず、PSGI/Plack がわかってない。
    • Perl web applications と web servers のインタフェースってどういうことだろう?
    • web server の上に PSGI という層をかぶせることで、WAF から web server の層を隠蔽するってことかな。
    • 例えば、PSGI という層があることで、mod_perl で運用している Catalyst の Web アプリを CGI でも動かせるみたなことではないかと思う。
    • そうであれば、とても便利だと思う。
    • 世の中には mod_perl 使うほどトラフィックがないサイトがほとんどだと思うし、トラフィックが増えたときに Web アプリはそのままで、mod_perl に移行できたりするとステキ。
    • PSGI/Plack の説明じゃないけど、以下の説明がとてもわかりやすかった。

HTTP::Engineは,RubyのRack,PythonWSGIなどと同じように,CGImod_perlといったバックエンドの違いによるアプリケーションの実装の違いを吸収してくれるライブラリで,これを使用すると開発者はバックエンドの違いを意識することなくWebアプリケーションを開発することができます。

つまり,Arkアプリケーションは,同じコードでさまざまな環境で動作させることが可能です。

第1回 Arkって何だ? ―Ark が生まれるまで:ついに出た!最新Perlフレームワーク「Ark」徹底解剖|gihyo.jp … 技術評論社
    • 次に Non-blocknig がわからない。

ノンブロッキング通信とは、データの送受信を行なう際に、送受信の完了を待たず、他の処理を開始する通信方法。並列処理の一種。

 ノンブロッキング通信では、通信機器・プログラムが行なう実際の通信処理と並列に、通信が完了していなくとも可能な処理を進め、通信が完了していないとできない処理にたどりついた場合には、そこで通信の完了を待つことになる。これに対し、正常に送信できたかどうか通信の結果を待ち、通信が完全に完了してから残りの処理を行なう方式をブロッキング通信(ブロッキングモード)という。

 通信相手との同期を取らない点では一種の非同期通信といえるが、いわゆる非同期通信が単に通信相手からの返事を待たない(同期を取らない)というニュアンスであるのに対し、ノンブロッキング通信では主に、通信処理の完了を待つことによって他の処理の進行を妨げないことを表わしている。

ノンブロッキング通信(ノンブロッキングモード)とは - IT用語辞典
NoSQL vs. NoKVS ライトニングディスカッション
  • 平林幹雄(mikio)さん - Tokyo (Cabinet|Tyrant)
    • たしか奥さんから「fsync してないという批判に対する反論などあれば聞かせて欲しい」の質問に対して、「ディスク故障ではfsyncしても無駄。電源を抜いたようなケースではデータロストが発生するが、fsync してるとハイトラフィックをさばけない。必要なら別のプロダクトを使ってください。」とのこと。
    • 参考
  • 古橋貞之(id:viver)さん - えとらぼで kumofs 作って運用してみた
    • Gateway を使っているのが特徴。DB とのコネクション数が少なくパフォーマンスが良い。DB への物理的な接続も隠蔽される。
    • えとらぼの ficia で写真のメタデータの保存に使っている。
  • 奥一穂(id:kazuhooku)さん - NoKVS な RDBMS sharding 作ってみた
    • ベンチマークテストを行う時は、リモートホストから測定すべし。
    • ホスト間の通信はTCPのバッファが有効に機能するため、ブロックサイズによる速度の変化はほぼないが、単一ホスト内でのTCP通信では送信プロセスがwrite(2)を呼ぶたびにコンテクストスイッチが発生するため、ブロックサイズが小さいとコンテクストスイッチが頻発してパフォーマンスが低下するとのこと。
    • つまり、ホスト間のTCP通信ではデータを運ぶ箱のサイズが一定なので、アプリケーション送信するブロックサイズの違いによってパフォーマンスが変わることはないが、単一ホスト内でのTCP通信の場合はアプリケーションが送信するたびに実際に送信されるので、同じ量のデータを送信する場合でも、ブロックサイズが小さいと送信回数が多くなり、コンテクストスイッチの回数が多くなり、コンテクストスイッチのオーバーヘッドでパフォーマンスが低下するということだと思う。
    • OSはTCPのバッファを使うかどうかはどうやって判断してるんだろ?ループバックインターフェース or not で判断してるとか?
    • Incline & Pacific は OSS RDBMS を束ねてスケールアウトするためのもの。
    • Pacific は高速・安全なシャード分割ツール。
    • Incline

Incline は一言でいうと、RDBで構成されるshard群の上で read-only かつ eventually consistent な materialized view を実現するためのツールです。

Kazuho@Cybozu Labs: 高度に進化した分散データストアは RDBMS と見分けがつかない? (shibuya.pm #12 スライド)
    • てか shard ってなんだ?

shardは、かけらという意味
正規化のようにカラムを分割するのではなく、レコードを意味のある形で複数のテーブルに分ける。Wikipediaの例ではUSカスタマーとEuropeカスタマーにテーブルを分割。
利点はテーブル行数が減少すること。これによりReindexingなどのロックを長時間保持する処理が短時間化される。これは私も実際に運用しているときに何とかならないかと考えていた点なので参考になる。大きなテーブルになると土日のダウンタイムだけではReindexingが終わらないときがある。また、複数DBサーバの分散環境におけるアクセス効率の向上も大きな利点。

http://thinkmot.com/?p=84
LT
  • 大沢和宏(id:Yappo)さん - Ajax application testing
    • Ajax application を自動テストするツールのデモがすごかった。便利そう。


う〜ん、浅せぇメモだ。