You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#113 Užduotis pridėjo InternalSQLManifest tipą, kurio visas principas buvo, kad veiktų dinamiškai, neperkraunant serverio. Šis funkcionalumas buvo panaudotas įgyvendinant #479 užduotį. Šioje užduotyje buvo susidurta su viena problema, kad atnaujinus duomenų struktūra yra sudėtinga atnaujinti backend metaduomenis, kaip PostgresSql, kuris saugoja engine, schema ir tables kintamuosius. Kad išspręsti šią problemą buvo sukurta reload_backend_metadata funkcija.
Problema, kad toks sprendimas nėra korektiškas, kadangi backend yra globalus objektas, kuris yra laikomas Store klasėje. Kaskarta darant naują užklausą yra perkuriamas backend, kas nėra gerai, nes smarkiai stabdo sistemą ir dėl to gali kilti kitos klaidos.
Yra keli galimi sprendimo variantai:
Daryti atskirus instances kiekvienam request.
Privalumai:
Lengvai ir greitai įgyvendinamas
Trūkumai:
Veikia tik su dinaminiais manifest.
Sudėtinga naudoti statinius ir dinaminius manifest vienu metu (statinių manifestbackends neatsinaujintu, kas teoriškai neturėtų įtakoti, nes visais atvėjais, neturėtume gyvai atnaujinti statinių manifest lentų).
Sprendimas:
Kaskartą darant užklausą nenaudoti store.backend, o sukurti jo naują, nepriklausomą kopiją ir naudoti ją. Tokiu būdu bus galima daryti betkokius pakeitimus ir tai neįtakotų dabartinių užklausų.
Naudoti globalų backend ir atnaujinti jį tik kai reikia.
Privalumai:
Galima naudoti statinius ir dinaminius manifest, kurie naudoja tą patį backend kartu.
backend visada yra su naujausiais metadata.
Trūkumai:
Sudėtinga įgyventi.
Reikia sukurti nemažai naujų pakeitimų, kad sistema sugebėtų gerai tai palaikyti.
Sprendimas:
Prie InternalSQLManifest pridėti _revision stulpelį, pagal kurį žinotume, ar buvo atlikti pasikeitimai.
Prie PostgreSqlbackendget_table pridėti papildomus patikrinimus, kurie kaskarta žiūri ar _revision sutampa, jei ne, turi iškviesti backend metadata atnaujinimus.
Kaskarta darant schemos migracijas, reikia sekti ir atnaujinti backend metadata, jei tas backend renka susijusia informacija.
Įdėti thread lock funkcionalumą, kad kol yra atnaujinamas backend negalėtų jį keisti kitos sistemos vietos.
#113 Užduotis pridėjo
InternalSQLManifest
tipą, kurio visas principas buvo, kad veiktų dinamiškai, neperkraunant serverio. Šis funkcionalumas buvo panaudotas įgyvendinant #479 užduotį. Šioje užduotyje buvo susidurta su viena problema, kad atnaujinus duomenų struktūra yra sudėtinga atnaujintibackend
metaduomenis, kaipPostgresSql
, kuris saugojaengine
,schema
irtables
kintamuosius. Kad išspręsti šią problemą buvo sukurtareload_backend_metadata
funkcija.spinta/spinta/manifests/internal_sql/commands/backend.py
Lines 7 to 11 in 9d85e55
Problema, kad toks sprendimas nėra korektiškas, kadangi
backend
yra globalus objektas, kuris yra laikomasStore
klasėje. Kaskarta darant naują užklausą yra perkuriamasbackend
, kas nėra gerai, nes smarkiai stabdo sistemą ir dėl to gali kilti kitos klaidos.Yra keli galimi sprendimo variantai:
manifest
.manifest
vienu metu (statiniųmanifest
backends
neatsinaujintu, kas teoriškai neturėtų įtakoti, nes visais atvėjais, neturėtume gyvai atnaujinti statiniųmanifest
lentų).Kaskartą darant užklausą nenaudoti
store.backend
, o sukurti jo naują, nepriklausomą kopiją ir naudoti ją. Tokiu būdu bus galima daryti betkokius pakeitimus ir tai neįtakotų dabartinių užklausų.backend
ir atnaujinti jį tik kai reikia.manifest
, kurie naudoja tą patįbackend
kartu.backend
visada yra su naujausiaismetadata
.InternalSQLManifest
pridėti_revision
stulpelį, pagal kurį žinotume, ar buvo atlikti pasikeitimai.PostgreSql
backend
get_table
pridėti papildomus patikrinimus, kurie kaskarta žiūri ar_revision
sutampa, jei ne, turi iškviestibackend
metadata atnaujinimus.backend
metadata, jei tasbackend
renka susijusia informacija.thread
lock funkcionalumą, kad kol yra atnaujinamasbackend
negalėtų jį keisti kitos sistemos vietos.Susiję
The text was updated successfully, but these errors were encountered: