2015年5月31日日曜日

PostgreSQLアンカンファレンス@東京に参加しました

2015年5月30日 
PostgreSQLアンカンファレンス@東京 に参加してきました

PostgreSQLアンカンファレンス@東京
https://atnd.org/events/64543%22

Twitterのハッシュタグは #pgunconf


メモした内容を記載しておきます。
話を聞くのが精一杯でメモがしょぼいです・・・


アンカンファレンスは初めて参加しました。
参加者が各自発表したいことを持ち込んで
ホワイトボードの時間割にポストイットを貼って
1人約20分で発表する形式でした。

会議室3スペースを区切って、発表は2スペースで順次行われました。


発表者の方によってはスライドを公開するようですので
詳細はそちらをご確認ください。


================


■PostgreSQL9.5の新しいGROUP BY

発表者のサイト
http://kenpg.bitbucket.org



Google Analyticsでブログのアクセスを解析
→ JSONでデータを取得できる

pg_read_file 関数でローカルのファイルを読み込んでJSONBにキャストする


GROUPING SETS:GROUP BYを集計行に変える or 足す

総計行を足した出力が、GROUPING SETSで簡単になる(らしい)

GROUPING はSETS(1,())って書くだけ

GROUP BY GROUPIN SETS ((1,2),1,())

CUBEとROLLUP:ある種のGROUPING SETSの短縮形


地方の方がFireFoxが多いw



================

■マイグレーションの切り札 多機能データ同期ツール SymmetricDSを使ってみましょう


#プロジェクタ不具合でスライド出力できず口頭でプレゼン
スライドをどこかで公開する。


JDBCがあってトリガー機能がある

異なるDB間でもやりとりできる

移植するときに使える?
 Oracle→PostgreSQL


やってみて苦労した件
 ロジカルレプリケーションは遅い
 細かいトランザクションが山ほどあるとレプリケーションが遅い
 SymmetricDSはトランザクションをまとめて処理できる 1万を100個ずつとか


 エラー処理が雑で ぬるぽがよくでる
 設定が間違っている場合にぬるぽがでる
 異常系の設計がしょぼい

マルチDBレプリケーターだけじゃなくて
カスケードもできる?らしい


マルチマスタのレプリケーションをもってくるのは難しい



=================

■9.5の新機能 CustomSCan / Custom Join


9.5でHookが追加されました

set_rel_pathlist_hook

set_join_pathlist_hook

CustomPath構造体に追加する


JOINするところにCustomScanを追加する
 2つのテーブルをJOINしたのをスキャンしたようにみえる実行パス

自作のJOINを実装して、その実行コストと既存のJOINのコストを比較して
もし、自作JOINの方がコストが低ければ、自作JOINが選択される



=================

■ 性能比較 XML、Hstore、JSON、JSONB

スライド後日公開?


JSONB
 部分更新入るかも 9.5から

pgbench_XX で測定

XML型はとにかく遅い


=================

■ YCSBベンチマーク JSONBとMongoDBの比較

スライド後日公開?


CPUが少ないならMongoDBの方が有利?
PostgreSQLはCPUがないと性能でないとのこと



==================

■ PostgreSQLで日本語全文検索 LIKE、pg_bigm、PGroonga


●LIKE文

メリット
 標準で使える
 インデックス作成不要
 データが少なければ速い

デメリット
 データが多いと遅い


どんくらいなら少ない&速いのか
→ 計測結果と要件で判断


pg_bigmでいろんなデータを日本語検索してみよう!


青空文庫 十分速い
住所データ 十分速い
Wikipedia 十分速い?


十分速ければLIKEでOK



●pg_bigm  ぴーじーばいぐらむ?

データが増えても高速
ストリーミングレプリケーション可


別途インストールしないといけない
インデックス作成が遅い
ヒット数に比例して遅くなる


日本語版Wikipediaの本文
200万件
1レコード3777バイト


いんでっくす作成
 元データのロード時間16分 
 インデックス作成時間6時間

   遅い?そうでもない?


●PGroonga

メリット
 インデックス作成が速い
 データ量やヒット数が多くても高速

デメリット
 ストリーミングレプリケーション使えない(INDEXの作り直しが必要)
 別途インストールしないといけない

PGroongaの方がめっちゃ速い
インデックス作成がめっちゃ速い


●発表者からのおねがい
 同じベンチマークを実行して結果を貼ってください



●まとめ

データが少ないならLIKEで十分
 1レコード数十バイトなら100万件はいける
 
 データ量が多いならpg_bigmかPGroonga


[参考情報]
pg_shardとPGroongaを使ったレプリケーション対応の
高速日本語全文検索可能な
PostgreSQLクラスタの作り方


==================

■ Postgres Toolkitのご紹介


PostgreSQLのサーバ運用・管理するための
スクリプト・ツールのコレクション

複数のSQLやコマンドを組み合わせて実施する作業を
1つのスクリプトで実行できるようにしたもの

PostgreSQL DBA業務をこなすため

GPLv2ライセンス

スライドアップしてくれるらしい


すっごい便利そう!
使いたい!


======================


■ PgAdminⅢを使いこなそう

チョコレートバーさん
# 同姓同名の方がいらっしゃるのでチョコレートバーと名乗る

PgAdminⅢの操作の話

SJISがなぜかサポートされてない?


PostgreSQLをバージョンアップするとPgAdminもバージョンアップされる
が!!

設定項目のパスが自動更新されないで古いバージョンを参照し続ける!
なので手動で直してあげてください。


タブも実はSQLエディタとかでタブのスペースをコピーして
指定区切り文字のタプルにペーストするとは実はできるw


======================

■ Migr8.rb DBスキーママイグレーションツール


マイグレーションツール自作しました。

# スライドの図がないとわかりにくいので公開されるといいなぁ


Migr8.rbとは
 PostgreSQL SQLite3 MySQLをサポート
 要Ruby


マイグレーションツールの使い方の説明


マイグレーションツールは従来どんな問題があったか

 Ruby on Railsだとタイムスタンプ順で管理するため
 複数人でマイグレーションする場合は古いのが最新になる

 マイグレーションの適用順序を変えにくい


 自作ツールは
 マイグレーションの適用順序を変えやすい


Case2
 他人のマイグレーションが未適用なのに気づかない


 Railsの場合は
  未適用のマイグレーションがあっても気づけない
  どのマイグレーションが未適用なのか調べられない


 Migr8.rbの場合は
  未適用のマイグレーションに気づきやすい
   → コンフリクトが発生してくれる


======================

■次回について

今回は前回より間が空いてしまったが
半年に1回ペースでアンカンファレンスを続けていきたいとのこと。
次回開催は11月ごろを考えているので
みなさんそれまでにネタを考えておきましょう。


======================


【参加してみて】
各自が自由に発表できるスタイルはすごいいいと思いました。
発表者の方々のレベルが非常に高く感じました。
私がへぼいのでしょうが・・・がんばろう・・