InterSystema IRIS DBMS adiuvat structuras iucundas ad condendas notitias - globales. Essentialiter hae sunt multi-gradae claves cum variis adiectis nullam in modum transactionum, munera celeria percurrendi data arboribus, crinibus et lingua propria ObjectScript.
Plura de globalibus lege in serie articulorum "Globals sunt gladii thesaurarii ad notitias recondendas":
Ego quaero quomodo res in globales perficiantur, quales notae sunt. Ceterum, haec prorsus alia est structura notitiarum actarum quam notarum tabularum. Multo inferius.
Sicut ex speculatione datorum relationum notum est, exsecutio negotiorum debet satisfacere necessariis :
A - atomicus. Omnes mutationes in transactione factae vel nullae omnino referuntur.
C - Constantia. Post negotium expletum, logicus status datorum intrinsecus congruere debet. Multis modis haec exigentia ad programmatorem pertinet, sed in casu datorum SQL etiam claves peregrinas respicit.
I - Isolate. Actiones parallelae se invicem non afficere debent.
D - Dura. Post feliciter expletum negotium, problemata apud inferos (exempli gratia defectus potentiae) notitias per transactionem mutatam esse non debent.
Globales non-relationes structurae datae sunt. Ordinatae sunt in valde stricto odio currere super ieiunium. Intueamur exsequendam transactions in globals usura .
Ad transactiones in IRIS suscipiendas, haec mandata adhibentur; , , .
1. atomicity
Modus reprimendi facillimus est atomicity. De consolatorium database coercemus.
Kill ^a
TSTART
Set ^a(1) = 1
Set ^a(2) = 2
Set ^a(3) = 3
TCOMMITDeinde concluditur:
Write ^a(1), “ ”, ^a(2), “ ”, ^a(3)Et dabimus tibi:
1 2 3Omnia est bonum. Conservatur atomicus: omnes mutationes referuntur.
Inpediant negotium, errorem inducant et videant quomodo transactio salva sit, ex parte vel nullo modo.
Compesce atomicity iterum:
Kill ^A
TSTART
Set ^a(1) = 1
Set ^a(2) = 2
Set ^a(3) = 3Tunc vas fortiter cessabimus, deducemus et videbimus.
docker kill my-irisPraeceptum hoc fere aequivalet cum vi shutdown, cum signum SIGKILL mittit ut statim processum sistit.
Forsitan res partialiter servata est?
WRITE ^a(1), ^a(2), ^a(3)
^
<UNDEFINED> ^a(1)- Imo non superfuit.
Experiamur reverti imperium
Kill ^A
TSTART
Set ^a(1) = 1
Set ^a(2) = 2
Set ^a(3) = 3
TROLLBACK
WRITE ^a(1), ^a(2), ^a(3)
^
<UNDEFINED> ^a(1)Nihil supervixit aut.
2. Constantia
Cum in databases in globalibus fundatis, etiam in globalibus claves fiunt (me admoneam te globalem esse structuram inferiorem graduum notitias accommodandi quam tabula relationis), ut congruentia exigentii occurrat, mutatio clavium includi debet. in eadem transactione mutatione globali.
Exempli gratia, personam globalem habemus, in qua personalitates condimus et stannum ut clavis utimur.
^person(1234567, ‘firstname’) = ‘Sergey’
^person(1234567, ‘lastname’) = ‘Kamenev’
^person(1234567, ‘phone’) = ‘+74995555555
...Ut nomen novissimum et praenomen velox inquisitionis habeamus, clavem ^indicem fecimus.
^index(‘Kamenev’, ‘Sergey’, 1234567) = 1Ut sibi congruere database, addere oportet personam huius modi:
TSTART
^person(1234567, ‘firstname’) = ‘Sergey’
^person(1234567, ‘lastname’) = ‘Kamenev’
^person(1234567, ‘phone’) = ‘+74995555555
^index(‘Kamenev’, ‘Sergey’, 1234567) = 1
TCOMMITItaque cum delendo adhibenda est res;
TSTART
Kill ^person(1234567)
ZKill ^index(‘Kamenev’, ‘Sergey’, 1234567)
TCOMMITAliis verbis, adimplens constantiam postulationem, in umeris programmatis tota innititur. Sed cum ad globales ventum est, hoc normale est, propter eorum naturam ignobilem.
3. solitudo
Haec ubi tesqua incipiunt. Multi utentes simul in eadem database operantur, eadem data mutantur.
Res comparabilis est cum multi utentes simul cum eodem codice repositorium laborant et simul conantur mutationes multis simul antistis committere.
Database omnia in tempore reali debet exponi. Considerans in societatibus gravibus etiam esse singularem personam, quae versionis author sit potestate (pro bus ramis, certaminibus solvendis, etc.), ac datorum hoc tempore reali facere debet, multiplicitatem operis ac rectitudinem. datorum consilio et codice inserviens.
Datorum significationem non possunt intelligere actuum ab utentium ad vitanda pugnas, si in eadem notitia laborant. Unam tantum transactionem cum altero conflictus dissolvere potest, vel sequentiter exequi.
Alia quaestio est quod in executione negotii (antequam committi), status datorum potest esse inconstans, ita optandum est ut aliae transactiones non habeant accessum ad inconstans status datorum, qui in relationibus databases obtinetur. in multis: snapshots creando, ordines multi-versio et etc.
Cum parallelae res geruntur, interest nobis inter se non impedire. Hoc est proprium solitudinis.
SQL definit 4 gradus solitarii:
- READ UNCOMMITTED
- READ COMMISED
- ITERUM READ
- Serializable'
Singulos gradus separatim inspiciamus. Sumptus ad effectum deducendi unumquemque gradum fere exponentialiter augentur.
READ UNCOMMITTED - Hoc est ultimum solitudinis, sed simul celerrime. Transactiones legere possunt mutationes ab invicem factae.
READ COMMISED est proximus gradus solitudinis, qui est transactio. Transactiones inter se mutationes ante committere non possunt, sed leges quascumque mutationes factas post committere possunt.
Si longam rem habemus T1, in quo committit factum est in transactionibus T2, T3 ... TN, quae eadem data operata est cum T1, tum cum postulans notitia in T1 habebimus alium exitum cuiusque temporis. Hoc phaenomenon lectio non-iterabilis appellatur.
ITERUM READ — in hoc plano segregationis phaenomenon lectionis non iterabilis non habemus, ob id quod unicuique rogationi datae legendae, snacus effectus notitiae creatur et cum in eodem negotio redditur, notitia e snapshot adhibetur. Potest tamen legere phantasma notitiarum in hoc gradu segregationis. Agitur de lectione novorum ordinum qui a parallelis commissis negotiis adiciuntur.
Serializable' - summis velit. Proprium est eo quod notitia quoquo modo usus est in negotio (legendo vel mutando) aliis negotiis in promptu fit tantum post complementum primae transactionis.
Primum, instare sitne operationum solitudo in negotio a filo principali sit. Aperiamus 2 fenestras terminales.
Kill ^t
Write ^t(1)
2
TSTART
Set ^t(1)=2Solitudo nulla est. Unum filum videt quid secundus, qui rem gestam aperuit.
Videamus an transactiones variarum filorum videant quae intus in eis aguntur.
Aperiamus 2 fenestras terminales et apertas 2 transactions in parallelis.
kill ^t
TSTART
Write ^t(1)
3
TSTART
Set ^t(1)=3
transactions parallel inter se videre data. Sic simplicissima cepimus, sed etiam in gradu solitudo velocissimo, READ UNCOMMITED.
Principio, hoc exspectari potuit in globalibus, cuius effectus semper prioritas fuit.
Quid si altiore solitudine in operationibus in globalibus opus est?
Hic debes cogitare de causa quare gradus separati sunt omnino necessarii et quomodo operantur.
Summum gradum solitudo, Serialize, significat exitum transactionum in parallelis aequiparare eorum exsecutioni sequentiae, quae absentiam collisiones praestat.
Hoc facere possumus comas callidi in ObjectScript, quae multum diversos usus habent: facere potes regularem, incrementalem, multiplicem densis cum imperio. .
Gradus solitarii inferiores sunt negotiationes peracti destinatae ad celeritatem datorum augendam.
Videamus quomodo possumus varias solitudinis gradus utendi comis assequi.
Auctor hic tibi permittit ut non solum crines exclusivos ad mutare notitias, sed comas communes sic dictas sumas, quae plura stamina in parallelis capere possunt cum notitias legere desiderant quae ab aliis processibus in processu legendi mutari non debent.
Plura de methodo claudendi duo-phasi in lingua Russica et Anglica:
→
→
Difficultas est quia status datorum in negotio non potest esse inconveniens, sed haec notitia inconveniens aliis processibus conspicua est. Quomodo hoc vitandum est?
Seris utentes, fenestras visibiles creabimus in quibus status datorum congruens erit. Et omnis aditus ad tales fenestras visibilitatis constat status et seras refrenat.
Comae communes in eadem notitia reusable sunt - plures processus eas capere possunt. Hae cincinnos prohibent alios processus notitias mutandas, i.e. sunt ad fenestras formare status database consistent.
Serae exclusivae ad commutationes datarum adhibentur - una tantum processus talem seram capere potest. Clausura exclusiva capi potest:
- Quis processus si data est liber
- Solus processus qui in hac notitia seram communem habet et primus clave exclusiva postulavit.

Quo angustior fenestra visibilis, eo longiores alii processus eam exspectant, sed constantius status datorum intra se esse potest.
READ_COMMITTED - Essentia huius gradus est quod solum ex filis aliis notitias creditas videmus. Si notitia in alia transactione nondum commissa est, tunc videmus veterem eius versionem.
Hoc nobis opus est parallelizare pro exspectando cincinno emissi.
Sine strophis specialibus, versionem veterem notarum in IRIS videre non poterimus, sic cum crinibus facere debebimus.
Quocirca utendum erit comis communibus, ut notitias tantum ad momenta constantiae legantur.
Dicamus nos habere basim usoris ^ qui pecuniam ad invicem transferunt.
Momentum translationis ab homine 123 ad personam 242;
LOCK +^person(123), +^person(242)
Set ^person(123, amount) = ^person(123, amount) - amount
Set ^person(242, amount) = ^person(242, amount) + amount
LOCK -^person(123), -^person(242)Momentum petendi quantitatem pecuniae ab homine 123 ante solutionem debiti comitari debet cum clausula exclusiva (per defaltam);
LOCK +^person(123)
Write ^person(123)Et si rationem status in ratione personali ostendere debes, tum seram communi uti vel nullo modo uti potes;
LOCK +^person(123)#”S”
Write ^person(123)Attamen, si ponamus operationes datorum paene statim peragi (me admoneam te globalem structuram multo inferiorem esse quam tabulam relationem relativam), necessitatem in hoc gradu minui posse.
ITERUM READ - Hic campus solitudo concedit pro multiplicibus lectionibus notitiarum quae mutari per transactiones concurrentes possunt.
Ideoque communes seram imponere debebimus in legendis notitias quas crines mutamus et exclusiva in notitia quam mutamus.
Fortunate, CLAVIS operator permittit te singillatim enumerare omnia quae necessaria sunt cincinnis, quarum multa esse possunt, uno verbo.
LOCK +^person(123, amount)#”S”
чтение ^person(123, amount)aliae operationes (hoc tempore filorum parallelarum conantur mutare personam (123, quantitatem), sed non possunt)
LOCK +^person(123, amount)
изменение ^person(123, amount)
LOCK -^person(123, amount)
чтение ^person(123, amount)
LOCK -^person(123, amount)#”S”Quando comas enumerant per commata separatas, sumuntur continue, si hoc feceris;
LOCK +(^person(123),^person(242))tunc atomice sumuntur omnes simul.
serialize - Crines ponemus ut tandem omnes transactiones communes datae successiue exequantur. Hac de causa, maxime crines exclusivus esse debet et in minimis locis globalis ad effectum deducendi sumi.
Si loquimur de pecunia solvenda in persona globali, tunc solum Serialize pro eo gradu solitudo acceptus est, cum pecunia continue enucleate expendenda sit, alioquin pluries eandem quantitatem impendere potest.
4. Diuturnitatem
Probat dura sectione continentis usura
docker kill my-irisbase bene tolerarunt. Nullae quaestiones reperiuntur.
conclusio,
Pro globalis, InterSystems IRIS transactionis sustentationem habet. Vere atomi sunt et certissimi. Ad constantiam database in globalibus fundatae, programmator nisus et usus negotiorum requiruntur, quia non habet complexum constructum-in constructis ut claves exteras.
Plana solitudo globalium sine comis utens legitur INCOMMITDUM, et cum cincinnis uti potest, usque ad gradum Serialize conservari potest.
Rectitudo et celeritas negotiorum in globalibus plurimum pendet ab arte programmatis: quo latius comae communes legentes adhibentur, quo altior campus solitudo est, et crines arctius exclusivus, eo celerius effectus.
Source: www.habr.com
