Yandex は、SQL 言語と ACID トランザクションのサポートを実装する分散 DBMS YDB のソース コードを公開しました。 DBMS はスクラッチから作成され、当初はフォールト トレランス、障害からの自動回復、およびスケーラビリティを確保することを目的として開発されました。 Yandex は、10 万を超えるノードを含む実用的な YDB クラスターを立ち上げ、数百ペタバイトのデータを保存し、毎秒数百万の分散トランザクションを処理していることが注目されます。 YDB は、Market、Cloud、Smart Home、Alice、Metrica、Auto.ru などの Yandex プロジェクトで使用されています。 コードは C/C++ で書かれており、Apache 2.0 ライセンスに基づいて配布されています。 慣れてすぐに起動できるように、既製の Docker コンテナーを使用できます。
プロジェクトの特徴:
- テーブルを使用したリレーショナル データ モデルの使用。 クエリとデータ スキーマの定義には、YQL 言語 (YDB クエリ言語) が使用されます。これは、大規模な分散データベースでの作業に適した SQL の方言です。 ストレージ スキーマを作成する場合、ファイル システム内のディレクトリを彷彿とさせる、テーブルのツリー状のグループ化がサポートされます。 JSON 形式のデータを操作するための API が提供されています。
- データベース上で分析的なアドホック クエリを実行するように設計されたスキャン クエリを使用したデータ アクセスのサポート。読み取り専用モードで実行され、grpc ストリームを返します。
- DBMS とのやり取りとリクエストの送信は、コマンド ライン インターフェイス、組み込み Web インターフェイス、または C++、C# (.NET)、Go、Java、Node.js、PHP、Python のライブラリを提供する YDB SDK を使用して実行されます。
- 個々のディスク、ノード、ラック、さらにはデータセンターに障害が発生した場合でも動作を継続するフォールトトレラント構成を作成する機能。 YDB は、XNUMX つのアベイラビリティ ゾーンでのデプロイメントと同期レプリケーションをサポートし、ゾーンの XNUMX つに障害が発生した場合でもクラスターの機能を維持します。
- アプリケーションの遅延を最小限に抑えて障害から自動的に回復し、指定されたデータの冗長性を自動的に維持します。
- 主キーに基づいたインデックスの自動作成と、任意の列へのアクセス効率を向上させるためのセカンダリ インデックスを定義する機能。
- 水平方向のスケーラビリティ。 保存されるデータの負荷とサイズが増加しても、新しいノードを接続するだけでクラスターを拡張できます。 コンピューティング層とストレージ層が分離されているため、コンピューティング能力とストレージ サイズを個別に拡張できます。 DBMS 自体は、利用可能なハードウェア リソースを考慮して、データと負荷の均一な分散を監視します。 世界のさまざまな地域にある複数のデータセンターをカバーする地理的に分散した構成を展開することが可能です。
- 複数のノードとテーブルにまたがるクエリを処理する場合、強力な整合性モデルと ACID トランザクションをサポートします。 パフォーマンスを向上させるために、一貫性チェックを選択的に無効にすることができます。
- 自動データレプリケーション、サイズまたは負荷が増加した場合の自動パーティショニング(パーティショニング、シャーディング)、およびノード間の自動負荷とデータバランシング。
- ネイティブ PDisk コンポーネントと VDisk レイヤーを使用して、ブロック デバイスにデータを直接保存します。 DSProxy は VDisk 上で実行され、ディスクの可用性とパフォーマンス特性を分析して、問題が検出された場合にそれらを排除します。
- 仮想ブロックデバイスや永続キューなど、YDB 上にさまざまなサービスを作成できる柔軟なアーキテクチャ。 さまざまなタイプのワークロード、OLTP および OLAP (分析クエリ) への適合性。
- マルチテナントおよびサーバーレス構成のサポート。 クライアント認証の可能性。 ユーザーは、リクエスト数やデータ サイズのレベルでリソース消費を考慮したり、特定のコンピューティング リソースやストレージ スペースをレンタル/予約したりして、共通の共有インフラストラクチャに仮想クラスターとデータベースを作成できます。
- レコードの有効期間を構成して古いデータを自動的に削除する機能。
出所: オープンネット.ru