ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Π³Ρ€Π°Ρ„Π° Π‘Π£Π‘Π” EdgeDB 2.0

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½Π° Π΅ вСрсията Π½Π° Π‘Π£Π‘Π” EdgeDB 2.0, която Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° рСлационния Π³Ρ€Π°Ρ„ΠΎΠ² ΠΌΠΎΠ΄Π΅Π» Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΅Π·ΠΈΠΊΠ° Π·Π° заявки EdgeQL, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° със слоТни ΠΉΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠšΠΎΠ΄ΡŠΡ‚ Π΅ написан Π½Π° Python ΠΈ Rust (парсСр ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Π·Π° производитСлността части) ΠΈ сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Apache 2.0. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΊΠ° Π·Π° PostgreSQL. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ са ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π·Π° Python, Go, Rust ΠΈ TypeScript/Javascript. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Ρ инструмСнти Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ Ρ€Π΅Π΄ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π‘Π£Π‘Π” ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ изпълнСниС Π½Π° заявки (REPL).

ВмСсто ΠΌΠΎΠ΄Π΅Π» Π½Π° Π΄Π°Π½Π½ΠΈ, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, EdgeDB ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Π° систСма, Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. ВмСсто външни ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Ρ‡Ρ€Π΅Π· ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠ° Π·Π° опрСдСлянС Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ (Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ свойство Π½Π° Π΄Ρ€ΡƒΠ³ ΠΎΠ±Π΅ΠΊΡ‚).

type Person { изисквано ΠΈΠΌΠ΅ Π½Π° свойство -> str; } Ρ‚ΠΈΠΏ Π€ΠΈΠ»ΠΌ { Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π½Π° свойство -> str; Π°ΠΊΡ‚ΡŒΠΎΡ€ΠΈ с мноТСство Π²Ρ€ΡŠΠ·ΠΊΠΈ -> Π§ΠΎΠ²Π΅ΠΊ; }

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° ускоряванС Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° заявки. ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ сС ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ силно въвСТданС Π½Π° свойства, ограничСния Π½Π° стойността Π½Π° свойствата, изчислСни свойства ΠΈ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ. Π₯арактСристикитС Π½Π° схСмата Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ EdgeDB, която донякъдС напомня Π½Π° ORM, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° смСсванС Π½Π° схСми, ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° свойства ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° JSON.

ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½ΠΈ са Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ инструмСнти Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° миграция Π½Π° схСма - слСд промяна Π½Π° схСмата, посочСна Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ esdl Ρ„Π°ΠΉΠ», просто ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° β€œedgedb migration create” ΠΈ Π‘Π£Π‘Π” Ρ‰Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° Ρ€Π°Π·Π»ΠΈΠΊΠΈΡ‚Π΅ Π² схСмата ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ‰Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° скрипт Π·Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½Π΅ към Π½ΠΎΠ²Π° схСма. Π˜ΡΡ‚ΠΎΡ€ΠΈΡΡ‚Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² схСмата сС прослСдява Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ.

Π—Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° заявки сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΊΠ°ΠΊΡ‚ΠΎ Π΅Π·ΠΈΠΊΡŠΡ‚ Π·Π° заявки GraphQL, Ρ‚Π°ΠΊΠ° ΠΈ собствСният Π΅Π·ΠΈΠΊ EdgeDB, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ адаптация Π½Π° SQL Π·Π° ΠΉΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ. ВмСсто ΡΠΏΠΈΡΡŠΡ†ΠΈ, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ заявката са Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½ΠΈ ΠΏΠΎ структуриран Π½Π°Ρ‡ΠΈΠ½ ΠΈ вмСсто подзаявки ΠΈ JOIN, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС Π΅Π΄Π½Π° заявка Π½Π° EdgeQL ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ€Π°Π· Π² Π΄Ρ€ΡƒΠ³Π° заявка. ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ сС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ Ρ†ΠΈΠΊΠ»ΠΈ.

select Movie { title, actors: { name } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", actors := ( select Person filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } Π·Π° число Π² {0, 1, 2, 3} съюз ( ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ { number, number + 0.5 } );

Π’ Π½ΠΎΠ²Π°Ρ‚Π° вСрсия:

  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½ ΡƒΠ΅Π± интСрфСйс Π·Π° администриранС Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°Ρ‚Π΅ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ, Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ EdgeQL заявки ΠΈ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°Ρ‚Π° схСма Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡŠΡ‚ сС стартира с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° β€œedgedb ui”, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ става Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ΠΏΡ€ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ localhost.
    ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Π³Ρ€Π°Ρ„Π° Π‘Π£Π‘Π” EdgeDB 2.0
  • Π˜Π·Ρ€Π°Π·ΡŠΡ‚ β€žGROUPβ€œ Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° раздСлятС ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ Π½Π° EdgeQL, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π² опСрация SELECT.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΠ±Π΅ΠΊΡ‚. ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ Π½Π° Π½ΠΈΠ²ΠΎ схСма Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²ΠΈ позволяват Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅, вмъкванС, ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява само Π½Π° Π°Π²Ρ‚ΠΎΡ€Π° Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° публикация.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² схСмата Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΅ Π½ΠΎΠ²Π° Π³Π»ΠΎΠ±Π°Π»Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° current_user Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с потрСбитСля.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ ΠΎΡ‚ стойности.
  • ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π° Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° клиСнтска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Π΅Π·ΠΈΠΊΠ° Rust.
  • Двоичният ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» EdgeDB Π΅ стабилизиран, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ възмоТно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° няколко Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ сСсии Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π° Π²Ρ€ΡŠΠ·ΠΊΠ°, прСнасочванС ΠΏΡ€Π΅Π· HTTP, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° сокСт, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° Π½Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚Π΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ Π΄Π° Π³ΠΎ стартиратС само ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚Π΅ Π΄Π° установитС Π²Ρ€ΡŠΠ·ΠΊΠ° (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π° спСстяванС Π½Π° рСсурси Π½Π° систСми Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ).

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€