PostgreSQL カンファレンス 2014へ行ってきました

2014年12月5日(金)に開催された PostgreSQL カンファレンス 2014 へ参加してきました。
普段は MySQL を使うことが多いコノルですが、Ruby on Rails で PostgreSQL のサポートが手厚くなっていることもあり、PostgreSQL が話題に上ることも増えてきました。
私自身も初めて触れた RDBMS が PostgreSQL で数年間メインで使っていたこともあり、とても思い入れがあります。PostgreSQL のバックスラッシュコマンドは最高にかわいいと思います。

さて、話は PostgreSQL カンファレンス 2014 です。
興味深いハンズオン、セッションばかりで盛り沢山な内容でした。
今回は私が参加したセッションの一部をご紹介したいと思います。
https://www.postgresql.jp/events/jpugpgcon2014files/jpugpgcon2014_talks

pgcon2014

[Keynote1] Open Source, Open Engineering and PostgreSQL

基調講演ひとつ目は PostgreSQL コミッターであり、2ndQuadrant CTO でもある Simon Riggs 氏。
PostgreSQL コミュニティの取り組みがよく伝わってくる、とてもよいお話でした。
特に “異論を唱えるというのはプロセスの中で重要な要素。異論を唱えること、正直であることはとても重要。これは必須ではないけど、進化のためにしばしば必要なもの。” というところは、言葉の重みを感じました。

  • PostgreSQL コミュニティが過去取り組んできたことの振り返り
  • PostgreSQL はとても人気のある RDBMS だよ
  • PostgreSQL は速いよ
  • コミュニティみんなで継続してよいものを作るための秘訣
  • パッチのレビュアー募集中
  • 安定版じゃなくて最新版を使ってバグレポート送るのも立派なコミュニティ貢献!

[Keynote2] NTT データと PostgreSQL が挑んだ総力戦

基調講演ふたつ目は NTT データの笠原さん、澤田さんによるお話。
NTT データにおける OSS との関わり方、大規模案件で PostgreSQL を使用した事例紹介でした。

紹介されていたデータベースは論理テーブル数が900弱、レコードが10億件弱、SQL 数 2万以上。
さすが NTT データさん、開発の規模がとにかく大きいです。
これを無停止メンテおよび災害復旧対応した上に品質を保っていくのですから、その苦労は想像に難しくありません。PostgreSQL が OSS である強みを活かしながらトラブル対応やチューニングを行っていく流れは素晴らしかったです。

話の中で注目されていたのが、本番と同等のデータや環境が用意できない中でどうやってテストするのか?というところ。
PostgreSQL や MySQL などでは、データ内容や統計情報によって実行計画(テーブルのスキャン方法や複数テーブルの結合アルゴリズム)が更新されます。つまり、テスト環境で使用する少量のデータでは本番環境の実行計画を再現できないのです。
このため NTT データさんでは “PostgreSQL を騙すしくみ” を作ったそうです。
統計情報をカスタマイズする機能と、その統計情報を固定化するしくみです。

  • pg_dbms_stats で統計情報を固定化
  • 統計情報カスタマイズ機能は pg_dbms_stats の追加機能として開発

トラブルの中には Transparent Huge Page(THP)のバグや NUMA の設定など OS 側に起因するものもあり、周辺技術や OS の知識も大事なのだなーと改めて思いました。

New features of PostgreSQL 9.4

Michael Paquier 氏による PostgreSQL 9.4 で追加される機能の紹介です。
聴いていてわくわくする発表でした!
以下は紹介されていた機能の一部です。

  • CASE の代わりに FILTER を使って集計できるようになる
  • 他にも mode() など、便利な集計の関数が追加される
  • GIN インデックス採用
  • JSONB 型の追加
  • JSONB 型 + GIN インデックスの組み合わせは MongoDB より速いよ!
  • マテリアライズドビューの追加
  • pg_stat_statements
  • SQL で設定変更(ALTER SYSTEM)

Michael さんの資料はこちらです。
とてもわかりやすくまとまっています。
http://michael.otacoo.com/content/materials/20141205_postgres_94_features.pdf

O/R Mapper によるトラブルを未然に防ぐ

まず初めにスピーカーの桑田さんから聴講者への質問。
「O/R Mapper 嫌いな人?」
「O/RMapper 好きな人?」

前回 O/R Mapper のお話をされた際に同じ質問をしたそうなのですが、そのときは「O/R Mapper が嫌いない人」が大多数。
そのときと比べると今回は O/R Mapper に対して好意的な人が多いとのこと。

O/R Mapper の実装に関するお話は興味深かったです。
O/R Mapper には SQL テンプレート方式とクエリオブジェクト方式があるそうです。
どちらの方式も文字列結合よりは読みやすく、SQL インジェクションを誘発しにくくもなります。

SQL テンプレート方式では、テンプレートに同じような SQL を複数書く必要があり DRY ではないのが難点。
もう一方のクエリオブジェクト方式は演算子オーバーライドを利用した構文木生成のしくみ。ソースコードを評価して構文木とし、それを SQL へ変換するそうです。その分しくみが複雑になるのでトラブル対応の難易度も高めとなり、予想外の SQL が生成されてしまうこともあります。
Active Record などではクエリオブジェクト方式を採用しています。
O/R Mapper のアーキテクチャに興味がある人は PoEAA を読むといいよーというお話でした。

他、よくあるトラブルとして以下が挙げられていました。

  • N+1 問題(O/R Mapper の問題の中でも特に深刻なぐるぐる系 SQL)
  • クエリ発行箇所が特定できない問題(吐き出される SQL が分からないと)
  • インデックスつけ忘れ問題(O/R Mapper だけの問題じゃないけど)
  • select * 問題(いらないカラムも取ってきてしまう……)

お話の中で出てきた「ORM のことをろくに知らずに批判している人が多すぎ」という言葉に思わずどきっとしてしまいました。
O/R Mapper を使っていて「あーもう!!!!!!」って思うことありませんか。私はあります。O/R Mapper のことをちゃんと知らずに偏見を持っていたなと反省しました。
O/R Mapper となかよくなれるよう、ちょっとがんばろう……

Hacking PostgreSQL

データベースを選ぶときの基準に「いろんな意味で開発しやすい」を入れてみませんか?というお話でした。
PostgreSQL には機能拡張できるしくみがいろいろあります。
関数、データ型、演算子……などなど。
さらに作った関数などをパッケージ化したり、パッケージを配布するしくみも。

それでも足りなければ作ればよい!ということで、PostgreSQL コミュニティでの開発にまつわるお話へと続きます。
オタワで開催される PGcon では同時に Developer Meeting が開かれ、主要開発者たちが集まって「次バージョンで開発したいもの」「開発の進め方」について議論するそうです。
また過去にはたびたび、投稿されたパッチが誰にもレビューされず埋もれていってしまったことがあったとのこと。
この問題を解決するために、新機能取り込みのサイクルとして “CommitFest(コミットフェスト)” というしくみが誕生。これによりきちんとレビューが行われるようになりました。
https://wiki.postgresql.org/wiki/CommitFest

PostgreSQL のソースコードは構造もきれいで RDBMS のお手本のようなコードなので、ソースコードリーディングもおすすめだそうです。
内部のしくみを知るのは楽しいですね。

PostgreSQL 9.4 の新機能 JSONB 型を使ってみよう

9.4 新機能の中でも注目されている JSONB 型についてのセッション。
スピーカーは 内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 の著者のお一人でもあるぬこ@横浜さん。
JSONB 型で遊んでみたくなるお話でした。

PostgreSQL 9.2 より、JSON 型が実装されています。
9.4 ではさらに JSONB 型が追加されます。
それぞれのざっくりした特徴は以下のとおり。

JSON 型

  • 格納形式は文字列
  • 入力文字をそのまま保持する

JSONB 型

  • 格納形式はバイナリ
  • データ型、専用演算子の追加
  • 検索性能は JSON 型を上回る
  • 格納サイズ、格納性能(速度)も JSON 型と比べると劣る傾向
  • 入力文字を保持しない(変換して格納する)

JSONB 型は優秀な検索性能を持ちます。
特に JSONB 型の <@ 演算子と GIN インデックスとの組み合わせはとても強力という話。この辺りは今回のカンファレンス内で何度か紹介されていました。
ちなみに GIN インデックスと JSONB 型は同じチームが開発しているらしいので、連携はばっちりなのかもしれません。
JSONB 型はその検索性能と引き換えに格納サイズが JSON 型より大きくなる傾向にあるそうなのですが、だいたい数%とのことなので一般的な使い方であれば許容範囲なのかなと思いました。

ぬこ@横浜さんの資料は公開されていますので、ぜひご覧になってください。
とてもおもしろいです。

まとめ

早く PostgreSQL を使いたい!特に9.4! と思ってしまうようなおもしろい発表ばかりでした。
DBA の方はもちろん、プログラマの方も十分楽しめる内容だったと思います。
会場は全体的に落ち着いた雰囲気だったように感じました。
平日開催だったことも関係しているのでしょうか。

懇親会では普段の勉強会やカンファレンスではなかなかお会いする機会のない方とお話でき、とても楽しい時間を過ごすことができました。
PostgreSQL カンファレンス 2014 のスタッフ、スピーカー、スポンサーの皆様、本当にありがとうございました。
これからまた徐々に PostgreSQL を使っていきたいと思います。

余談…

コノルに入社して1年ちょっと経ち、今回初めて、カンファレンスやセミナー参加補助の制度を利用しました。日本だと参加費無料のカンファレンスも多いので、今までなかなか使う機会がなかったんですよね。なので PostgreSQL カンファレンスの募集開始直後に意気揚々と申請しました。(そしてすぐに申請が通りました。わーい!)
快く送り出してくれた皆さんありがとう。
また楽しそうなカンファレンスがあったら遊びに行きたいです。

ただ

コニョル

また懇親会でビールを飲んでしまった……

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>