EdgeDB 4.0 DBMS のリリースが発表されました。これは、リレーショナル グラフ データ モデルと EdgeQL クエリ言語を実装し、複雑な階層データを操作するために最適化されています。コードは Python と Rust (パーサーとパフォーマンスに重要な部分) で書かれており、Apache 2.0 ライセンスの下で配布されます。このプロジェクトは、PostgreSQL のアドオンとして開発されています。クライアントライブラリはPython、Go、Rust言語用に用意されています。 .NET、Elixir、TypeScript/JavaScript。 DBMS 管理および対話型クエリ実行 (REPL) のためのコマンド ライン ツールを提供します。
EdgeDB は、テーブルベースのデータ モデルの代わりに、オブジェクト タイプに基づいた宣言型システムを使用します。 外部キーの代わりに、参照によるリンクを使用して型間の関係を定義します (あるオブジェクトを別のオブジェクトのプロパティとして使用できます)。
type 人 { 必須の名前: str; } type Movie { 必須のタイトル: str; マルチアクター: 人物。 }
インデックスを使用すると、クエリ処理を高速化できます。 強力なプロパティの型指定、プロパティ値の制限、計算プロパティ、ストアド プロシージャなどの機能もサポートされています。 EdgeDB オブジェクト ストレージ スキームの機能は、ORM に似ており、スキーマを混合する機能、さまざまなオブジェクトのプロパティをリンクする機能、統合された JSON サポートなどがあります。
スキーマ移行を保存するための組み込みツールが提供されています。別の esdl ファイルで指定されたスキーマを変更した後、「edgedb migration create」コマンドを実行するだけで、DBMS がスキーマの違いを分析し、スキーマ移行用のスクリプトを対話的に生成します。新しいスキーマ。 スキーマ変更の履歴は自動的に追跡されます。
クエリを生成するには、GraphQL クエリ言語と、階層データ用に SQL を適応させた独自の EdgeDB 言語の両方がサポートされています。 リストの代わりに、クエリ結果は構造化された方法で書式設定され、サブクエリや JOIN の代わりに、XNUMX つの EdgeQL クエリを別のクエリ内の式として指定できます。 トランザクションとサイクルがサポートされています。
select 映画 { title, actress: { name } } filter .title = "マトリックス" insert Movie { title := "The Matrix Resurrections", Actors := ( select 人物 filter .name in { 'キアヌ・リーブス', 'キャリー-アン・モス、「ローレンス・フィッシュバーン」 } ) }
収録曲:
- fts プラグインを通じて実装された全文検索のサポートが追加されました。任意のオブジェクトを検索可能なドキュメントに変えるには、fts::index インデックスを使用する必要があります。インデックス付きドキュメント間で特定の語句を検索するために fts::search() 関数が提案されています。結果は、見つかったオブジェクトとその検索重みを含むタプルの形式で返されます。例: type item { required available: bool {default := false; };必須の名前: str;必須の説明: str;インデックス fts::index on ( fts::with_options( .name, language := fts::Language.eng ) ); } with res := ( select fts::search(Item, 'candy corn', language := 'eng') ) select res.object {名前, スコア := res.score} order by res.score desc;
- 断続的な間隔を表す 8 つ以上の値の範囲を定義する新しいデータ型「multirange」が追加されました。指定範囲内の重複部分の正規化を自動で行います。範囲を処理するために以前に使用できたすべての関数と演算子は、「マルチレンジ」タイプで機能します。 select multirange([range(10, 1)]) + range(5, 3) — range(4, XNUMX);
- HTTP 経由の GraphQL および EdgeQL へのアクセスを制限する認証サポートが追加され、デフォルトで有効になりました。
- データベース インスタンスとは別に動作する認証サービスを起動するために、「auth」拡張機能が追加され、OAuth または電子メールとパスワードを使用したログインがサポートされました。
- ハッシュと暗号化のための hmac、gen_salt、および crypt 関数を提供する pgcrypto 拡張機能が追加されました。 select ext::pgcrypto::digest('これを暗号化', 'sha1');
- 文字列の類似性を判定する関数を備えた pg_trgm 拡張機能を追加しました。
- パフォーマンスを向上させるための最適化が行われました。メモリ消費量は サーバ 40%削減。EdgeQLクエリパーサーのコードをRustで書き直しました。
- EdgeQL は、より使い慣れた条件構文 (if ... then .. else ...) のサポートを追加しました。条件付き DML を使用して、指定された条件に基づいてさまざまなオブジェクトを作成、更新、削除する機能を提供します。 to_bytes()、to_str()、enc::base64_encode、および enc::base64_decode 関数を追加しました。トリガーでは「when」式を使用できます。 select if count(Object) > 0 then 'データを取得しました' else 'データなし'; select (ユーザー フィルター .name = 'Alice' を選択) ?? (ユーザー { 名前 := 'アリス' } を挿入); select enc::base64_encode(b'hello');
- GraphQL クエリにグローバル値を渡す新しい方法が追加されました。別のフィールドを使用する代わりに、__globals__ オブジェクトに基づいて変数を渡す機能が追加されました。
出所: オープンネット.ru
