現在位置: ホーム / ゲストブログ / PostgreSQL 9.4特徴紹介とpgCon China参加レポート

PostgreSQL 9.4特徴紹介とpgCon China参加レポート

今回のゲストブログは、日本PostgreSQLユーザ会理事長であり、アップタイム・テクノロジーズ社でデータベースや基盤系のコンサルティングをされている永安さんの登場です。先頃リリースされたPostgreSQL 9.4と中国でのPostgreSQLコミュニティイベントについてです。



はじめまして、ゲストブログに招待いただきました、永安と申します。OSSとの関わりは主にPostgreSQLを中心としており、アップタイム・テクノロジーズという会社でデータベースや基盤系のコンサルティングをしつつ、日本PostgreSQLユーザ会で理事長の役を担当しております。

昨年12月12日~13日にかけて、中国深センにて中国のPostgreSQLユーザ会のカンファレンスが開催されました。筆者はそちらに参加し、日本のPostgreSQLユーザ会の紹介と、PostgreSQLの最新リリースであるバージョン9.4の紹介の講演をしてきました。

PG-china3

 本稿では、そのカンファレンスで紹介したバージョン9.4の機能についてご紹介します。なお、講演で使用したスライドはSlideshareで公開していますので、興味のある方はそちらも併せてご覧ください。

http://www.slideshare.net/snaga/postgresql-94

PostgreSQLとは

既にご存じの方もおられるかとは思いますが、改めてPostgreSQLについて簡単にご紹介させていただきます。

http://www.postgresql.org/

PostgreSQLは、カリフォルニア大学バークレー校(BSDが生まれた大学)における研究に源流を持つデータベース管理ソフトウェア(RDBMS)で、オープンソースのライセンスおよび開発コミュニティを持つソフトウェアです。このブログの読者であれば、MySQLをご存じの方は多いかと思いますが、似たような位置付けのソフトウェアになります。

古くからACIDトランザクションをサポートしていたり、SQL標準への準拠の度合いなどで、主に業務系のシステム開発で使われてきましたが、近年、レプリケーションやKVS/ドキュメントストア的な機能も追加されてきたため、Web系でも使われる機会が増えてきたところです。

PostgreSQL 9.4とは

PostgreSQL 9.4は、12月19日にリリースされたPostgreSQLの最新リリースです。

http://www.postgresql.org/about/press/presskit94/jp/

バージョン9.4では最近の世の中のトレンドを反映して、NoSQL関連の機能やアナリティクス(分析)関連の機能が強化されています。また、将来的なパラレル処理の実現に向けて、いくつか基本的な機能(開発者たちはインフラストラクチャーと呼んでいます)が実装されました。

本稿では、いくつか特徴的な機能を取り上げて簡単にご紹介します。 

NoSQL関連機能

PostgreSQLでは、バージョン9.2から「JSON」と呼ばれるデータ型を利用できるようになりました。これは読んで字の如く、JSON形式のテキストをそのまま保存し、利用することができるデータ形式です。バージョン9.4では、JSONを扱うデータ型として「JSONB」と呼ばれるデータ型が追加されました。

JSONBは「内部的にバイナリでデータを格納するJSON型」です。データを格納する時、取り出す時の仕組みがJSON型とは一部異なっていますが、GINインデックス(後述)と組み合わせることによって、特に検索のパフォーマンスが大きく改善されています。

http://sios-oss.blogspot.jp/2014/08/postgresql-94json.html

GINインデックスは「Generalized Inverted Index(汎用転置インデックス)」と呼ばれるもので、全文検索において分かち書きしたトークンに対するインデックスなど、「特定のトークンがドキュメント内のどこに存在するか」といった情報を高速に検索するために使われるインデックスです。詳細は「GIN (Generalized Inverted Index) インデックスとは何ですか?」を参照してください。

http://postgres.sios.com/modules/newbb/viewtopic.php?topic_id=144&forum=1

PostgreSQL 9.4では、これらのJSONB型とGINインデックスの組み合わせによって、JSONドキュメントの格納および検索機能が大幅に強化されました。 

アナリティクス(分析)関連機能

 アナリティクス関連の機能としては、SQLの拡張、集約関数の追加、マテリアライズドビューの強化があります。

 SQLの拡張と集約関数の追加については、大量のデータセットの中から複雑な集計処理をする際、如何に楽にSQLを書けるか、そしてそのSQLを効率的に処理できるか、という観点での強化が行われています。

 例えば、SELECT句におけるFILTER処理などは、従来のCASE WHENなどよりも簡単にSQLを記述することができるようになります。(以下は、9.3までのCASE WHENを使った書き方と9.4以降のFILTERの使い方の例です)

 PostgreSQL94-1

 また、mode()を使うことによって、従来count()とORDER BY、LIMITなどを組み合わせて取得していた最頻値をより簡単に取得できるようになります。(以下は、9.4でmode()を使った書き方と9.3までの書き方の例です)

PostgreSQL94-2

  このようにSQLの拡張では、特に分析・集計系の多様な処理を、より簡単に、より効率的に行うことができるようになってきています。

 その他の分析向けの機能としては、PostgreSQLでは9.3からマテリアライズドビューを使うことができるようになりました。

http://sios-oss.blogspot.jp/2014/05/postgresql.html

バージョン9.4では、このマテリアライズドビューの更新機能(REFRESH)が強化されています。具体的には、これまではビューの更新時に元テーブルにロックがかかってしまっていたのですが、ロックをしなくても更新できるようになりました。このことによって、大規模なテーブルに対するマテリアライズドビューも、問題なく運用できるようになりました。

 レプリケーション関連機能

PostgreSQLではこれまでのバージョンでもレプリケーション機能が実装されており、これはマスターとなるデータベースの更新情報(ログ)をネットワークで転送することで実現されていました。

従来のPostgreSQLのレプリケーションでは、このログは「物理的」な形式でした。ここで言う「物理的」というのは、「どのファイル、どのブロックの、どのオフセットにこのバイト列を書き込む」というような形式という意味です。

この物理的な情報でもレプリケーションを実現することはできたのですが、バージョン9.4はこの物理的なログに加えて、「論理的」なログも扱えるようになりました。ここで言う「論理的」とは、「どのテーブルに、レコードをINSERTする」、あるいは「どのテーブルの、どのレコードの、どのフィールドをUPDATEする」というようなログのことです。

この論理的なログの追加によって、従来PostgreSQLではできなかった、「ログからSQL文を再現する」ということが可能になり、これを開発コミュニティでは「Logical Decoding(論理的デコーディング)」と呼んでいます。

この機能によって、将来的にログの一部分だけを取り出してSQL文を再現する、あるいは、異なるプラットフォームをまたいでレプリケーションを行う、といったことが技術的に可能になります。

 並列化に向けたインフラストラクチャー

PostgreSQLは、シングルプロセスで単一のSQLを実行する、という非常にシンプルな機能・アーキテクチャのRDBMSです。

一方で、他の(特に商用の)RDBMSでは、大量のデータを処理するために複数のCPUコアを使って一つのSQLを並列に処理したりディスクI/Oを並列処理するなど、アーキテクチャを採用しているソフトウェアもあります。

PostgreSQLも、1~2年ほど前からSQL処理の並列化に向けて検討が始まっており、バージョン9.4では将来的なパラレル化を見据えた基本的な機能がいくつか導入されました。

一つは、「Dynamic Background Worker」と呼ばれる機能で、バックグラウンドワーカーと呼ばれる補助プロセスをオンデマンドで起動したり終了させたりする機能です。この機能によって、従来は「1クライアント接続に1サーバプロセス」という限界を超えて、1クライアント接続に複数のサーバプロセスを動作させることができるようになりました。

二つ目は、「Dynamic Shared Memory」と呼ばれる機能で、従来はサービスの起動時に固定的にしか確保できなかった共有メモリを、オンデマンドで確保できるようにする機能です。

これらの機能によって、前述したバックグラウンドワーカー(補助プロセス)が、「必要な時に起動して、必要な共有メモリをオンデマンドで確保し、他のプロセスとデータのやり取りを行った後に、必要なくなったら終了する」という動きをすることができるようになりました。

これらの機能は、将来的にはPostgreSQLのパラレル処理の基礎となります。

 中国のPostgreSQLカンファレンス「pgCon China」

最後に、本稿のバージョン9.4の講演をした中国のPostgreSQLユーザ会とそのイベントについて簡単に紹介させていただきます。

PG-china5http://postgres2014.eventdove.com/

今回、pgCon ChinaではPostgreSQL 9.4の紹介と、日本のPostgreSQLコミュニティの紹介の2本の講演をしてきました。講演することになった経緯ですが、pgCon Chinaに先立つ12月5日に東京で日本PostgreSQLユーザ会がカンファレンスを開催し、その時に中国から李元佳氏をスピーカーとして招きました。

http://www.postgresql.jp/events/jpug-pgcon2014

事前にその相談をしている時に、中国でもカンファレンスが開かれるらしいということを聞きつけ、興味があったため一参加者として参加しようかと思っていたのですが、せっかくだから講演をしないか、と誘われたのがきっかけでした。

中国にも日本やその他の国と同じようにPostgreSQLのユーザ会があり、さまざまな活動をしているようです。その運営は、現在は李元佳(Gary Lee)氏やそのチームで行っており、中国全土に参加者がいて、イベントの開催の他、日本と同じようにドキュメントの翻訳などの活動もしているとのことです。

今回のようなカンファレンスは2011年から毎年開催しており、「北京、杭州、深セン」の三ヵ所で毎年持ち回りで開催しているとのことです。今回のカンファレンスは、事前登録が400名くらいで、実際の参加者は200名程度だったようです。

PG-china1ちなみに、中国では「ユーザー」は「用户」、「ユーザー会」は「用户会」というようで、イベントの正式名称(?)は「Postgres中国用户大会」となっていました。

 

 

 

 

 

 

 

PG-china2英語での発表は私だけで、他の講演者は中国語でしたので、講演内容の詳細は理解できていないのですが、特に印象に残っている点としては、扱っているデータ量が多いなぁということ、またクラスタ技術の講演が多かったことが挙げられます。この辺りは、人口が多い、あるいは国土が広大な中国ならではの特徴なのかもしれません。

PG-china4

 

 

 

 

 



そんなちょっとした気付きが楽しいカンファレンスでした。 

 アジアのFOSSイベント「FOSSASIA 2015 Singapore」

 なお、3月にはシンガポールでFOSSASIA 2015 Singaporeというオープンソースやスタートアップ系のイベントがあります。

(注: FOSS: Free/Open Source Softwareの略

http://fossasia.org/

こちらも2010年から始まった比較的若いイベントで、アジアの各国を順番に開催地を変えながら開催しているようです。内容としては、日本ではオープンソースカンファレンス(OSC)に近いかもしれません。

 著者は、こちらのイベントでも講演者として参加させていただくとともに、いろいろなご縁があり、会社の方でスポンサーとしてもサポートさせていただくことになりました。

 FOSSASIA 2015 Singaporeについても、開催後にこちらのゲストブログで内容をご紹介させていただく予定ですのでお楽しみに。

 

各種お問い合わせ

サイオスOSSよろず相談室(1)

問い合わせボタン

最新の情報
わかっておきたいセキュリティ: 第4回 IRMA (Incident Response Malware Analysis) 2017年03月29日
わかっておきたいセキュリティ: 第3回 マルウェア解析サンドボックス「Cuckoo」との連携 その2 2017年02月22日
[第14回] Linux/OSS エバンジェリスト古賀政純の 『オープンソース・Linux超入門』 システム要件において検討すべき点 その4 2017年02月08日
[第13回] Linux/OSS エバンジェリスト古賀政純の 『オープンソース・Linux超入門』 システム要件において検討すべき点 その3 2017年02月01日
[第12回] Linux/OSS エバンジェリスト古賀政純の 『オープンソース・Linux超入門』 システム要件において検討すべき点 その2 2017年01月25日
[第11回] Linux/OSS エバンジェリスト古賀政純の『オープンソース・Linux超入門』 システム要件において検討すべき点 その1 2017年01月18日
Python人材育成の支援を目的としたPythonエンジニア育成推進協会の活動とは? 2016年12月21日
わかっておきたいセキュリティ: 第2回 マルウェア解析サンドボックス「Cuckoo」との連携 2016年12月14日
可知豊の『 わかっておきたい、オープンソースライセンス』: 第3回 オープンソースライセンスの使い方をわかっておきたい 2016年12月08日
可知豊の『 わかっておきたい、オープンソースライセンス』: 第2回 色々なオープンソースライセンスをわかっておきたい 2016年11月30日
可知豊の『 わかっておきたい、オープンソースライセンス』: 第1回 著作権とライセンスをわかっておきたい 2016年11月17日
わかっておきたいセキュリティ: 第1回 マルウェア解析サンドボックス「Cuckoo」 2016年11月02日
[第10回] Linux/OSS エヴァンジェリスト古賀政純の 『オープンソース・Linux超入門』 Linuxサーバーシステム導入前の検討~ RHELを知る ~ 2016年10月26日
[第9回] Linux/OSS エヴァンジェリスト古賀政純の 『オープンソース・Linux超入門』 Linuxサーバーシステム導入前の検討~ Ubuntu Serverを知る ~ 2016年10月19日
[第8回] Linux/OSS エヴァンジェリスト古賀政純の 『オープンソース・Linux超入門』  Linuxサーバーシステム導入前の検討~ SUSEを知る ~ 2016年10月12日
[第7回] Linux/OSS エヴァンジェリスト古賀政純の 『オープンソース・Linux超入門』~「初心者でもわかる、Linuxサーバーシステム活用者が知っておくべきポイント」(後編) 2016年08月09日
[第6回] Linux/OSS エヴァンジェリスト古賀政純の 『オープンソース・Linux超入門』~「初心者でもわかる、Linuxサーバーシステム活用者が知っておくべきポイント」(前編) 2016年08月02日
[第5回] Linux/OSS エヴァンジェリスト古賀政純の 『オープンソース・Linux超入門』~「ミッションクリティカルシステムとオープンソース・Linux」(後編) 2016年06月22日
[第4回] Linux/OSS エヴァンジェリスト古賀政純の 『オープンソース・Linux超入門』~「ミッションクリティカルシステムとオープンソース・Linux」(前編) 2016年06月16日
[第3回] Linux/OSS エヴァンジェリスト古賀政純の 『オープンソース・Linux超入門』~「CEOが知っておくべきオープンソース革新」(後編)~ 2016年05月25日
最新の情報 - もっと...