OSSデータベース取り取り時報

第16回MySQL JSONデータ型のご紹介、PostgreSQL9.6.1リリース、Apache Cassandraリリース予定のバージョン3.10の新機能紹介

MySQLはドキュメントストアのnode.js向けクライアントライブラリConnector/Node.js開発版のマイナーバージョンがありました。今回はドキュメントストアのベースの機能になるJSONデータ型について解説します。PostgreSQLはPostgreSQL9.6.1がリリースされました。PostgreSQL9.1系はEOLのため最後のリリースとなります。Apache Cassandraはバージョン3.10がリリース予定ですが、このバージョンで実装された注目の新機能を紹介します。

[MySQL]2016年11月の主な出来事

製品リリースは、Connector/Node.js開発版のマイナーバージョンアップがあったのみでした。Connector/Node.jsはNode.jsからMySQLサーバに接続するための部品です。このConnector/Node.jsはMySQLサーバをドキュメントデータベースとして活用するための機能群であるMySQLドキュメントストア向けのAPIとなっています。MySQLドキュメントストアではMySQLサーバに格納されたJSONドキュメントに対して、SQLだけではなく新しいMySQL X DevAPIでもアクセスが可能になります。MySQLドキュメントストアの概要は、連載第9回をご覧ください。

MySQLサーバ開発チームのブログでは、Node.jsベースのWebアプリケーションをフロントエンドにExpress.js, バックエンドにAngularJS, そしてConnector/Node.jsを組み合わせたサンプルを公開しています。

MySQLのJSONデータ型のご紹介

MySQLにはMySQL 5.7からJSONデータ型が追加されています。JSONデータ型は格納されるデータ形式が正しいかを自動的にチェックするDocument Validation機能を持ちます。JSONドキュメントの格納時にパースを行い、バイナリ化して格納されています。JSONデータ型内のデータを、文字コードはutf8mb4で照合順序はutf8mb4_binとして扱います。他の文字コードで生成された値をJSONデータ型に格納する場合は自動的にutf8mb4に変換されます。

JSONデータ型の列を持つテーブルの作成とデータの格納

# JSONデータ型の列menuを持つテーブルを作成
mysql> CREATE TABLE pz (menu JSON);

# データを追加
# 複数行にわたるJSONドキュメントの場合、改行を入れても特に問題ない
# JSONドキュメント全体をシングルクォーテーションで囲む
# JSONドキュメント内の文字列はダブルクォーテーションで囲む
mysql> INSERT INTO pz(menu) VALUES ('{
    '> "Name":"Plain Pizza",
    '> "price":300
    '> }');

# 配列を含むJSONドキュメントを追加
mysql> INSERT INTO pz(menu) VALUES ('{
    '> "Name":"Cheesy Pizza",
    '> "price":400,
    '> "toppings":"More Cheese",
    '> "additionals":[{"Name":"B Cheese","price":100}]
    '> }');

# JSONドキュメントではない文字列を追加しようとするとエラーになる
mysql> INSERT INTO pz(menu) VALUES ('some text');
ERROR 3140 (22032): Invalid JSON text: "Invalid value." at position 0 in value for column 'pz.menu'.

MySQL 5.7ではJSON 文字列およびJSONデータ型を処理するための関数や演算子が複数用意されています。またJSONドキュメント内の階層(パス/Path)を表現する方法が用意されています。

JSON関数およびJSON演算子の利用例

# JSONの内容からJSONオブジェクトを取得するJSON_EXTRACT関数の利用例
mysql> SELECT JSON_EXTRACT(menu, "$.Name") FROM pz;
+------------------------------+
| JSON_EXTRACT(menu, "$.Name") |
+------------------------------+
| "Plain Pizza"                |
| "Cheesy Pizza"               |
| "Classic Pizza"              |
+------------------------------+

# JSON_EXTRACT関数と同様の動作をするJSON演算子 -> の利用例
mysql> SELECT menu->"$.Name" FROM pz;
+-----------------+
| menu->"$.Name"  |
+-----------------+
| "Plain Pizza"   |
| "Cheesy Pizza"  |
| "Classic Pizza" |
+-----------------+

JSON関数を使ってJSONドキュメントから抽出した値をMySQL 5.7で実装された生成列(Generated Column)に格納して、その生成列にインデックスを作成することでJSONデータ型へのインデックスを実現できます。

[参考]MySQL 5.7 Reference Manual 14.1.18.8 Secondary Indexes and Generated Columns

MySQL 5.7で実装されたJSONデータ型によって、JSONドキュメント内の値とテーブル内の値をJOINすることや、JSONドキュメントとテーブルを1つのトランザクションで更新することなど、異なるデータストア間では実現しにくい点をMySQL内で処理できることは大きなメリットとなります。

先月のMySQL関連イベントやセミナー、ユーザ会の活動のレポート

第18回 中国地方DB勉強会 in 広島
中国地方の各地でデータベースに関する勉強会を開催している中国地方DB勉強会が「明日から絶対役立つデータベースの話!!」をテーマに勉強会を開催しました。日本PostgreSQLユーザ会の喜田さん、曽根さん、および日本MySQLユーザ会の@yoku0825さんが講演されています。原稿執筆時点では開催前ですので、イベントの様子は次回ご紹介いたします。

[PostgreSQL]2016年11月の主な出来事

2016年10月27日にPostgreSQL 9.6.1がリリースされました。このリリースでは、これまでに累積されたバグの修正が行われており、データベースのダンプ・リストアを行うことなく適応できます。このマイナー・バージョンアップは各メジャー・バージョンに対して実施されており、それぞれ9.5.5, 9.4.10, 9.3.15, 9.2.19 and 9.1.24がリリースされています。

なお、PostgreSQL9.1についてはEOLを迎えたため、今後、アップデートやセキュリティパッチの提供が行われなくなりますのでご注意ください。

今回のマイナー・バージョンアップで対処されたデータファイル破損問題と復旧方法について

今回のマイナー・バージョンアップで修正されたバグの中にはデータファイルの破損を引き起こすものが2点ありました。お使いの環境ですでにデータファイルが破損している場合、別途、復旧作業が必要となります。いずれも直ちにDBサーバが停止するような問題ではありませんが、破損状態のまま運用を継続するといろいろと不都合が生ずると思われますので、ご注意ください。

1.フリースペースマップ(FSM)ファイルの破損
PostgreSQLバージョン9.6(9.6.1より前⁠⁠、9.5(9.5.5より前⁠⁠、9.4(9.4.10より前⁠⁠、および9.3(9.3.15より前)には、FSMが有効な場合に適切なWALログエントリを作成できないバグがあり、クラッシュリカバリに際してFSMファイルが破損する可能性があります。FSMファイルが壊れているかの検査、壊れていた場合の復旧手順については以下ページを参照ください。
Free Space Map Problems
2.可視性マップ(VM)ファイルの破損
PostgreSQLバージョン9.6(9.6.1より前⁠⁠、9.5(9.5.5より前⁠⁠、9.4(9.4.10より前⁠⁠、および9.3(9.3.15より前)には、VMが存在するときに適切なWALログエントリを作成できないバグがあり、クラッシュリカバリに際してVMファイルが破損する可能性があります。それに加えて、PostgreSQLバージョン9.6(9.6.1より前)では、ビッグエンディアンハードウェア上でpg_upgradeを実行すると不正なVMデータを生成させるバグがあります。VMファイルが壊れているかの検査、壊れていた場合の復旧手順については以下ページを参照ください。
Visibility Map Problems

先月のPostgreSQL関連イベントやセミナー、ユーザ会の活動のレポート

オープンソースカンファレンス2016 Tokyo/Fall, Fukuoka, Hiroshima
11月は東京、福岡、広島の3箇所でオープンソースカンファレンスが開催され、それぞれ以下の講演が行われました。
日付開催地区タイトル講師
11/5(土)東京生誕20周年を迎えたPostgreSQLを使ってみようJPUG 曽根 壮大様
PostgreSQL活用に役立つ厳選ドキュメントTOP3のご紹介 PGECons 竹内 尚也様
11/19(土) 福岡 PostgreSQLセキュリティのあれこれ(改正個人情報保護法対応)と9.6の新機能 JPUG 多度 順一様 JPUG清末 直様
11/27(日) 広島 商用DBからPostgreSQLへの移行入門。まず知っておかないといけないまとめ JPUG 喜田 紘介様
関西オープンフォーラム2016
2016年11月12日(土⁠⁠ 関西オープンフォーラム2016が開催されました。開催されたセミナーにおいて、JPUG ぬこ@横浜様による「PostgreSQL9.6の紹介」の講演が行われました。

[Cassandra]2016年11月の主な出来事

11月に入ってからバージョン3.10をリリースするかどうかの投票が3回行われていますが、現時点ではまだ修正、テストが不十分ということでリリースは延期になっています。しかし、この次期バージョンに含まれる新機能についてはほぼ確定しているので、以下、それら中から特に注目すべきものについて概略を説明します。

1つは、CQL3プロトコルの強化です。集約関数がサポートされたこともあって、SELECT文の中でパーティションレベルおよびクラスタ化カラムレベルでのGROUP BY句がサポートされるようになります。また、durationという、時間の長さを表す型が新たに追加されました。これは、年を表すy、月を表すmo、週を表すw、日を表すd、時間、分、秒を表すh、m、sなど数値と単位を指定するタイプの型です。ISO 8601の時間経過(Duration)の表記もサポートされます。さらに構文上のちょっとした拡張として「+=」および「-=」という略記法をコレクションとカウンタに対して利用できるようになります。

もう1つ追加された重要な機能としてガベージコレクションコンパクション機能があります。トゥームストーンを消すことを目的とするもので、設定で有効にすると、通常はコンパクションの対象とならないSSTableも含めてオーバーラップのあるSSTableを取り込んでコンパクションを行うようになります。また、nodetoolを使用して手動でも実行できます。

最後に取り上げる注目の新機能は、パフォーマンスの改善に役立てられるように追加された、時間のかかったクエリーを記録するスロークエリーログ機能です。この機能を有効にすると、DEBUGレベルのログを出力するようにしておけば遅いクエリーがあった場合にはその詳細が記録されるようになります。

Apache Cassandraプロジェクトそのものについての11月の話題は、前号でも報告したように、チェアが交代して新体制に移行したのに伴って、プロジェクトの進め方の議論がさら活発化していることです。これまでのtick-tockリリースを維持するのかあるいは変えていくのかなど、リリースサイクルやリリース条件の検討などのほか、バージョン4.0以降に向けて、現在JIRAチケットして登録され作業が進められているもののうち、どれを4.0に含めるものとして進めていくかなどが議論されています。

Cassandraのリリース情報(2016年11月25日最新情報)

Cassandra version 3.9 2016年9月30日リリース
Cassandra version 3.0.10 2016年11月17日リリース
Cassandra version 2.2.8 2016年9月29日リリース
Cassandra version 2.1.16 2016年10月11日リリース

Apache Software Foundation のダウンロードページに Debian パッケージの取得とインストールの方法が記載されています。また、過去のバージョンを含め、tar ボール形式のものは同ページからリンクされているアーカイブからダウンロードできます。

Cassandraのドライバーリリース情報(2016年10月25日最新情報)

Java Driver 3.1.2 Cassandra 3.x対応 2016年10月27日リリース
C# /.NET Driver v3.1.0 Cassandra 3.x対応 2016年10月17日リリース
Ruby Driver v3.1.0 Cassandra 2.2、3.x対応、JRuby 1.7をサポート 2016年11月14日リリース
C/C++ Driver v2.5.0 Cassandra 3.x対応 2016年10月20日リリース
PHP Driver v1.2.2 Cassandra 3.0対応 2016年8月8日リリース
Python Driver v3.7.0 Cassandra 3.0対応、Python 2.6、2.7、3.3、3.4をサポート 2016年9月14日リリース
Node.js Driver v3.1.6 Cassandra 3.0対応 2016年11月14日リリース
Spark Cassandra Connector Release 1.6.3 Cassandra 3.0対応、Spark 1.6.1対応 2016年11月17日リリース

2016年12月開催予定のセミナーやイベント、ユーザ会の活動

PGConf.ASIA

日程 2016年12月1日(木⁠⁠~2016年12月3日(土)
場所 秋葉原コンベンションホール 東京都千代田区外神田 1-18-13 秋葉原ダイビル 4F
内容 PostgreSQLの生誕20周年を祝おう!というコンセプトから開始されたPostgreSQLの国際カンファレンスです。日本で、世界中のPostgreSQL開発者と日本のユーザの交流の場になれることが期待されています。
  • 12/1 PostgreSQL の開発者が集う場。Unconference 形式で実施。
  • 12/2 PostgreSQL の導入事例、大規模運営に必要な技術など、ビジネスシーンで PostgreSQL を利用するのに必要なテーマのセッションを実施。
  • 12/3 PostgreSQL の技術、コミュニティ運営などについてのセッションを実施。
主催 PGConf.ASIA 2016運営実行委員会

第4回 関西DB勉強会

日程 2016年12月17日(土)13:00~18:00
場所 Insight Technology 大阪支店 大阪市北区大深町3-1 グランフロント大阪 ナレッジキャピタル タワーC 11F
内容 関西で開催するDB勉強会。いろいろなコミュニティ合同で開催されます。PostgreSQLのセッションとしては、2本が予定されています。

その他のニュース

配車アプリのUberのエンジニアブログにて、MySQLをDockerコンテナと組み合わせて2,000以上のMySQLサーバを運用している状況を解説しています。

オープンソースのデータベース向けの監視ツールを提供しているVividCortexの創業者CEO Baron Schwartzが最近リリースされたPostgreSQL 9.6と最初の開発版がリリースされたMySQL 8.0の新機能の概略をまとめたスライドをSlideshareにて公開しています。

おすすめ記事

記事・ニュース一覧