Talofa, o lo'o ou faia ni talosaga mo le DBMS
Lagona le mana! (...aka fiafia i le faatinoga)
O mea uma o loʻo i luga o loʻo avea ai Tarantool o se faʻailoga matagofie mo le fatuina o talosaga maualuga e galulue ma faʻamaumauga. I ia talosaga, e masani ona manaʻomia le toe faʻasologa o faʻamaumauga.
E pei ona taʻua i luga, ua fausia e Tarantool faʻamaumauga faʻamaumauga. O le fa'avae o lona fa'agaioiga o le fa'asologa fa'asolosolo i luga o fa'asologa o fefa'atauaiga uma o lo'o i totonu o le master log (WAL). E masani lava o ia toe faʻafoʻi (o le a matou taʻua atili tulaga maualalo) e fa'aaogaina e fa'amautinoa ai le fa'apalepale o fa'aletonu ma/po'o le tufatufaina o le uta faitau i le va o nodes fuifui.
Alaisa. 1. Toe faia i totonu o se fuifui
O se fa'ata'ita'iga o se isi fa'ata'ita'iga o le fa'aliliuina lea o fa'amaumauga na faia i le tasi fa'amaumauga i le isi fa'amaumauga mo le fa'agaioiina/mata'ituina. I le tulaga mulimuli, o se fofo sili atu ona faigofie e mafai ona faʻaaogaina maualuga maualuga fa'asologa - fa'amaumauga fa'amaumauga i le tulaga fa'atatau pisinisi talosaga. O na. Matou te le fa'aogaina se fofo ua saunia e fausia i totonu o le DBMS, ae fa'atino le toe fa'afoliga na'o matou lava i totonu o le talosaga o lo'o matou atia'e. O lenei faiga e i ai uma itu lelei ma mea le lelei. Sei o tatou lisi mea lelei.
1. Fa'asaoina o feoaiga:
- E le mafai ona e faʻafeiloaʻi uma faʻamatalaga, ae naʻo se vaega (mo se faʻataʻitaʻiga, e mafai ona e faʻafeiloaʻi na o ni laulau, nisi o latou koluma poʻo faʻamaumauga e fetaui ma se faʻatonuga);
- E le pei o le faʻasologa maualalo, lea e faʻaauau pea i le asynchronous (faʻatinoina i le taimi nei o Tarantool - 1.10) poʻo le synchronous (ia faʻatinoina i isi lomiga mulimuli o Tarantool), e mafai ona faia le faʻasologa maualuga i sauniga (ie, le fa'aoga muamua e fa'amaopoopoina fa'amaumauga - o fa'amatalaga o fefa'ataua'iga, ona i ai lea o se taofi i le toe faia, pe a mae'a ona tupu le isi fefa'asoa'iga, ma isi);
- afai e tele taimi e suia ai se faʻamaumauga, e mafai ona e faʻafeiloaʻi naʻo lona faʻamatalaga lata mai (e le pei o le faʻasologa maualalo, lea o suiga uma e faia i le matai o le a toe taʻalo faʻasolosolo i luga o kopi).
2. E leai ni faʻafitauli i le faʻaogaina o le HTTP exchange, lea e mafai ai ona e faʻaogaina faʻamaumauga mamao.
Alaisa. 2. Toe fai i luga ole HTTP
3. O faʻamaumauga faʻamaumauga i le va o le faʻaliliuina o faʻamaumauga e le tatau ona tutusa (e le gata i lea, i le tulaga lautele, e mafai lava ona faʻaogaina DBMS eseese, gagana polokalame, faʻavae, ma isi).
Alaisa. 3. Toe faia i faiga eseese
O le itu i lalo o le, i le averesi, polokalame e sili atu ona faigata / taugata nai lo le faʻatulagaina, ma nai lo le faʻavasegaina o galuega faʻapipiʻi, e tatau ona e faʻatinoina oe lava.
Afai i lou tulaga o faʻamanuiaga o loʻo i luga e taua tele (poʻo se tulaga talafeagai), ona talafeagai lea o le faʻaogaina o le faʻasologa maualuga. Sei o tatou vaʻavaʻai i le tele o auala e faʻatino ai le faʻasologa o faʻamaumauga maualuga i le Tarantool DBMS.
Fa'aitiitiga o feoaiga
O lea la, o se tasi o faʻamanuiaga o le toe faʻaleleia maualuga o le faʻasaoina o feoaiga. Ina ia mafai ona iloa atoatoa lenei avanoa, e tatau ona faʻaitiitia le aofaʻi o faʻamatalaga faʻafeiloaʻi i taimi o fefaʻatauaiga taitasi. Ioe, e le tatau ona galo ia i tatou i le faaiuga o le sauniga, e tatau ona faʻamaopoopoina le tagata e mauaina faʻamatalaga ma le puna (a itiiti ifo mo lena vaega o faʻamatalaga o loʻo aʻafia i le toe faia).
E fa'afefea ona fa'aitiitia le aofa'i o fa'amatalaga na fa'aliliuina i le taimi o le fa'asologa maualuga? O se fofo tuusa'o e mafai ona filifili fa'amaumauga ile aso ma le taimi. Ina ia faia lenei mea, e mafai ona e faʻaogaina le aso-taimi fanua ua uma ona iai i le laulau (pe a iai). Mo se faʻataʻitaʻiga, o se pepa "poloaiga" atonu e iai se fanua "taimi e manaʻomia ai le faʻatonuga" - delivery_time
. O le faʻafitauli i lenei fofo o le tau i lenei fanua e le tatau ona i ai i le faasologa e fetaui ma le fausiaina o poloaiga. E le mafai la ona tatou manatua le maualuga o le tau o le fanua delivery_time
, auina atu i le taimi o le fefaʻatauaʻiga muamua, ma i le taimi o le isi fefaʻatauaʻiga, filifili faʻamaumauga uma e maualuga le tau o le fanua delivery_time
. O fa'amaumauga e maualalo le tau o fanua atonu na fa'aopoopoina i le va o fefa'asoa'iga delivery_time
. E le gata i lea, o le poloaiga na ono faia ni suiga, e ui i lea e leʻi afaina ai le fanua delivery_time
. I tulaga uma e lua, o suiga o le a le faʻafeiloaʻi mai le punavai i le mea e alu i ai. Ina ia foia nei faʻafitauli, matou te manaʻomia le tuʻuina atu o faʻamatalaga "faʻapipiʻi". O na. i sauniga fefaʻatauaʻiga taʻitasi o le a matou tuʻuina atu faʻamatalaga uma ma le tau o le fanua delivery_time
, e sili atu i se vaega i le taimi ua tuanaʻi (mo se faʻataʻitaʻiga, N itula mai le taimi nei). Ae ui i lea, o loʻo manino mai mo faiga tetele o lenei auala e matua faʻaaogaina ma e mafai ona faʻaitiitia ai le faʻapolopolo o taavale o loʻo tatou taumafai e leai se mea. E le gata i lea, o le laulau o loʻo faʻaliliuina atonu e leai se fanua e fesoʻotaʻi ma se aso-taimi.
O le isi fofo, sili atu ona faigata i le tulaga o le faʻatinoga, o le faʻaalia lea o le mauaina o faʻamaumauga. I lenei tulaga, i taimi o fefaʻatauaiga taʻitasi, e tuʻuina atu faʻamatalaga uma, o le lisiti e leʻi faʻamaonia e le tagata na mauaina. Ina ia faʻatinoina lenei mea, e te manaʻomia le faʻaopoopoina o se koluma Boolean i le laulau faʻapogai (mo se faʻataʻitaʻiga, is_transferred
). Afai e talia e le tagata e taliaina le mauaina o le faamaumauga, o le fanua talafeagai e ave le tau true
, a maeʻa ona le toe aofia ai le ulufale i fefaʻatauaiga. O lenei filifiliga faʻatinoga o loʻo i ai faʻaletonu nei. Muamua, mo fa'amaumauga ta'itasi e fa'aliliuina, e tatau ona faia ma lafo atu se fa'amatalaga. I se tautalaga fa'apitoa, e mafai ona fa'atusa lenei mea i le fa'aluaina o le aofa'i o fa'amatalaga e fa'aliliu ma ta'ita'ia i le fa'aluaina o le aofa'i o malaga toe fo'i. Lona lua, e leai se avanoa e tu'uina atu ai le fa'amaumauga tutusa i le tele o tagata e taliaina (o le tagata muamua na te mauaina o le a fa'amaonia le lisiti mo ia lava ma mo isi uma).
O se metotia e leai ni fa'aletonu o lo'o tu'uina atu i luga o le fa'aopoopoina lea o se koluma i le laulau fa'aliliu e siaki ai suiga i ona laina. O sea koluma e mafai ona avea ma ituaiga aso-taimi ma e tatau ona seti / faʻafouina e le talosaga i le taimi nei i taimi taʻitasi e faʻaopoopoina / suia faʻamaumauga (atomically ma le faʻaopoopoga / suiga). Mo se faʻataʻitaʻiga, taʻu le koluma update_time
. E ala i le fa'asaoina o le maualuga o le tau o lenei koluma mo fa'amaumauga ua tu'uina atu, e mafai ona tatou amataina le isi fa'asalalauga fa'atasi ma lenei tau (filifili fa'amaumauga ma le tau o le fanua. update_time
, e sili atu i le tau na teuina muamua). O le faʻafitauli i le auala mulimuli o le suiga o faʻamatalaga e mafai ona tupu i vaega. O se taunuuga o tulaga taua i le koluma update_time
atonu e le tulaga ese. O lea la, e le mafai ona fa'aogaina lenei koluma mo fa'asoa fa'asoa (itulau-itulau) fa'amaumauga. Ina ia faʻaalia itulau faʻamaumauga i le itulau, e tatau ona e faia ni auala faʻaopoopo e foliga mai e matua maualalo le lelei (mo se faʻataʻitaʻiga, toe aumai mai le database faamaumauga uma ma le tau. update_time
maualuga atu nai lo le tuʻuina atu ma faia se numera patino o faʻamaumauga, e amata mai i se faʻasalaga faʻapitoa mai le amataga o le faʻataʻitaʻiga).
E mafai ona e faʻaleleia le lelei o le faʻaliliuina o faʻamatalaga e ala i le faʻaleleia teisi o le auala muamua. Ina ia faia lenei mea, o le a matou faʻaogaina le integer type (umi integer) e pei o le koluma fanua faʻatatau mo suiga o suiga. Tatou faaigoa le koluma row_ver
. Ole tau ole fanua ole koluma lea e tatau lava ona seti/fa'afou i taimi uma e fatu/suia ai se faamaumauga. Ae i lenei tulaga, o le fanua o le a le tuʻuina atu i le aso-taimi o loʻo iai nei, ae o le tau o nisi faʻatau, faʻateleina i le tasi. O se taunuuga, o le koluma row_ver
o le a aofia ai tulaga faʻapitoa ma e mafai ona faʻaaogaina e le gata e faʻaalia ai faʻamatalaga "delta" (faʻamatalaga faʻaopoopo / suia talu mai le faaiuga o le fefaʻatauaʻiga muamua), ae faʻapea foʻi ma faigofie ma lelei le talepeina i lalo i itulau.
O le auala mulimuli na tuʻuina atu e faʻaitiitia ai le aofaʻi o faʻamatalaga na tuʻuina atu i totonu o le faʻavae o le toe faʻaleleia maualuga e foliga mai ia te aʻu o le sili ona lelei ma lautele. Se'i o tatou va'ai atili i ai.
Fa'asalalauina Fa'amatalaga Fa'aaogāina Fa'amatalaga Fa'asologa o Laila
Fa'atinoga o le 'au'aunaga/vaega matai
I le MS SQL Server, o loʻo i ai se ituaiga koluma faʻapitoa e faʻatino ai lenei faiga - rowversion
. O fa'amaumauga ta'itasi e iai se fa'atau e fa'asili i le tasi i taimi uma e fa'aopoopo/suia ai se fa'amaumauga i se laulau e iai se koluma fa'apei rowversion
. O le tau o lenei fata e otometi lava ona tu'uina atu i le fanua o lenei koluma i totonu o fa'amaumauga fa'aopoopo/suia. O le Tarantool DBMS e leai se faʻaogaina tutusa i totonu. Ae ui i lea, i Tarantool e le faigata ona faʻatinoina ma le lima. Sei o tatou vaai pe faapefea ona fai lenei mea.
Muamua, o sina faʻamatalaga: laulau i Tarantool e taʻua o avanoa, ma faʻamaumauga e taʻua o tuples. I Tarantool e mafai ona e fatuina faʻasologa. O fa'asologa e leai se mea e sili atu nai lo fa'aigoaina generators o fa'atonuga fa'atasi. O na. o le mea tonu lava lea tatou te manaomia mo o tatou faamoemoega. I lalo ifo o le a tatou fatuina se faasologa faapena.
Aʻo leʻi faia soʻo se faʻamaumauga faʻamaumauga i Tarantool, e tatau ona e faʻataʻitaʻiina le poloaiga lenei:
box.cfg{}
O se taunuuga, Tarantool o le a amata ona tusia faʻamaumauga faʻamaumauga ma faʻamaumauga o fefaʻatauaiga i le lisi o loʻo iai nei.
Tatou fai se fa'asologa row_version
:
box.schema.sequence.create('row_version',
{ if_not_exists = true })
Filifiliga if_not_exists
fa'atagaina le fa'asologa o le fatuga e fa'atino i le tele o taimi: afai o lo'o iai le mea, o le a le toe taumafai Tarantool e toe faia. O lenei filifiliga o le a faʻaaogaina i tulafono uma DDL mulimuli ane.
Tatou faia se avanoa e fai ma fa'ata'ita'iga.
box.schema.space.create('goods', {
format = {
{
name = 'id',
type = 'unsigned'
},
{
name = 'name',
type = 'string'
},
{
name = 'code',
type = 'unsigned'
},
{
name = 'row_ver',
type = 'unsigned'
}
},
if_not_exists = true
})
O iinei matou te setiina ai le igoa o le avanoa (goods
), igoa fanua ma o latou ituaiga.
Auto-incrementing fanua i Tarantool e faia foi e faʻaaoga ai faʻasologa. Se'i o tatou fa'atupuina se ki fa'aopoopo fa'a-autometi ile fanua id
:
box.schema.sequence.create('goods_id',
{ if_not_exists = true })
box.space.goods:create_index('primary', {
parts = { 'id' },
sequence = 'goods_id',
unique = true,
type = 'HASH',
if_not_exists = true
})
E lagolagoina e Tarantool le tele o ituaiga o faasino igoa. O fa'ailoga e masani ona fa'aaogaina o la'au ma HASH ituaiga, lea e fa'avae i luga o fausaga e fetaui ma le igoa. TREE o le fa'ailoga sili ona fa'aogaina. E fa'atagaina oe e toe aumai fa'amaumauga i se faiga fa'atulagaina. Ae mo filifiliga tutusa, HASH e sili atu ona talafeagai. E tusa ai, e fautuaina e faʻaaoga HASH mo le ki autu (o le mea lea na matou faia).
E fa'aoga le koluma row_ver
e faʻafeiloaʻi faʻamatalaga ua suia, e tatau ona e fusifusia faʻasologa faʻasologa i fanua o lenei koluma row_ver
. Ae e le pei o le ki autu, o le koluma fanua tau row_ver
e tatau ona faateleina i le tasi e le gata pe a faaopoopo faamaumauga fou, ae faapea foi pe a suia faamaumauga oi ai. E mafai ona e faʻaogaina faʻailoga mo lenei mea. Tarantool e lua ituaiga o avanoa avanoa: before_replace
и on_replace
. E fa'aoso fa'aoso i so'o se taimi e suia ai fa'amaumauga i le avanoa (mo tuple ta'itasi e a'afia i suiga, e fa'alauiloa ai se galuega fa'aoso). E le pei on_replace
, before_replace
-triggers e mafai ai ona e suia faʻamatalaga o le tuple lea e faʻatino ai le faʻaoso. E tusa ai, o le ituaiga mulimuli o faʻaoso e fetaui ma i tatou.
box.space.goods:before_replace(function(old, new)
return box.tuple.new({new[1], new[2], new[3],
box.sequence.row_version:next()})
end)
O le fa'aoso lea e sui ai le tau o le fanua row_ver
teuina tuple i le isi tau o le faasologa row_version
.
Ina ia mafai ona aveese faʻamatalaga mai le vateatea goods
i koluma row_ver
, se'i tatou faia se fa'ailoga:
box.space.goods:create_index('row_ver', {
parts = { 'row_ver' },
unique = true,
type = 'TREE',
if_not_exists = true
})
Ituaiga faasino igoa - laau (TREE
), ona matou te manaʻomia le suʻeina o faʻamatalaga i luga o le faasologa o tau i le koluma row_ver
.
Tatou fa'aopoopo nisi fa'amatalaga ile avanoa:
box.space.goods:insert{nil, 'pen', 123}
box.space.goods:insert{nil, 'pencil', 321}
box.space.goods:insert{nil, 'brush', 100}
box.space.goods:insert{nil, 'watercolour', 456}
box.space.goods:insert{nil, 'album', 101}
box.space.goods:insert{nil, 'notebook', 800}
box.space.goods:insert{nil, 'rubber', 531}
box.space.goods:insert{nil, 'ruler', 135}
Aua O le fanua muamua o le fa'aopoopo fa'a-autometi; matou te pasi e leai. Tarantool o le a otometi lava ona sui le isi tau. E faapena foi, e pei o le tau o fanua koluma row_ver
e mafai ona e pasi nil - pe le faʻamaonia le tau, aua o lenei koluma e nofo i le tulaga mulimuli i le avanoa.
Se'i o tatou siaki le taunu'uga fa'aofi:
tarantool> box.space.goods:select()
---
- - [1, 'pen', 123, 1]
- [2, 'pencil', 321, 2]
- [3, 'brush', 100, 3]
- [4, 'watercolour', 456, 4]
- [5, 'album', 101, 5]
- [6, 'notebook', 800, 6]
- [7, 'rubber', 531, 7]
- [8, 'ruler', 135, 8]
...
E pei ona e vaʻai, o le muamua ma le fanua mulimuli e faʻatumu otometi. O le taimi nei o le a faigofie ona tusia se galuega mo le faʻapipiʻiina o itulau i lea itulau o suiga avanoa goods
:
local page_size = 5
local function get_goods(row_ver)
local index = box.space.goods.index.row_ver
local goods = {}
local counter = 0
for _, tuple in index:pairs(row_ver, {
iterator = 'GT' }) do
local obj = tuple:tomap({ names_only = true })
table.insert(goods, obj)
counter = counter + 1
if counter >= page_size then
break
end
end
return goods
end
O le galuega e ave e fai ma parakalafa le tau row_ver
, e amata mai i le mea e manaʻomia ai le laʻuina o suiga, ma toe faʻafoʻi se vaega o faʻamatalaga ua suia.
O faʻataʻitaʻiga faʻamatalaga i Tarantool e faia e ala i faʻamatalaga. Galuega get_goods
fa'aaogaina se fa'amatalaga e ala ile fa'asinomaga row_ver
e maua ai fa'amaumauga ua suia. O le ituaiga faʻamatalaga o le GT (Greater Than, greater than). O lona uiga o le a faʻasolosolo faʻasolosolo e le tagata suʻesuʻe ia faʻamaufaʻailoga e amata mai le ki ua pasia (taua fanua row_ver
).
E toe fa'afo'i tuple e le tagata fa'atonu. Ina ia mafai mulimuli ane ona faʻafeiloaʻi faʻamatalaga e ala i le HTTP, e manaʻomia le faʻaliliuina o tuples i se fausaga talafeagai mo le faʻasologa mulimuli ane. O le faʻataʻitaʻiga e faʻaaogaina le galuega masani mo lenei tomap
. Nai lo le faʻaaogaina tomap
e mafai ona e tusia lau lava galuega. Mo se faʻataʻitaʻiga, atonu tatou te mananaʻo e toe faʻaigoaina se fanua name
, aua le pasia le fanua code
ma faaopoopo se fanua comment
:
local function unflatten_goods(tuple)
local obj = {}
obj.id = tuple.id
obj.goods_name = tuple.name
obj.comment = 'some comment'
obj.row_ver = tuple.row_ver
return obj
end
Ole tele ole itulau ole fa'amaumauga o galuega (numera o fa'amaumauga i le vaega e tasi) e fa'atatau i le fesuiaiga page_size
. I le faataitaiga o le tau page_size
o le 5. I se polokalama moni, o le tele o itulau e masani ona sili atu ona taua. E fa'alagolago i le tele o le tuple avanoa. Ole tele ole itulau ole lapo'a e mafai ona fa'amautu fa'apitoa ile fuaina ole taimi ole fa'aliliuina o fa'amatalaga. O le tele o le itulau, o le laʻititi foi lea o le numera o malaga i le va o le auina atu ma le mauaina. O le auala lea e mafai ai ona fa'aitiitia le taimi atoa mo le la'uina o suiga. Ae peita'i, afai e telē tele le lapo'a o le itulau, o le a tatou fa'aalu umi tele i luga o le 'au'aunaga fa'asologa o le fa'ata'ita'iga. O le i'uga, e ono fa'atuai i le faiga o isi talosaga e o'o mai i le 'au'aunaga. Parameter page_size
e mafai ona utaina mai le faila faatulagaina. Mo avanoa faʻasalalau taʻitasi, e mafai ona e setiina lona lava taua. Ae peita'i, mo le tele o avanoa o le tau fa'aletonu (fa'ata'ita'iga, 100) e ono fetaui.
Tatou faatino le galuega get_goods
:
tarantool> get_goods(0)
---
- - row_ver: 1
code: 123
name: pen
id: 1
- row_ver: 2
code: 321
name: pencil
id: 2
- row_ver: 3
code: 100
name: brush
id: 3
- row_ver: 4
code: 456
name: watercolour
id: 4
- row_ver: 5
code: 101
name: album
id: 5
...
Tatou ave le tau o le fanua row_ver
mai le laina mulimuli ma toe valaau le galuega:
tarantool> get_goods(5)
---
- - row_ver: 6
code: 800
name: notebook
id: 6
- row_ver: 7
code: 531
name: rubber
id: 7
- row_ver: 8
code: 135
name: ruler
id: 8
...
Faapena foi:
tarantool> get_goods(8)
---
- []
...
E pei ona e vaʻai, pe a faʻaaogaina i lenei auala, o le galuega e toe faʻafoʻi uma faʻamaumauga avanoa itulau i itulau goods
. O le itulau mulimuli e sosoo ai ma se filifiliga avanoa.
Tatou fai suiga ile avanoa:
box.space.goods:update(4, {{'=', 6, 'copybook'}})
box.space.goods:insert{nil, 'clip', 234}
box.space.goods:insert{nil, 'folder', 432}
Ua matou suia le tau o le fanua name
mo se tusi e tasi ma faaopoopo i ai ni tala fou se lua.
Se'i o tatou toe fai le valaau galuega mulimuli:
tarantool> get_goods(8)
---
- - row_ver: 9
code: 800
name: copybook
id: 6
- row_ver: 10
code: 234
name: clip
id: 9
- row_ver: 11
code: 432
name: folder
id: 10
...
Na toe fa'afo'i e le galuega le fa'amaumauga ua suia ma fa'aopoopo. O le galuega la get_goods
e mafai ai ona e mauaina faʻamatalaga ua suia talu mai lona valaʻau mulimuli, o le faʻavae lea o le auala toe faʻaaogaina o loʻo iloiloina.
Matou te tuʻuina atu le tuʻuina atu o taunuʻuga e ala i le HTTP i le tulaga o le JSON i fafo atu o le lautele o lenei tusiga. E mafai ona e faitau e uiga i lenei mea iinei:
Fa'atinoga ole vaega ole kalani/pologa
Se'i o tatou va'ava'ai pe fa'apefea le fa'atinoga a le itu e mauaina. Sei o tatou faia se avanoa i le itu e maua ai e teu ai faʻamaumauga na sii mai:
box.schema.space.create('goods', {
format = {
{
name = 'id',
type = 'unsigned'
},
{
name = 'name',
type = 'string'
},
{
name = 'code',
type = 'unsigned'
}
},
if_not_exists = true
})
box.space.goods:create_index('primary', {
parts = { 'id' },
sequence = 'goods_id',
unique = true,
type = 'HASH',
if_not_exists = true
})
O le fausaga o le avanoa e pei o le fausaga o le avanoa i le puna. Ae talu ai o le a matou le pasia faʻamatalaga maua i se isi mea, o le koluma row_ver
e le o iai i le avanoa o le tagata e mauaina. I le fanua id
o le a fa'amaumau fa'amatalaga fa'apogai. O le mea lea, i luga o le itu e taliaina e leai se mea e manaʻomia e fai ai le auto-incrementing.
E le gata i lea, matou te manaʻomia se avanoa e faʻasaoina ai tau row_ver
:
box.schema.space.create('row_ver', {
format = {
{
name = 'space_name',
type = 'string'
},
{
name = 'value',
type = 'string'
}
},
if_not_exists = true
})
box.space.row_ver:create_index('primary', {
parts = { 'space_name' },
unique = true,
type = 'HASH',
if_not_exists = true
})
Mo avanoa uma e utaina (fanua space_name
) matou te faʻasaoina le tau faʻatau mulimuli iinei row_ver
(fanua value
). O le koluma e fai ma ki autu space_name
.
Se'i fai se galuega e uta ai fa'amatalaga avanoa goods
ala HTTP. Ina ia faia lenei mea, matou te manaʻomia se faletusi e faʻaaogaina se tagata faʻatau HTTP. O le laina o loʻo i lalo e utaina le faletusi ma faʻaalia le tagata HTTP client:
local http_client = require('http.client').new()
Matou te manaʻomia foi se faletusi mo le json deserialization:
local json = require('json')
Ua lava lea e fatu ai se galuega e utaina ai faamatalaga:
local function load_data(url, row_ver)
local url = ('%s?rowVer=%s'):format(url,
tostring(row_ver))
local body = nil
local data = http_client:request('GET', url, body, {
keepalive_idle = 1,
keepalive_interval = 1
})
return json.decode(data.body)
end
O le galuega e faʻatino se talosaga HTTP i le tuatusi url ma auina atu row_ver
e fai ma fa'ailoga ma toe fa'afo'i mai le fa'ai'uga fa'aleaogaina o le talosaga.
Ole galuega mo le fa'asaoina o fa'amatalaga na maua e pei o lenei:
local function save_goods(goods)
local n = #goods
box.atomic(function()
for i = 1, n do
local obj = goods[i]
box.space.goods:put(
obj.id, obj.name, obj.code)
end
end)
end
Ta'amilosaga o le fa'asaoina o fa'amaumauga i le vateatea goods
tuʻu i se fefaʻatauaiga (o loʻo faʻaaogaina le galuega mo lenei box.atomic
) e faʻaitiitia ai le numera o gaioiga faʻapipiʻi.
Mulimuli ane, o le galuega fa'akomepiuta avanoa fa'apitonu'u goods
faʻatasi ai ma se puna e mafai ona e faʻatinoina e pei o lenei:
local function sync_goods()
local tuple = box.space.row_ver:get('goods')
local row_ver = tuple and tuple.value or 0
—— set your url here:
local url = 'http://127.0.0.1:81/test/goods/list'
while true do
local goods = load_goods(url, row_ver)
local count = #goods
if count == 0 then
return
end
save_goods(goods)
row_ver = goods[count].rowVer
box.space.row_ver:put({'goods', row_ver})
end
end
Muamua matou te faitau i le tau na faʻasaoina muamua row_ver
mo avanoa goods
. Afai e misi (le sauniga fefaʻatauaʻiga muamua), ona matou faʻaaogaina lea row_ver
o. O le isi i le taamilosaga matou te faia ai se itulau-i-itulau download o faʻamatalaga suia mai le puna i le url faʻamaonia. I faʻasalalauga taʻitasi, matou te faʻasaoina faʻamatalaga maua i le avanoa faʻapitonuʻu talafeagai ma faʻafouina le tau row_ver
(i le vateatea row_ver
ma i le fesuiaiga row_ver
) - ave le tau row_ver
mai le laina mulimuli o faʻamatalaga faʻapipiʻiina.
Ina ia puipuia mai faʻalavelave faʻafuaseʻi (i le tulaga o se mea sese i le polokalama), o le matasele while
e mafai ona suia e for
:
for _ = 1, max_req do ...
O se taunuuga o le faʻatinoina o le galuega sync_goods
avanoa goods
o le a maua e le tagata e taliaina lomiga aupito lata mai o fa'amaumauga avanoa uma goods
i le puna.
E manino lava, e le mafai ona faʻasalalau faʻamaumauga i lenei auala. Afai e iai se mana'oga faapena, e mafai ona e fa'aogaina se fa'ailoga tape. Faaopoopo i avanoa goods
fanua boolean is_deleted
ma nai lo le tapeina faaletino o se faamaumauga, matou te faʻaaogaina le tapeina talafeagai - matou te setiina le tau o le fanua is_deleted
i le uiga true
. O nisi taimi nai lo se fanua boolean is_deleted
e sili atu ona faigofie le faʻaogaina o le fanua deleted
, lea e teu ai le aso-taimi o le tapeina talafeagai o le faamaumauga. A maeʻa ona faʻatinoina se tapeina talafeagai, o le faʻamaumauga ua faailogaina mo le tapeina o le a faʻafeiloaʻi mai le puna i le mea e alu i ai (e tusa ai ma le faʻamatalaga o loʻo talanoaina i luga).
Faʻasologa row_ver
e mafai ona fa'aoga e fa'asalalauina fa'amatalaga mai isi avanoa: e leai se mana'oga e fai se fa'asologa ese mo avanoa fa'asalalau ta'itasi.
Na matou vaʻavaʻai i se auala lelei o le faʻasologa o faʻamaumauga maualuga i talosaga e faʻaaoga ai le Tarantool DBMS.
sailiiliga
- Tarantool DBMS o se mea matagofie, faʻamaonia oloa mo le fatuina o talosaga maualuga.
- O le fa'asologa o fa'amaumauga maualuga e iai le tele o fa'amanuiaga nai lo le fa'asologa o tulaga maualalo.
- O le auala maualuga o le toe faia o faʻamatalaga o loʻo talanoaina i totonu o le tusiga e mafai ai ona e faʻaitiitia le aofaʻi o faʻamatalaga faʻafeiloaʻi e ala i le faʻaliliuina naʻo na faʻamaumauga ua suia talu mai le taimi o fefaʻatauaiga mulimuli.
puna: www.habr.com