オープンソースカンファレンス 2012.DBに行ってきた

最近このブログも放置気味。まあ自分はもともとあまり記事を書いていなかったのだが、bitchもすっかり書かなくなってしまったので、1年近く更新が止まった状態になってしまっている。

ちょっともったいないので、自分の(仕事がらみのネタも含む)メモ代わりにしていこうと思う。ただし他人が読んでも興味がありそうなものを書くつもり。

で、第一弾として、先週の話だけど「オープンソースカンファレンス2012.DB」に行ってきたので、その時のメモ。

カンファレンスのサイトは以下。プレゼン資料(一部)や当日のUstream中継が見られる。
http://www.ospn.jp/osc2012.db/

BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
担当:アップタイム・テクノロジーズ合同会社
講師:永安 悟史

Stado(スタド)の概要
・MPPミドルウェア。PostgreSQLで使用。
・GridSQLの後継プロジェクト。歴史は長い。
・シェアードナッシング
・オープンソース
・DWH/BI向けソリューション
・スタースキーマを対象としてパラレルクエリを実行するためのもの。
・レプリケーションではない。
・高可用向けではない。
・Postgres-XC(マルチマスターのクラスタ)ではない。
・物理サーバ1台に対して複数の論理ノードを設定することができる。
・パーティショニングは以下2種類を同時に使用することが可能。
レンジパーティショニング → CE(PostgreSQL標準機能)
ハッシュパーティショニング → Stado
・集約処理(sum, count)は2段階で実行(ローカル→ノード間の集計)
・実行可能なSQLに制約あり。
・DMLは遅いのでデータ登録はツールを使ったバルクロードを推奨。
・ノードを追加するにはダウンタイムが必要。

導入手順
・PostgreSQL9.1以降、JDK6以降が必要。
・リリース版ではなくリポジトリから最新版を入手してインストールすることを推奨。

検証結果
・検証に使用した環境は以下2種類。
Amazon EC2 8nodes
物理サーバ HDDx4 論理4nodes
・使用したベンチマークはDBT-3 スケールファクタ:10
・countやgroup byではリニアにスケールした。
・ノードをまたぐjoin(クロスノードジョイン)ではパフォーマンスが上がらない。
・クロスノードジョインは一旦TEMPテーブルを作成しているため、DISK書き出しが発生。
・全体的に物理サーバ側ではきれいにリニアにスケールする部分が多かった。
・一方でEC2側ではリニアにスケールする部分もあればしない部分も多く、結果が不安定。
・ほか、結果にまだ不明な点が残るためまだ調査が必要。

以下、個人的な感想。
検証では複数ノードの環境としてEC2を使用していたため、結果の不安定さがStadoによるものなのか仮想環境によるものなのかが不明瞭だった。物理サーバを複数用意しての検証結果も見てみたい(自分でやれという話か?)。
pgpool-II 新バージョン 3.2 登場! ~多機能ミドルウェア pgpool-II の活用で PostgreSQL 利用の幅を広げる~
担当:SRA OSS Inc.日本支社
講師:安齋 希美(SRA OSS Inc.日本支社 技術開発部)

今回は以下2つの新機能の紹介。
1. On memory query cache
2. Watchdog

On memory query cache
・MySQLのクエリキャッシュをパクろう。
・pgpool-IIが以前持っていた旧クエリキャッシュは廃止した。
・クエリをmd5でキャッシュしたものを比較している。
・キャッシュされないselectは以下の通り。
:Immutableではないもの(DATE関数など)
:for update
:失敗したクエリやロールバックしたクエリ
:ブラックリストに載っているもの
:ホワイトリストに載っていないもの
:クエリによって返される結果セットのサイズが大きいもの
:一時テーブル(デフォルトではキャッシュ無効。有効にもできる。)
・キャッシュヒット率が低い場合は使わない方が速い(キャッシュのために余計な処理をしているため)。
・キャッシュヒット率の目安は60%~70%くらい。
・制限事項は以下の通り。
:暗黙的な更新が認識できない。ビューの更新やトリガーなど。
:スキーマを区別することができない。単純にSQL文をハッシュしているため、SQL内でスキーマ指定がなければ同じハッシュになってしまう。

Watchdog
・pgpoolをHA構成で使うための機能。
・仮想IPを使う。
・pingで監視
――――仮想IP

Active pgpool   ←→   stand by pgpool

PostgreSQL1     ←→   PostgreSQL2

・スプリットブレイン対策は、HUB故障時にどちらも仮想IPをdownさせることで行う。
・仮想IPのup/downを行うため、pgpoolをrootで実行する必要あり。
・failover時にパスワードなしssh接続ができる必要あり。
・現時点では取得できるステータス情報が不十分。
・時刻同期が必要。

以下、個人的な感想。
・pgpool-II自体をほぼ知らなかったので、新機能の話だけ聞いても意味がなかった。しまった。
・講師の人の喋りがたどたどしかった。自分も最近はセミナーやデモを行うことが多いので、聞いているときに自分が喋っている様を想像してドキドキしてしまった。

DBとはちょっと違うけど、分散処理基盤「Hadoop」の概要と最新動向紹介!
担当:Hadoopユーザー会
講師:山下 真一

タイトル通り、ざっくりとした概要紹介だったため全体的な話は省略。
気になった点だけ以下にピックアップ。

・GEではMySQLで50時間かかっていたツイートや記事の分析処理をHadoopで30分にした。
・CBSではWebサイトのログをHadoopに保存している。
・HBaseは数100TBくらいまでのデータ量の実績あり。
・Apache Flume:ログデータを格納するETLツール。
・JavaはOracle Java6 64bitのみサポート。(Java7は未サポートとのこと。)
・Apache BigTop:構築やテスト環境を作成するツール。

以下、個人的な感想。
当日使用するはずのプレゼン資料が壊れてしまったそうで、3月ごろの資料を用いてのプレゼンだった。本来のプレゼンを聞きたかった。サイトにアップされているものは本来のプレゼン資料のようだ。

PostgreSQL最新情報 ~9.2バージョンほか~
担当:日本PostgreSQLユーザ会
講師:高塚 遙(日本PostgreSQLユーザ会)

9.2の新機能・改良点についての紹介。
・CPUのスケールに対応。8.2~9.1までは8~12コアまでスケールしたが、9.2では32~64コアまでスケールする。
・今回のスケール対応は内部的なロック競合を改善することで可能となった。
・書き込みトランザクションの改善。COMMIT遅延が改善された。
・Index only scanが可能となった。PostgreSQLは追記型という特徴のため、これまでIndexのみでスキャンすることができなかった(テーブル側のみでバージョンを管理していたため)。今回はvacuum処理改善のために以前導入されたVisibility Mapを使用し、複数のバージョンを持たない場合(vacuum直後など)に実行できるようにした。
・レプリケーション機能を拡張し、スタンバイのカスケード構成に対応した。

プライマリ → スタンバイ → スタンバイ
|               |
―→ スタンバイ        ―→ バックアップ

・JSONデータ型の追加。配列・行からJSON型への返還関数あり(逆はなし)。現時点ではマルチバイトでバグあり。
・セキュリティバリアビュー。ビュー定義時に設定。
・SE-pgsqlの対応範囲が拡大された。
・parameterzed planの選択が可能になった。パラメータ付きSQLの実行計画を固定しないことができる。
※Oracleでいうバインド変数を使う際の実行計画の共有を止めるという話と一緒かな?
・drop index concurrentlyコマンド。インデックス削除時の表ロックを行わなくて済むようになったという話。

以下、個人的な感想。
インデックスのみを使った検索がまだできていなかったことに驚き。確かに内部構造を考えると難しいのだなと思うのだが、基本的な設計思想が高速化よりもきれいな実装を優先しているのだろうか。