Rakirina DBMS SQLite 3.42 û DuckDB 0.8.0. CG / SQL bi pêkanîna prosedurên hilandî yên ji bo SQLite

Serbestberdana SQLite 3.42, DBMSek sivik a ku wekî pirtûkxaneyek pêvekirî hatî çêkirin, hate weşandin. Koda SQLite di qada gelemperî de tê belav kirin, i.e. dikare ji bo her armancê bê sînor û belaş were bikar anîn. Piştgiriya darayî ji bo pêşdebirên SQLite ji hêla konsorsiyûmek taybetî ve hatî afirandin, ku tê de pargîdaniyên wekî Adobe, Oracle, Mozilla, Bentley û Bloomberg tê peyda kirin.

Guhertinên sereke:

  • Ji bo navnîşên tev-nivîsa FTS5, fermana jêbirina ewledar hatîye bicîh kirin, ku piştî jêbirinê hemî daneyên mayî bi tevahî paqij dike.
  • Fonksiyonên ji bo hilberandina daneyên JSON naha pêvekên JSON5 piştgirî dikin.
  • Plansaziya lêpirsînê ya çêtirîn. Ji hêla xwerû ve, optimîzasyona hejmartina dîtinê çalak e. Pêvajoya stûnên neyên bikar anîn di binêpirsan de tê rakirin. Pêşveçûn pêkanîna optimîzasyona push-down.
  • Vebijarka "--ne-ewle-ceribandin" li navrûya rêzika fermanê zêde kir, ku destûrê dide karanîna hin fermanên xeternak, wek ".testctrl", ku ji bo ceribandinê tê bikar anîn. Di moda ewle ("-ewle") de, bikaranîna fermanên ".log on" û ".log off" destûr e. Piştgiriyek ji bo veqetandina "-" zêde kir, ji bo argumanên ku piştî wan hilberandina vebijarkê neçalak dibe. Parametreyên ":inf" û ":nan" yên ku bi nirxên bêdawî û NaN re têkildar in lê zêde kirin.
  • Navên fonksiyonên SQL-ê yên ku ji hêla serîlêdanê ve hatine destnîşankirin têne destûr kirin ku bi peyvên sereke yên CROSS, FULL, NINER, LEFT, NATURAL, DERVE, û RIGHT re hevûdu bin.
  • Kapasîteyên PRAGMA integrity_check hatine berfireh kirin. Ji bo diyarkirina nirxên NaN di stûnên bi rewşa NOT NULL de kontrolek zêde kir. Naveroka agahdarî ya peyamên xeletiyê çêtir kirin.
  • Pêveka danişînê destûrê dide guheztina guhertinên ji tabloyên bêyî ROWID.
  • Guherkera "subsec" li fonksiyonên ji bo xebitandina dem û mêjûyan ji bo karanîna perçeyên çirkeyan hate zêdekirin.
  • Kûrahiya vegerê ya xwerû ji bo array û tiştên JSON ji 2000-an daketiye 1000-an.

Digel vê yekê, serbestberdana DuckDB 0.8.0 DBMS hatîye afirandin, ku guhertoyek SQLite pêş dixe, ku bi kabîlbûn û xweşbîniyên ji bo pêkanîna pirsên analîtîk ku beşek girîng a daneyên hilanîn vedigire, berfireh dike, mînakî, berhevkirina tevahiya naverokê ji tabloyan an yekkirina çend tabloyên mezin. Zaravek pêşkeftî ya SQL peyda dike ku kapasîteyên zêde ji bo pêvajokirina pirsên pir tevlihev û demdirêj vedihewîne, û her weha celebên tevlihev (array, avahî, yekîtî) piştgirî dike, çend pirsan bi hevdemî dimeşîne, û rasterast ji pelên CSV, JSON, û Parquet pirsan dimeşîne. . Mimkûn e ku ji PostgreSQL DBMS were import kirin.

Digel koda şêlê ji SQLite, proje parserek ji PostgreSQL-ê di pirtûkxaneyek cihêreng de, pêkhateya Date Math ji MonetDB-ê, pêkanîna fonksiyonên pencereyê (li ser bingeha algorîtmaya Tevhevkirina Dara Segmentê), pêvajoyek birêkûpêk a li ser bingehê bikar tîne. pirtûkxaneya RE2, optimîzatora xweya pirsê, û mekanîzmayek kontrolê ya MVCC ku hevdemî îcrakirina peywiran (Kontrola Hevdemî ya Pir-Versiyonî), û her weha motorek darvekirina pirsê vektorîkirî li ser bingeha algorîtmaya Darvekirina Query Hyper-Pipelining, ku destûrê dide komek nirxan di yek operasyonê de bi yekcarî were hilberandin. Koda projeyê di bin lîsansa MITê de tê belavkirin.

Di guhertoya nû ya DuckDB de:

  • Gotinên nû "PIVOT" û "UNPIVOT" zêde kirin da ku rêzan veguherînin stûnan û berevajî.
  • Dema ku daneyan îtxalkirin û hinardekirin paralelîzasyon çêtir kirin. Ji hêla xwerû, xwendina pir-mijalek ji pelên CSV û nivîsandina pir-mijarî dema ku formatên Parquet, CSV û JSON bikar tînin têne bicîh kirin.
  • Operatorê "**" lê zêde kir ku dema ku rêyên pelan destnîşan dike bi rengek vegerî di nav pelrêçan de dubare bike (mînak, FROM "'data/glob/crawl/stackoverflow/**/*.csv';").
  • Piştgiriyek ji bo operasyonên hevgirtinê (JOIN) ji bo daneyan di forma rêzek demjimêr de (parçeyên nirxên parametreyê di navberên dema diyarkirî de) zêde kir, ku tê de pîvana yekkirina tomaran ne rast e, lê tesadufek texmînî ya nirxan e. di qadeke bi demê de (mînak, hûn dikarin tomaran, dema ku ji 1 hûrdemî zêdetir cûda ne) tomar bikin.
  • Barkirina tembel a metadata databasê pêk anî, ku ev gengaz kir ku destpêkirina DBMS-ê bi dehan carî bilez bike.
  • Piştgiriyek ji bo girêdana fonksiyonên xwerû yên li Python zêde kir.
  • Ji bo veguheztina daneyan bi karanîna Apache Arrow-ê piştgirî ji bo ADBC ​​​​ (Pêwendiya Database Arrow) API-yê zêde kir.
  • Ji bo entegrasyonê bi koda Swift re girêdanek hate bicîh kirin.
  • Tevgera operatora dabeşkirinê ("/") guhert da ku hesabên xala herikînê li şûna operasyonên jimare bi xwerû pêk bîne. Operatorek nû "//" ji bo dabeşkirina yekjimar tê pêşniyar kirin. Tevgera kevn dikare bi danîna "SET integer_division=true;" vegere.
  • Rêbaza hesabkirina tomarên sifir dema veqetandinê ji "NULLS FIRST" bo "NULLS DAWÎ" hatiye guhertin, ango. NULL nirxên NULL dê naha li şûna destpêka navnîşê li dawiyê bêne çap kirin. Tevgera kevn dikare bi danîna "SET default_null_order='nulls_first';" vegere.

Wekî din, em dikarin projeya CG/SQL ya ku ji hêla Facebook ve hatî pêşve xistin destnîşan bikin, ku ji bo karanîna prosedurên hilanîn bi SQLite re jeneratorek kodê peyda dike. CG/SQL destûrê dide te ku hûn prosedurên hilanîn bi zaravayek taybetî ya T-SQL (Transact-SQL) binivîsin, ku destûrê dide bangkirina fonksiyonên pirtûkxaneya standard C û gihîştina daneyan di SQLite de. Pêvajoyên hilanîn ên hilberandî di koda C de têne berhev kirin ku SQLite C API bikar tîne da ku kiryarên diyarkirî pêk bîne û pirsên tevlihev pêvajoyê bike. Pêvajoyên hilanîn ên berhevkirî dikarin bi bernameyên C, Java, û Objective-C ve werin girêdan. Koda projeyê bi C-yê hatî nivîsandin û di bin lîsansa MIT-ê de tê belav kirin.

Source: opennet.ru

Add a comment