PostgreSQL最新情報セミナー

ということで、SRA OSS.主催のPostgreSQL最新情報セミナーに行ってきましたよ。

セミナー概要

  • 場所はいつも通り、東銀座と築地の間にあるJJK会館。
  • 人数はきちんと確認してないけど、80人くらいはいたのかなあ?
  • 講演内容

Schema-less PostgreSQL

  • 講師は Oleg Bartunov 氏
    • Locale, GiST, GIN, SP-GiST, Full Text Search, pg_trgm, hstoreなど、過去にPostgreSQL本体やcontribへ多くの貢献を行っている方。
  • 私が来月、JPUG勉強会でJSONBの発表をするので、とても気になっていた講演だ。
  • 最初にNoSQLの話。NoSQL自体が複雑化しつつあると(グラフデータベースとか)。
hstoreの話
  • 次に半構造化データの対応のためのhstoreの話。
    • Google検索結果では米国とオーストラリアでの関心が高かったのか。>hstore
  • 大量のカラムをもつテーブルという問題を解決するために、hstroeを開発したと。
    • このときにXML型を使わなかったのは重くてオーバースペックだったからなんだろうなあ。
  • hstoreの最大長は2^31byte=約2GB このサイズ、内部格納形式のことなんだよね。外部表現じゃなくて。
GINの話
  • 次に転置インデックスの話。転置インデックスは2つのツリー(Entry tree, Posting trees)から構成されている。
  • で、9.4のGINインデックスの改善の話に繋がる。Posting listの圧縮と検索性能改善の件。
  • GIN検索性能の話。9.3では頻出値の量に、9.4ではレアな値の量に対して検索速度が比例する。(その理解で合ってるのかな)
    • 逆に言えば、GINインデックスを使った検索時に、頻出値を検索しようとすると、9.4でもあんまり性能改善の恩恵を受けないってことになるのか。
    • 石井さん@SRA OSS.曰く、「そのようですね。」
    • pg_bigmのような日本語全文検索の場合には、検索条件として頻出値を指定しちゃう可能性もあるので、この性能傾向は留意しておく必要があるかも。
  • hstore_ops EXTENSION(Github公開)を入れることで、9.3でも9.4のような検索性能を得ることができる
  • 性能面で見るとJSON型より、hstoreのほうが数倍速いと。しかしhstoreはシンプル過ぎる。ここで、バイナリJSON(JSONB)という話に繋がる。
    • hstoreとしてネスト可能なものを作ろうという動きもあった。2012年のPGConで発表。
JSONBの話
  • JSONと比較すると、JSONBのほうが、入力データがちょっと大きくなること、格納時にバイナリ化オーバヘッドがかかって少し遅くなる。
    • こういう話を正直に話してくれるのは嬉しい。
  • そんかし、キーからの値取得(条件なし)ではJSONBが圧倒的(スライドだと20倍くらい)に速い。
  • さらに、GIN+json_path_ops演算子を使うと2000倍近く、検索性能が上がる!
  • PostgreSQL JSONBとMongoDBとの比較も興味深い。
    • MongoDBの格納性能が極端に遅いのは何故だろう。>Mongoに詳しい人
    • ふむ。MongoDBのインデックスはbtreeだと。
jsqueryの話
  • そしてjsonb query(jsquery)の話。SQLよりシンプルに記述できる。検索性能もSQLと比較すると、ちょい速い。
  • さらにGIN向けのオペレータクラスの追加。Bloomフィルタリング用、ハッシュpath。さっきと同じ例で検索すると1000倍くらい早くなってる。
  • squeryと新たな演算子クラスは、PostgreSQL 9.4本体には間に合わなかった。9.5で入るみたい。
VODKAの話
  • そして、GINの後継?インデックスであるVODKAの話。濃いなあ。
    • 自分としては嬉しい話ではあるけど、後半のセッション目当ての人だと、ちょい退屈かも・・・?
  • VODKAの目的はインデックスアクセスメソッドをbtreeに固定せず、汎用的な(ex. GIS等)基盤を提供するということか。(合ってるか自信ない)
  • Vodka distilling instructionsのスライドを見ると、GINのアクセスメソッドを拡張したインタフェースなのかな。
  • GIN内でbtreeツリーで検索する。VODKAはどのツリーを使うか(例えばR-treeを使う)を選択可能とする基盤。
    • キーワード:nested search trees
  • VODKAは9.5あるいは9.6での導入を目指して現在開発中と。あと、開発チームへの参加も募集中。
質疑応答
  • HINT句相当の本体取り込みをどうやって、Tom Laneに認めさせるのか?w
    • ⇒HINTは拡張として提供というのが当面の方針。良い統計が取れればオプティマイザ側で頑張れるようになるはず。
  • JSONBとそのインデックスはトランザクションに対応しているか?
    • ⇒JSONBは普通のデータ型なのでもちろん対応している。
  • XML型は死んだのか?というQAを受け狙いで言おうと思ったが自重したw
  • そーだいさん(@soudai1025)がツイートしてきた。"JSON型だとPHPjson_decode()っていう標準関数で配列にMapping出来るんですけどJSONB型もJSON文字列と同等なんですよね?"
    • ⇒"JSONBの外部表現を受け付ける関数なら、大丈夫かなあ。"とツイートしておく。

PostgreSQL 9.4評価検証報告

  • 講師は高塚さん@SRA OSS.
  • こっちも今夜のPostgreSQL NightのLTや、来週の中国DB勉強会LTの内容と被らないか、ちょっと心配していた。
前半:性能改善レポート。
    • GIN性能改善、WAL性能改善、JSONB性能。
  • WAL書き込みの同時実行性向上はかなりコア数が多い、かつストレージ性能が良い場合に一番効果が出るだろうと。
後半:PostgreSQL 9.4の新機能紹介
  • レプリケーションスロット、更新ビューのCHECKオプション、FILTERオプション、ALTER SYSTEM、マテビューCONCURRENTLYオプション、ALTER TABLEのロック競合軽減。
  • レプリケーションスロット:プライマリとスタンバイを繋ぐ絆である(意味深)
  • physicalレプリケーションスロットとlogicalレプリケーションスロットの説明。
    • physicalのほうは実際に運用に使えるもの。
    • logicalははまだ実用というより、これを使った拡張作成の基盤。
  • logicalレプリケーションではDDLの情報は(反復可能な情報込みでは)書き込まれないっぽい。
  • グループ化演算のFILTERオプションの話。
  • FILTERオプションに対応したNodeも追加されているので、プランナも改善されると。
  • スライドの誤記訂正:ALTER TABLESPACE MODEではなく、ALTER TABLESPACE MOVE。
質疑応答
  • ALTER TABLESPACE構文。TOからINに(beta2で)変更になったよ、というコメントあり。質問者はもしかするとミカエルさん?
  • データ圧縮による圧縮処理自体のロスは影響しないのか?
    • ⇒シンプルな圧縮なので多分あまり影響ないだろう。
  • JSONBを各言語のオブジェクトには、どうマッピングするのか?
    • ⇒今は言語やライブラリによっては対応されていない。JSON文字列あるいは配列等にマッピングして使うしかないか。
  • JSON文字列からJSONBの格納データ量を見積もるような概算式はあるのか?
    • ⇒(式そのままではないけど)データ増加量は4%程度だろうと。
  • JSONBと通常のデータタイプとの性能比較って?
    • ⇒今は測定結果はない。

PostgreSQL Night

  • 今回はセミナーの後に、PostgreSQL Nightというイベントがあったので参加してきた。
    • PostgreSQL開発者 Oleg 氏初来日記念パーティーという意味合いもある。
    • こっちから参加というメンバも結構多しw
  • 会場は浜離宮近くにある「DG Fish&Shellfish」
  • PostgreSQL飲み会ってことなので、ただ飲み食いするだけなく、PostgreSQLに関するショートセッション発表もある。
  • PostgreSQL女子の出席者が多かった!(重要)
  • 最後にみんなで記念撮影。別途、SRA OSS.さんのページに掲載されるかな?
    • 何気に私が美味しい場所にいるかもしれないw
ショートセッション
  • PostgreSQL 9.4の微妙なSELECT強化と集約関数性能改善
    • 私の発表です。いきなり最初にやってください、と言われてちょいビビるw
    • 資料については、DB勉強会 in 中国の発表後にupします。
  • postgres_fdwでredshiftを使ってみる
    • 松村直樹さんの発表。
    • 結論から言うと、postgres_fdwでredshiftを使ってみるのはいろいろ問題があってやめたほうがいいと。
  • CTB57 神7発表
    • 勝俣さんの発表。先週のアンカンファレンスでの投票結果をまとめたもの。
    • CTB=Contribモジュールのこと。57種類のContribモジュールから神7を決めるという誰得な企画をやってて、その結果を発表したもの。
    • 詳細は略すけど、栄えあるセンターを得たのはpgbench。会場にいた石井さんもガッツポーズw
  • JSONログ
    • HOOKを組み込んでPostgreSQLサーバログをJSON化してみた、というもの。
    • file_fdw + JSONBと組み合わせてログの検索を簡単にすることが出来るかも?
    • つーか、この機能は9.5あたりで本体に組み込んでくれないものかなあ・・・
  • PostgreSQL Quiz
    • 藤井さんの発表
    • クイズ1のWHERE句評価は見事に引っかかったなー。そうか、行毎の評価を行なうときにrandom()が動いちゃうのか・・・。
    • クイズ2は最初の私の発表が大ヒントになってしまったっぽいw
  • PG-Strom
    • 海外さんの発表(終了直前になってしまった)
    • 先週のアンカンファレンスで発表したものの要約かなー?
籤引き大会
  • もう一つのイベントは籤引き大会。
  • 先日、勝俣さん、佐伯さんと書いたPostgreSQL本(内部構造から学ぶPostgreSQL 設計・運用計画の鉄則)も景品として3冊提供しました。
    • なんとOlegさんが1冊引き当てた!?
    • 勝俣さんと一緒にマジックでサインを書きましたw
    • 他の当選者の方にも同じようにサインを書きました。勝俣さんのサインは象っぽい何か。私のサインは何の捻りもなく「ぬこ」
  • 最後にロシアコミュニティのロゴ入りポロシャツ3着が景品に。
    • これ、欲しかったんだよなー。残念ながら当選せず。
    • 写真は当選した人が、SNSやブログでいずれアップしてくれるだろう・・・

おまけ(2次会)

  • 築地近くの魚料理居酒屋にて実施。
  • 参加者(順不同)
    • 奥野さん、江川さん、勝俣さん、ぬこ、藤井さん、澤田さん、Amitさん、Michaelさん。
  • 話の内容は色々な意味でアレなので割愛w