YandexはDBMS«YDB»のソースコードをリリースしました

ヤンデックスは最近、SQL方言とACIDトランザクションをサポートするDBMS「YDB」のソースコードを公開したと発表した。

DBMSはゼロから構築され、当初は耐障害性、障害からの自動復旧、およびスケーラビリティを確保することを目標に開発されました。特筆すべきは、Yandexが10万以上のノードを含む運用中のYDBクラスタを立ち上げ、数百ペタバイトのデータを保存し、毎秒数百万件の分散トランザクションを処理していることです。

YDBの主なノベルティ

YDBの重要な特徴の一つは、テーブルを用いたリレーショナルデータモデルを採用している点です。データスキーマのクエリと定義には、大規模な分散データベース向けに最適化されたSQLの方言であるYQL(YDBクエリ言語)が使用されます。ストレージスキーマを作成する際には、ファイルシステムのディレクトリ構造に似た、ツリー状のテーブルグループがサポートされます。また、JSON形式のデータを操作するためのAPIも提供されています。

また、ディスク、ノード、ラック、さらには個々のデータセンターに障害が発生した場合でも機能し続ける、フォールトトレラントな構成を作成できる点も注目に値します。YDBは、3つのアベイラビリティゾーンにわたる同期的なデプロイとレプリケーションをサポートし、ゾーン障害が発生した場合でもクラスタの健全性を維持します。

スキャンクエリによるデータアクセスとの互換性。スキャンクエリは、データベースに対してアドホックな分析クエリを実行するように設計されており、読み取り専用モードで実行され、gRPCフローを返します。

さらに、ネイティブのPDiskコンポーネントとVDiskレイヤーを使用してブロックデバイスにデータを直接保存できる点も特長です。VDiskに加えて、DSProxyも動作し、ディスクの可用性とパフォーマンスを分析して、問題が検出された場合はそれらを除外します。

その他の注目すべき機能は以下のとおりです。

  • 仮想ブロックデバイスや永続キューに至るまで、YDB 上にさまざまなサービスを構築できる柔軟なアーキテクチャ。 さまざまなタイプのワークロードへの適合性: OLTP および OLAP (分析クエリ)。
  • マルチユーザー (マルチユーザー) 構成とサーバーレス構成のサポート。
  • クライアントを認証する機能。 ユーザーは、リクエスト数やデータ サイズのレベルでリソース消費を考慮したり、特定のコンピューティング リソースやストレージ スペースをレンタル/予約したりして、共有の共通インフラストラクチャ上に独自の仮想クラスターとデータベースを作成できます。
  • 古いデータを自動的に削除するためにログの有効期間を調整する機能。
  • DBMS とのやり取りとリクエストの送信は、コマンド ライン インターフェイス、組み込み Web インターフェイス、または C++、C# (.NET)、Go、Java、Node.js、PHP、Python のライブラリを提供する YDB SDK を介して行われます。
  • アプリケーションの遅延を最小限に抑えて障害から自動的に回復し、データを保存するときに指定された冗長性を自動的に維持します。
  • 主キーに対するインデックスの自動作成と、任意の列へのアクセス効率を向上させるためのセカンダリ インデックスの定義機能。
  • 水平方向のスケーラビリティ。 負荷と保存されるデータのサイズが増加しても、新しいノードを接続するだけでクラスターを拡張できます。 コンピューティング層とストレージ層が分離されているため、コンピューティング層とストレージ層を個別に拡張できます。 DBMS 自体は、利用可能なハードウェア リソースを考慮して、データと負荷の均等な分散を監視します。 世界のさまざまな地域にある複数のデータセンターをカバーする地理的に分散した構成を実装することが可能です。
  • 複数のノードとテーブルにまたがるクエリを処理する場合の、強力な整合性モデルと ACID トランザクションのサポート。 パフォーマンスを向上させるために、一貫性チェックを選択的に無効にすることができます。
  • 自動データレプリケーション、サイズまたは負荷が増加した場合の自動パーティショニング(パーティショニング、シャーディング)、およびノー​​ド間の自動負荷とデータバランシング。

最後に、YDBはYandexのプロジェクトで使用されており、コードはC/C++で記述され、Apache 2.0ライセンスの下で配布されていることを付け加えておきます。ソースコードおよび詳細については、以下のリンクをご覧ください。


Googleで優先ソースとして追加する