YugabyteDB 2.15: より早いビルドと、より早いリリースに貢献

Tomohiro Ichimura
The Distributed SQL Blog
16 min readJul 7, 2022

開発者にとって、時間ほど価値のあるものはないでしょう。Yugabyteの原動力となっているのは開発者であると我々は認識しております。そういう観点においても、我々Yugabyteはより業務の負担を減らし、よりキャリアを成功に導くような、開発者にとって親しみのあるデータベースの提供をしております。

YugabyteDB 2.15は我々の最新のプレビューリリースであり、このコミットメントを継続するものです。本リリースにおいては、時間を要せずに開始ができ、親しみと実績のある機能やツールを活用するための新しい機能拡張がなされております。

これにより、従来のレガシーデータベースの問題解決のために、時間を要したプロジェクトを排除して、マーケットに新しく革新的なものを投入するまでの時間を短縮することが出来ます。

YugabyteDB 2.15には、開発者の生産性を高める以下の新しい機能が含まれます。

  • 悲観的ロック(Pessimistic Locking)とREAD_COMMITTED 隔離レベルのサポート
  • CDCにおけるWebhookとクラウドストレージSinkのサポート
  • PostgreSQLのMaterialized ViewとCREATE LANGUAGE機能のサポート
  • Prisma, DjangoとGORMへの対応による更なるエコシステムの拡張
  • YugabyteDB ManagedにおけるCloud APIの提供
  • YugabyteDB Managedにおけるマルチ・リージョンクラスタの対応
  • ソーシャルログインとの連携によるサインオンの改善

それでは、より詳細について見ていきましょう。

悲観的ロックとREAD_COMMITED隔離レベルのサポート

我々のユーザの方々からのフィードバックをもとに、3つ目の隔離レベルであるREAD_COMMITTEDのサポートをネイティブでサポートします。これにより、YugabyteDBは業界で、最初かつ唯一の分散SQLデータベースとして、全てのPostgreSQLの隔離レベルのサポートを提供します。隔離レベルとは、他のトランザクションと同時に実行された場合に、トランザクションがどのデータを扱えるのかを保証するものです。例えば、同時に並行して処理されるトランザクションが多いアプリケーションについては、より制限の厳しい隔離レベル(SERIALIZABLE)は意味をなさないことになります。

他の隔離レベルと比較してより制限の緩いレベルであるREAD_COMMITTEDについては、PostgreSQL含め、多くのデータベースにおいてデフォルトのレベルとなってます。

多くの方に利用してもらうためにも、安全かつシームレスに、モダンかつ分散したデータレイヤーを利用する仕組みが今回新しく提供されました。そして、開発者の方にとって、より重要なことは、この隔離レベルが、再起動や不具合への対応をせずに、アプリケーションのビルドを可能とするところにあります。

悲観的ロックにより、あるトランザクションが、その時点で変更されているデータにアクセスしようとすると、データ変更をしているトランザクションがロックをリリースするまでブロックされます。この隔離レベルにて動作しているトランザクションは、共有ロックを発行し、行については、行を読み込んだ後に行ロックをリリースします。

悲観的ロックと組み合わせることで、より重要な効果を得られます。

  • アプリケーションと衝突の対応を簡素化。衝突の発生を完全に防ぐことで、衝突が起こる状況に対応する必要がなくなります。
  • アプリケーションの性能向上。 衝突を防ぎ、アプリケーション自体が対応できるようにすることで、衝突が起こり得る可能性の高い、同時並行性より多く求められる環境下においても最大の性能が得られます。
  • クライアント側でリトライ処理をするためのコードを書き直す必要がなくなります。
  • トランザクション衝突が発生する可能性の高まる、より時間のかかる実行処理もサポートすることができます。

より詳細については、Martin Kleppmann氏の tests for transaction isolation anomalies にも詳しい内容が記載されておりますので、是非ご覧ください。

CDCにおけるwebhookとクラウドストレージへの対応

YugabyteDB 2.13において、イベントドリブンなデータアーキテクチャの実装に役立つ、Change Data Capture (CDC) と呼ばれる機能をアナウンスいたしました。

CDCはその受け手となるアプリケーションとサービスに対して、絶え間なく続くYugabyteDBにおけるデータ変更のストリームを消費することを可能とします。ストリームはいかなるサイズのYugabyteDBクラスタにもスケールし、商用トラフィックへの影響は最小限に抑えられます。

既存のKafka Sinkに加えて、バージョン2.15からは新しいwebhook sinkとクラウドストレージ sinkを使ったhttpのエンドポイントにアップデートを送ることが可能となります。

クラウドストレージ sink

YugabyteDB 2.15では、新たにクラウドストレージ Sinkとして、Amazon S3にイベントを流すことが可能となりました。クラウドストレージ S3 SinkはCDCストリームのうち、create events のみをサポートします。このSinkを用いて、行レベルの変更をOLAP(Online Analytical Processing, オンライン分析処理)データベースであるSnowflakeにも流すことが可能となります。対象となる行の変更は、JSONフォーマットでレコードが生成されます。詳しい構成の仕方と利用方法についてはこちらのドキュメント をご覧ください。

Webhook sink

YugabyteDB 2.15はHTTP(webhook)のsinkも新たにサポートし、あらゆるHTTPエンドポイントにメッセージを送信することが可能となります。Webhookは現在HTTPとJSONエンドポイントをサポートしています。詳しい構成の仕方と利用方法についてはこちらの ドキュメント をご覧ください。

業界をリードするPostgreSQLのサポート

この度のリリースで、最もPostgreSQL互換性の高い分散SQLデータベースに、更に新しい機能がサポートされたことで、皆様にご満足いただけるような製品としてYugabyteDBを引き続き提供しております。

バージョン2.15においてはREAD_COMMITTEDの隔離レベルへの対応のみならず、マテリアライズド・ビューの一般提供も開始しました。この機能はこれまではベータ版としてのリリースで、新しいCREATE LANGUAGEを使った言語拡張でサポートされていました。

マテリアライズド・ビューの一般提供

マテリアライズド・ビューは、クエリ定義から生成された事前計算されたデータセットであり、後々における利用のため保存されます。アプリケーションの多くは、データに対してクエリを事前計算( もしくは実体化)することで、より早いクエリ処理と安定性の向上を、追加のストレージコストを払って実現します。

簡単な例として、メールボックスの統計情報に関する、各ユーザごとのメッセージが格納されているメールボックスがあるとします。読み込み主体のワークロードの場合、未読メッセージの数を現す方が、メールボックスにユーザがアクセスするたびに全てのメッセージをスキャンするよりも効率が高くなります。というのも、データは事前に計算されて、マテリアライズド・ビューに直接クエリをかける方が、ビューのベースとなっているテーブルに対してクエリを実行するよりも高速だからです。さらに、ワークロードの圧倒的な性能改善にもつながり、共通かつ何度も行われるクエリであれば、より一層顕著になります。

マテリアライズド・ビューはベースとなるテーブルの変更があった場合、バックグラウンドで再計算されます。そのため、ベースとなるテーブルにおける、断続的なデータ変更に対して、自動的にマテリアライズド・ビューに追加されます。これにより、マテリアライズド・ビューは最新のデータを返すことができます。もしベーステーブルの変更がマテリアライズド・ビューに有効になってない場合は、データは直接ベーステーブルから参照することになります。

マテリアライズド・ビューの利用については、こちらのドキュメント を参照ください。

CREATE LANGUAGEを使った新しい言語拡張のサポート

データベースは、単に性能や各種機能だけで特徴づけられるものではなく、カスタマイズされたユーザ定義可能な機能追加ができるかも重要な要素です。このようなオプションを提供するために、PostgreSQLにおいては機能拡張のインストールを自在にできるアーキテクチャを提供しています。

そのうちの一つが、新しい言語拡張です。PostgreSQLは多くの手続き型言語をサポートしており、それらはユーザ定義の関数、もしくはストアプロシージャーをサポートします。 しかし、標準的なPostgreSQLディストリビューションにおいて、すぐに利用可能な4つの言語があります: PL/pgSQL, PL/Tcl, PL/Perl, PL/Pythonです。また、PostgreSQL自体の高い拡張性により、他にも 多くの利用可能な言語 があります。

これらの言語拡張を作成するために、YugabyteDB 2.15はCREATE LANGUAGE DDLをサポートします、これにより、YugabyteDBにおける手続き型言語を登録することが可能です。さらに、この新しい言語においては、関数とプロシージャが定義されます。

これにより、効果的に言語名とハンドラー関数とを関連づけ、その言語で書かれた関数の実行を担うことが出来ます。

エコシステムの拡張

モダンなWebアプリケーションをビルドする際、開発者の方が、データモデリングとデータアクセスが、生産性のボトルネックとなっている場面に遭遇する機会がよくあります。

YugabyteDB 2.15 はいくつかの機能拡張により、皆さんにとって慣れ親しんだ実績のあるエコシステム・ツールの利用促進ができるようになりました。

Prismaのサポート

YugabyteDBとPrismaは、PostgreSQLとPrismaのように他のデータベースでの利用方法と同じように使っていただく事が可能です。スキーマレスなデータベースソリューションとは違い、多くの方がORM(Object-Relation Mapping)ツールをSQLと組み合わせて、必要なオプションとなるように利用しています。Node.jsのコミュニティは長らく Sequelize ORMをサポートしてきましたが、Prismaはモデル、移行、データ操作における新しいオプションとなります。 PrismaをYugabyteDBと組み合わせて使うことで、Prismaの特徴的な機能を利用することが可能です。:

YugabyteDBを使ったPrismaがもたらす効果は、データベースをホストする、あるいはスケールする事についてのエキスパートでなくとも、分散SQLデータベースのスケーラブルなインフラストラクチャにアクセスする事が可能であるところにあります。YugabyteDBがこれらの部分を請け負うため、運用上のオーバヘッドとなるようなことに時間をさかずに、必要なサービスや製品をビルドすることに時間を費やす事が出来ます。

Prisma MigrateとYugabyteDBのオンラインスキーマ変更を組み合わせることで、これらの変更がどのように伝播するかをより大きなチームにおいて心配する事なく、非常にスムースなワークフローが利用可能となります。

YugabyteDBにおけるPrismaサポートについて、詳しくはこちらのブログをご参照ください。

Django ORM向けのYugabyteDBバックエンド

Djangoは、フル機能が搭載されたORMとして、データベースとのインタラクションを簡素化する機能を実装しています。Webフレームワークとして最も人気のあるものとなっている理由でもあります。そのような状況においても、スケールや回復力、常にオンラインであるためのデータベース管理が必要となります。Djangoのデータベースでよく利用されるPostgreSQL, SQLite, MySQLでは特に難しいとされてます。そこで、この度、新しいDjango ORM向けYugabyteDBバックエンドをアナウンスさせて頂きます。

YugabyteDBとDjangoとの組み合わせによりオープンソースで、分散SQLデータベースの全ての恩恵を得ながらも、Pythonを使ったコーディングの利便性が提供されます。

YugabyteDBは自動的にシャードされるため、回復力も備えており、高い可用性も提供されております。

YugabyteDB向けのGORM

GORM は開発者にとって親しみのあるORMライブラリで、YugabyteDBを含めたリレーショナルなデータベースを扱うことが出来ます。GORMをサポートすることにより、Go言語を利用する開発者の皆さんに、慣れ親しんだプログラム言語を使った強力なSQLを活用して頂くことが可能となります。YugabyteDB用のGORMにより、Gophersの皆さんはデータベースとの連携や運用を、一元的に管理することが可能となります。

YugabyteDB Managedの新しいCloud API

開発者にとって、もう一つの重要なツールはフルマネージドのDatabase-as-a-service(DBaaS)として、日々のデータベース管理を我々が皆さんに代わって担当し、数分でライブとなる、すぐに利用可能なデータベースクラスターがご利用いただけます。YugabyteDB 2.15では、皆さんにとってYugabyteDB Managedをさらに魅力的にするべく、テック・プレビュー版としてREST APIの提供を開始しました。

このAPIを利用することで、利用のない期間におけるクラスタの停止・再開を自動化することが出来たり、スケジュールでクラスターをスケールアップ・ダウンさせることも出来ます。さらに、クラスタの情報を取得したり、使用状況のレポートを作成、3rdパーティツールとの統合も可能となります。

YugabyteDB Managedでマルチリージョン構成も簡単に

クリック数回で、YugabyteのフルマネージドのDBaaS提供にて、マルチリージョン・データベースの構成とデプロイが可能です。シングル・リージョンクラスタに加えて、YugabyteDB Managedにおいて、複数のクラウドリージョンにデータが複製され、リージョンレベルでの不具合にも耐えることが出来ます。これにより、扱うデータはより可用性に優れ、安心感が得られます。本機能は現在プレビューとして提供されており、より多くの機能拡張が予定されております。

YugabyteDB Managedにおいてマルチリージョンのデプロイメントを簡単にするだけでなく、ビルトインのチュートリアルにより、より気軽に習得しやすくなっております。この新しいチュートリアルで、YugabyteDBでサポートされているPostgreSQLの機能を把握したり、統合されたCloud Shellからのコマンド実行、さらにお好みのプログラム言語によるサンプルアプリケーションの稼働も可能となります。

YugabyteDB Managedにサインナップして頂きますと、YugabyteDBの設定とはじめ方についてご案内させて頂きます。

ソーシャルログインを使ったシンプルなシングルサインオン

サインナップにおいて、新しいパスワードの作成、もしくは新しい登録フォームへの記入の必要はなく、ソーシャルプラットフォームを利用した既存のログイン情報を利用したシングルサインオン機能を新たに提供いたします。YugabyteDBのサインナップとログインについては、既存のソーシャルアカウントとして、Google, Github, Linkedinが使えます。もし既にアカウントをお持ちであれば、追加のログイン方法として、これらのソーシャルアカウントと既存のYugabyteDB Managedのアカウントを関連づけることも出来ます。より詳細は こちらをご覧ください。

さあ、はじめましょう、そしてより詳細を知るには

我々のフラグシップ製品である、エンタープライズ・グレードの機能を数多く実装した、YugabyteDBの最新バージョン2.15をリリースできることを大変光栄に思います。

より詳細を知りたい方、試しに使ってみたい方は、ぜひ以下の情報もチェックしてください。

  • YugabyteDB 2.15 はすぐ利用できます ダウンロードはこちら!
    インストールは数分で完了します
  • Slack に参加してください!より多くのコミュニティメンバーや、Yugabyteのエンジニアリングチームとのコミュニケーションとつながりましょう!

最後に、今年で4回目の開催となる年次イベントDistributed SQL Summitが9月に開催です。ぜひご登録ください!

本記事は、The Distributed SQL Blogsにて2022年6月30日に公開されたYugabyteDB 2.15: Enable Developers to Build Quicker and Ship Fasterを翻訳および一部訳注を追加しております。最新情報は英語版の記事を参照してください。

--

--