EdgeDB 4.0 одоо бэлэн боллоо. Энэ нь нарийн төвөгтэй шаталсан өгөгдөлтэй ажиллахад оновчтой болгосон харилцааны график өгөгдлийн загвар болон EdgeQL асуулгын хэлийг хэрэгжүүлдэг. Код нь Python болон Rust дээр бичигдсэн (шинжлэлийн болон гүйцэтгэлийн чухал хэсгүүд) бөгөөд Apache 2.0 лицензийн дагуу түгээгддэг. Төслийг PostgreSQL нэмэлт болгон боловсруулж байна. Үйлчлүүлэгчийн сангууд нь Python, Go, Rust, .NET, Elixir, TypeScript/Javascript-д зориулагдсан. DBMS-ийн удирдлага, интерактив асуулгын гүйцэтгэл (REPL)-д зориулсан командын шугамын хэрэгслүүдээр хангагдсан болно.
Хүснэгтэд суурилсан өгөгдлийн загварын оронд EdgeDB нь объектын төрлүүд дээр суурилсан тунхаглалын системийг ашигладаг. Гадаад түлхүүрүүдийн оронд лавлагаагаар холбох нь төрлүүдийн хоорондын хамаарлыг тодорхойлоход хэрэглэгддэг (нэг объектыг өөр объектын өмч болгон ашиглаж болно).
төрөл Хүн { шаардлагатай нэр: str; } type Movie { шаардлагатай гарчиг: str; олон жүжигчид: Хүн; }
Асуулгын боловсруулалтыг хурдасгахын тулд индексийг ашиглаж болно. Хүчтэй өмч бичих, өмчийн үнэ цэнийн хязгаарлалт, тооцоолсон шинж чанар, хадгалагдсан процедур зэрэг функцуудыг мөн дэмждэг. ORM-ийг санагдуулдаг EdgeDB объект хадгалах схемийн онцлогууд нь схемүүдийг холих, өөр өөр объектуудын шинж чанаруудыг холбох, нэгдсэн JSON дэмжлэг зэргийг багтаадаг.
Схемийн шилжилтийг хадгалахад зориулж суурилуулсан хэрэгслүүдээр хангагдсан болно - тусдаа esdl файлд заасан схемийг өөрчилсний дараа "edgedb migration create" командыг ажиллуулахад л DBMS нь схемийн ялгааг шинжилж, интерактив байдлаар скриптийг үүсгэх болно. шинэ схем. Схемийн өөрчлөлтийн түүхийг автоматаар хянадаг.
Асуулга үүсгэхийн тулд GraphQL асуулгын хэл болон шаталсан өгөгдөлд зориулсан SQL-д тохируулсан өмчийн EdgeDB хэлийг хоёуланг нь дэмждэг. Жагсаалтын оронд асуулгын үр дүнг бүтэцлэгдсэн хэлбэрээр форматлах ба дэд асуулга болон JOIN-ын оронд та нэг EdgeQL асуулгаг өөр асуулга дотор илэрхийлэл болгон зааж өгч болно. Гүйлгээ, мөчлөгийг дэмждэг.
Кино сонгох { гарчиг, жүжигчид: { нэр } } шүүлтүүр . гарчиг = "Матриц" кино оруулах { гарчиг := "Матрицын амилуулалт", жүжигчид := ( { 'Киану Ривз', 'Кэрри- Anne Moss', 'Laurence Fishburne' } ) }
Шинэ хувилбарт:
- fts залгаасаар хэрэгжсэн, бүрэн текст хайлт хийх нэмэлт дэмжлэг. Аливаа объектыг хайлт хийх боломжтой баримт болгохын тулд fts::index индексийг ашиглах ба индексжүүлсэн баримтуудаас тодорхой хэллэг хайхын тулд fts::search() функцийг хангана. Үр дүн нь олдсон объект болон хайлтын жинг агуулсан багц хэлбэрээр буцаана. Жишээ нь: type Item { шаардлагатай байгаа: bool { default := false; }; шаардлагатай нэр: str; шаардлагатай тайлбар: str; index fts::index on ( fts::with_options( .нэр, хэл := fts::Language.eng ) ); } res := ( fts::search сонгох(Item, 'candy corn', language := 'eng') ) сонгох res.object {нэр, оноо := res.score} res.score desc-ээр эрэмбэлнэ;
- Шинэ өгөгдлийн төрөл болох "олон хүрээ" нэмэгдсэн. Энэ нь тасалдалгүй интервалуудыг илэрхийлэх утгын нэг буюу хэд хэдэн мужийг тодорхойлдог. Заасан хязгаарт давхцаж буй хэсгүүдийг автоматаар хэвийн болгодог. Өмнө нь ашиглаж байсан бүх хүрээний функцууд болон операторууд "олон хүрээ" төрөлтэй ажилладаг. multirange сонгох([муж(8, 10)]) + муж(1, 5) - муж(3, 4);
- HTTP-ээр дамжуулан GraphQL болон EdgeQL-д хандах хандалтыг хязгаарлахын тулд анхдагч баталгаажуулалтын дэмжлэгийг нэмж, идэвхжүүлсэн.
- Өгөгдлийн сангийн жишээнээс тусад нь ажилладаг баталгаажуулалтын үйлчилгээг ажиллуулахын тулд OAuth буюу имэйл болон нууц үгээр нэвтрэхийг дэмждэг "auth" өргөтгөл нэмэгдсэн.
- Hashing болон шифрлэлтийн hmac, gen_salt, crypt функцуудыг хангадаг pgcrypto өргөтгөлийг нэмсэн. сонго ext::pgcrypto::digest('үүнийг шифрлэх', 'sha1');
- Мөрний ижил төстэй байдлыг тодорхойлох функц бүхий pg_trgm өргөтгөлийг нэмсэн.
- Гүйцэтгэлийг сайжруулахын тулд оновчлол хийгдсэн. Санах ойн хэрэглээ асаалттай байна сервер 40%-иар буурсан. EdgeQL асуулгын задлан шинжлэгчийн кодыг Rust хэл дээр дахин бичсэн.
- EdgeQL нь одоо илүү танил болсон нөхцөлт илэрхийллийн синтаксийг дэмждэг болсон (хэрэв ... дараа нь .. өөр ...). Та одоо нөхцөлт DML-г ашиглан тодорхой нөхцөл дээр үндэслэн өөр объект үүсгэх, шинэчлэх, устгах боломжтой. to_bytes(), to_str(), enc::base64_encode, enc::base64_decode функцууд нэмэгдсэн. "Хэзээ" заалтыг одоо триггерүүдэд ашиглаж болно. count(Object) > 0-г сонгоод дараа нь 'өгөгдөл авлаа' эс бөгөөс 'өгөгдөл байхгүй'; сонгох (Хэрэглэгчийн шүүлтүүр .нэр = 'Алис'-г сонгоно уу) ?? (Хэрэглэгчийн нэрийг оруулна уу {нэр := 'Алис'}); сонго enc::base64_encode(b'сайн уу');
- Глобал утгыг GraphQL асуулгад дамжуулах шинэ арга нэмэгдсэн - тусдаа талбар ашиглахын оронд одоо __globals__ объект дээр суурилсан хувьсагчдыг дамжуулах боломжтой болсон.
Эх сурвалж: opennet.ru
