SingleStore データベースブランチング: 開発者の生産性を高める方法

1 min read

Feb 20, 2025

Gitのブランチに慣れている方なら、SingleStoreのデータベースブランチングを理解するための道のりの半分は既に達成していると言えるでしょう。
SingleStore データベースブランチング: 開発者の生産性を高める方法
これは、データベースを独立した更新可能なコピーとして瞬時に複製できる画期的な機能です。ステージング環境の構築や、アップデートの不具合からの復旧が数分で完了することを想像してみてください。夢のような話に聞こえますか?それでは、詳しく見ていきましょう。

データベースブランチングは親データベースと同じ履歴を共有しますが、作成後は独立した、完全に更新可能なデータベースとなります。つまり、ブランチ内のデータを挿入、更新、削除しても、親データベースのパフォーマンスや安定性に影響はありません。

この柔軟性は、開発者にとってまさに夢のような機能です。新機能のプロトタイプを作成する必要があるなら、本番データベースのプライベートコピーを作成すればいいのです。リスクの高いアップデートをテストしたいなら、恐れることなくブランチを作成すればいいのです。 

それでは、データベースのブランチ機能の実践的な使用例をいくつか見ていきましょう。

データベースブランチングとは何か?

データベースブランチング機能を使うと、開発者はデータベーススキーマの独立したコピーを作成し、異なるバージョンのデータベースを同時に操作できます。コードのバージョン管理システムにおけるブランチの概念に着想を得たデータベースブランチング機能では、開発者はメインデータベースに影響を与えることなく、さまざまな機能の開発やバグ修正を行うための個別のブランチを作成できます。

データベースの文脈では、これは、本番データベースに影響を与えることなく、さまざまなデータベーススキーマの変更、データ移行、その他の修正をテストおよび実験できることを意味します。稼働中の環境を混乱させる心配なく、データベーススキーマを自由に革新し、反復できることを想像してみてください。データベースブランチングを使用すると、新しいアイデアを探求するための安全な環境を構築でき、本番データベースの安定性とセキュリティを確保できます。まったく新しいデータベースを立ち上げ、変更をテストするために手動でデータをロードする必要があるといった従来の方法と比較すると、ブランチングははるかにシームレスで効率的な方法を提供します。

データベースブランチングの利点

ブランチングの利点は多岐にわたります。その使い方によって、具体的な利点はユースケースごとに異なります。ここでは、ブランチングが役立ち、ほとんどの開発者やユースケースに広く適用できる2つの分野を見ていきましょう。

自信を持って新しいアプリのプロトタイプを作成しましょう

SingleStoreのSQrLのような、1TBもの大規模データベースを基盤とした社内チャットアプリを構築していると想像してみてください。ナレッジベースを拡張したいけれど、本番環境で直接変更を加えるのは、眠れない夜を過ごす原因になりかねません。

開発ブランチを作成することは、実験やテストを行う上で非常に重要です。開発ブランチは、本番データベースに影響を与えることなくスキーマを変更できる隔離された空間を提供し、安全な移行と効率的なワークフローを保証します。

従来、ステージング環境の構築と1TBのデータベースの復元には、何時間もかかることがありました。しかし、SingleStoreのデータベースブランチング機能を使えば、本番データベースのプライベートコピーをわずか数分で作成できます。ほとんどの時間は、データベースをワークスペースに接続する作業に費やされます。しかも、ブランチ作成にかかる時間はデータベースのサイズに依存しません。

さらに、この超高速なプロセスでは、追加のストレージコストは発生しません。ブランチが稼働すれば、それは独立したデータベースとなります。本番環境に影響を与えることなく、データの挿入、更新、削除を自由に行うことができます。まるでクラウド上にサンドボックスがあるようなものです!

データ復旧が簡単に

ここからが本当に面白いところです。SingleStoreを使えば、過去のブランチを作成できます。まるでデータのためのタイムマシンを持っているようなものです!

社内分析データベースを管理しているとしましょう。特定の計算列に対して更新クエリを実行したばかりですが、うっかり入力列も変更してしまいました。慌てる必要はありません。データベースのブランチ機能を使えば、タイムスタンプを指定することで、秒単位までデータベースのブランチを作成できます。例えば、次のようになります。

1ATTACH DATABASE mydb AS recover_mydb AT TIME '2023-08-29 14:30:00';

SingleStoreのクエリ履歴ダッシュボードを使用すると、問題のあるクエリを実行したタイミングを特定し、その直前の状態からブランチを作成できます。簡単です!これで、クエリ実行前のデータベースの未変更バージョンが手に入ります。適切なタイミングでブランチを作成できなかった場合は、ブランチしたデータベースをデタッチし、別の時点(遅かれ早かれどちらでも構いません)で再アタッチしてください。

ここから先は、いくつかの選択肢があります。短時間のダウンタイムが許容できる場合は、元のデータベースを削除し、新しく分岐したデータベースの名前を元のデータベースと同じ名前に変更するだけで済みます。または、「INSERT INTO」ステートメントを使用して、影響を受ける行のみを復元することもできます。この手順は、いわゆるオンラインポイントインタイムリストア」(PITR)を実現するもので、完全にセルフサービスです。 

これらすべては数分で完了し、生産性と精神衛生を守り、潜在的なデータ災害を回避できます。

データベースブランチングはどのように機能するのか?

SingleStoreのエンジン内部を詳しく見て、データベースブランチングがどのように機能するのかを理解しましょう。

SingleStoreでは、オブジェクトストレージを活用して、いわゆる「ボトムレスデータベース」を実現しています。このアプローチの重要な特徴は、追記専用であることです。つまり、既存のオブジェクトにデータを追加するだけで、変更や削除はできません。オブジェクトにデータが書き込まれると、そのデータは不変になります。
オブジェクトストレージと、当社独自開発の「メタデータストア」サービスを使用することで、オブジェクトストレージ内の個々のブロブへのポインタを生成するだけで、データベースのブランチを作成できます。新しいデータベースに変更が加えられた場合でも、元のブロブは変更されません。代わりに、新しいブロブとそれらへのポインタが作成されます。削除の場合も同様です。削除された行をマスクするために削除ビットマップを作成し、この削除ビットマップが新しいデータとなります。これが、当社のブランチングプロセスの驚異的なスピードと効率性を実現する鍵となります。

このアプローチにより、データベースのサイズに関係なく、ブランチ操作を数分で完了できる理由が説明できます。これはデータのコピーではなく、既存データへの新しい参照セットを作成するからです。さらに、これによりブランチ操作は非常にコスト効率の良いものになります。データベース全体のコピーではなく、変更されたページの保存費用のみを支払えばよいのです。まるで、数回の編集だけで全く新しいデータベースを手に入れるようなものです。

SingleStoreでは、データベースブランチは親データベースと同じ耐久性保証を備えた、完全なデータベースであるという点も強調しておく価値があります。

データベースブランチングに関するベストプラクティス

一般的に、データベースにブランチ機能を導入する際に留意すべきベストプラクティスがいくつかあります。メリットを最大限に引き出すためには、以下のベストプラクティスに従うことが不可欠です。

  • メインの運用ブランチを作成する:データベーススキーマの真の情報源として、メインの運用ブランチを指定します。このブランチは、常に運用データベースの現在の状態を反映する必要があります。
  • 開発ブランチを作成する:新機能の追加やバグ修正ごとに、個別の開発ブランチを作成します。このようにブランチを分離することで、競合を防ぎ、変更内容をメインのプロダクションブランチにマージする前に徹底的にテストすることができます。
  • 一貫した命名規則を使用する:ブランチには一貫した命名規則を適用してください。この方法により、異なるブランチの識別と管理が容易になり、ワークフローが効率化されます。
  • 変更を定期的にマージする:データベーススキーマを最新の状態に保つには、開発ブランチからの変更を定期的にメインの運用ブランチにマージしてください。この方法により、一貫性が維持され、統合時の問題発生リスクが軽減されます。ブランチがメインブランチから乖離する期間が長くなるほど、マージ時に競合が発生する可能性が高くなります。

これらのベストプラクティスに従うことで、スムーズかつ効率的なデータベース分岐プロセスを確保し、開発ワークフローを向上させることができます。

始め方

SingleStoreのデータベースブランチングを使用したブランチの作成は簡単です。以下のシンプルなSQL文でブランチを作成できます。

1ATTACH DATABASE mydb AS branch_db;

このコマンドは、branch_dbという名前の新しい独立したデータベースを作成し、クエリを実行したワークスペースにそれを接続します。SingleStoreークスペース(WS)は、ワークロードを実行するために使用されるコンピューティングリソースの独立したデプロイメントです。ストレージとは独立してオンザフライでスケーリングできるため、きめ細かなスケーラビリティとコンピューティングリソースの分離が可能になります。

ワークスペースとデータベースブランチング機能を組み合わせることで、数分以内に隔離されたテスト環境を簡単に作成でき、本番環境のコンピューティングリソースを共有することなくプロトタイプを作成できます。テストが完了したら、ワークスペースを一時停止または終了するだけで、コンピューティングリソースのオーバーヘッドやコストを管理できます。

直感的なユーザーインターフェースを使用してブランチを作成することもできます。ブランチはデータベースから作成されるため、データベースオプションを展開して「ブランチの作成」をクリックするだけです。すると、ブランチの名前と、ブランチを関連付けるワークスペースを選択するよう求められます。このプロセスにより、データベースブランチが作成され、指定したワークスペースに紐付けられます。

SingleStore:世界最速のデータベース

SingleStoreのデータベースブランチング機能は、データ管理における万能ツールと言えるでしょう。開発者の生産性向上、リスク軽減、そしてシームレスなテスト環境の実現に貢献します。従来、開発者はSQL Server、DB2、OracleといったレガシーSQLデータベースで(ストレージボリュームレベルでの)ブランチング機能を実現するために、ハイエンドSANに数百万ドルもの費用を費やしていました。しかし今では、SingleStoreの標準機能として搭載されています。本番環境に影響を与えることなくデータを変更でき、ストレージコストを重複させることなく完全な耐久性を享受できるSingleStoreのデータベースブランチング機能は、あらゆる規模の企業にとって画期的なソリューションです。

しかし、私たちの取り組みはそこで終わりませんでした。データベースブランチングを基盤として、革新的な災害復旧ソリューションであるSmartDRも開発しました。SmartDRを使えば、セカンダリリージョンでコンピューティングリソースを常に消費することなく、リージョン間でデータを複製できます。「倍の費用をかけて、使わないことを祈る」という従来の災害復旧のジレンマとはもうお別れです。ワークフローを飛躍的に向上させたい開発者の方も、運用を万全にしたいデータベース管理者の方も、SingleStoreのデータベースブランチングとSmartDRは、より柔軟で安全、かつコスト効率の高いデータ運用を実現します。

データベースブランチングに関する詳細については、弊社のドキュメントページをご覧いただくか、team@singlestore.comまでご連絡いただければ、個別のデモをご提供いたします。

SingleStoreを今すぐ無料でお試しください。

よくある質問

Share