Moni, ndikupanga mapulogalamu a DBMS
Imvani mphamvu! (β¦aka enjoy the performance)
Zonse zomwe zili pamwambazi zimapangitsa Tarantool kukhala nsanja yokongola yopangira mapulogalamu olemetsa kwambiri omwe amagwira ntchito ndi nkhokwe. M'mapulogalamu otere, nthawi zambiri pamafunika kubwereza deta.
Monga tafotokozera pamwambapa, Tarantool ili ndi kubwereza kwa data. Mfundo ya ntchito yake ndikuchita motsatizana pazochitika zonse zomwe zili mu chipika chachikulu (WAL). Nthawi zambiri kubwereza kotere (tidzazitchanso otsika) imagwiritsidwa ntchito kuwonetsetsa kulolerana kwa zolakwika ndi/kapena kugawa zowerengera pakati pa ma cluster node.
Mpunga. 1. Kufananiza mkati mwa tsango
Chitsanzo cha zochitika zina zingakhale kusamutsa deta yomwe idapangidwa mu database imodzi kupita ku nkhokwe ina kuti ikonzedwe/kuwunika. Pamapeto pake, njira yabwino kwambiri ingakhale yogwiritsira ntchito mkulu mlingo kubwereza - kubwereza kwa data pamlingo wamalingaliro abizinesi. Iwo. Sitigwiritsa ntchito njira yopangidwa kale yomangidwa mu DBMS, koma timagwiritsa ntchito kubwereza tokha mkati mwa pulogalamu yomwe tikupanga. Njira imeneyi ili ndi ubwino ndi kuipa kwake. Tiyeni titchule ubwino wake.
1. Kusunga ndalama zamagalimoto:
- Simungathe kusamutsa deta yonse, koma gawo lokhalo (mwachitsanzo, mutha kusamutsa matebulo ena, mizati yawo kapena zolemba zomwe zimakwaniritsa muyeso wina);
- Mosiyana ndi kubwereza kwapang'ono, komwe kumachitidwa mosalekeza mu asynchronous (yomwe ikugwiritsidwa ntchito mu mtundu waposachedwa wa Tarantool - 1.10) kapena synchronous (kuti igwiritsidwe ntchito m'matembenuzidwe otsatira a Tarantool), kubwereza kwapamwamba kumatha kuchitika magawo (ie, the ntchito imagwirizanitsa deta poyamba - deta ya gawo la kusinthana, ndiye pamakhala kupuma mobwerezabwereza, pambuyo pake gawo lotsatira losinthana likuchitika, ndi zina zotero);
- ngati mbiri yasintha kangapo, mutha kusamutsa mtundu wake waposachedwa (mosiyana ndi kubwereza kwapang'onopang'ono, momwe zosintha zonse zomwe zasinthidwa mbuye zidzaseweredwa motsatizana pazofananira).
2. Palibe zovuta pakukhazikitsa kusinthana kwa HTTP, komwe kumakupatsani mwayi wolumikizana ndi ma database akutali.
Mpunga. 2. Kubwereza pa HTTP
3. Zomwe zimasungidwa pakati pa zomwe data zimasamutsidwa siziyenera kukhala zofanana (kuphatikiza apo, nthawi zambiri, ndizotheka kugwiritsa ntchito ma DBMS osiyanasiyana, zilankhulo zamapulogalamu, nsanja, ndi zina).
Mpunga. 3. Kubwerezabwereza mu machitidwe osiyanasiyana
Choyipa ndichakuti, pafupifupi, mapulogalamu ndi ovuta / okwera mtengo kuposa kasinthidwe, ndipo m'malo mosintha magwiridwe antchito, muyenera kukhazikitsa zanu.
Ngati m'malo mwanu zabwino zomwe zili pamwambapa ndizofunikira (kapena ndizofunikira), ndiye kuti ndizomveka kugwiritsa ntchito kubwereza kwapamwamba. Tiyeni tiwone njira zingapo zogwiritsira ntchito kubwereza kwapamwamba kwa data mu Tarantool DBMS.
Kuchepetsa magalimoto
Chifukwa chake, chimodzi mwazabwino za kubwereza kwapamwamba ndikusunga ndalama zamagalimoto. Kuti ubwino umenewu ukwaniritsidwe mokwanira, m'pofunika kuchepetsa kuchuluka kwa deta yomwe imasamutsidwa panthawi iliyonse yosinthana. Zachidziwikire, tisaiwale kuti kumapeto kwa gawoli, wolandila data ayenera kulumikizidwa ndi gwero (osachepera gawo la data lomwe likukhudzidwa ndi kubwereza).
Kodi mungachepetse bwanji kuchuluka kwa data yomwe imasamutsidwa panthawi yobwerezeka kwambiri? Yankho lolunjika lingakhale kusankha deta ndi tsiku ndi nthawi. Kuti muchite izi, mutha kugwiritsa ntchito gawo la nthawi yomwe ilipo kale patebulo (ngati ilipo). Mwachitsanzo, chikalata cha "oda" chikhoza kukhala ndi gawo la "nthawi yoyitanitsa" - delivery_time
. Vuto ndi yankho ili ndikuti mfundo zomwe zili m'gawoli siziyenera kukhala motsatira zomwe zimagwirizana ndi kupanga madongosolo. Chifukwa chake sitingakumbukire kuchuluka kwamunda delivery_time
, yofalitsidwa panthawi yosinthana yapitayi, ndipo panthawi yosinthana yotsatira sankhani zolemba zonse zomwe zili ndi mtengo wapamwamba delivery_time
. Zolemba zokhala ndi mtengo wotsika wagawo zitha kuwonjezeredwa pakati pa magawo osinthanitsa delivery_time
. Komanso, dongosololi likadakhala likusintha, zomwe sizinakhudze gawolo delivery_time
. Muzochitika zonsezi, zosintha sizingasinthidwe kuchokera kugwero kupita komwe mukupita. Kuthetsa mavutowa, tiyenera kusamutsa deta "kudutsana". Iwo. mu gawo lililonse lakusinthana tidzasamutsa deta yonse ndi mtengo wamunda delivery_time
, kupitirira nthawi ina m'mbuyomu (mwachitsanzo, ma N maola kuchokera pakali pano). Komabe, nβzachidziΕ΅ikire kuti pamakina akuluakulu njira imeneyi ndi yosafunika kwambiri ndipo ingachepetse ndalama zimene tikuyesetsa kuti zisakhale zachabechabe. Kuphatikiza apo, tebulo lomwe likusamutsidwa silingakhale ndi gawo logwirizana ndi nthawi.
Yankho lina, lovuta kwambiri pakukhazikitsa, ndikuvomereza kulandira deta. Pankhaniyi, panthawi iliyonse yosinthana, deta yonse imafalitsidwa, kulandila komwe sikunatsimikizidwe ndi wolandira. Kuti mugwiritse ntchito izi, muyenera kuwonjezera ndime ya Boolean pagawo loyambira (mwachitsanzo, is_transferred
). Ngati wolandirayo akuvomereza kuti walandira mbiriyo, gawo lofananira limatenga mtengo wake true
, pambuyo pake kulowa sikulowanso mu kusinthanitsa. Njira yokhazikitsa iyi ili ndi zovuta zotsatirazi. Choyamba, pa mbiri iliyonse yomwe yasamutsidwa, chivomerezo chiyenera kupangidwa ndikutumizidwa. Kunena mwachidule, izi zitha kufanana ndi kuwirikiza kawiri kuchuluka kwa data yomwe yatumizidwa ndikupangitsa kuchulukitsa maulendo obwereza. Kachiwiri, palibe kuthekera kotumiza zolemba zomwezo kwa olandila angapo (wolandila woyamba kulandira adzatsimikizira kuti ali ndi risiti yekha ndi ena onse).
Njira yomwe ilibe zovuta zomwe zaperekedwa pamwambapa ndikuwonjezera gawo patebulo losamutsidwa kuti muwone kusintha kwa mizere yake. Mzere woterewu ukhoza kukhala wamtundu wanthawi ndipo uyenera kukhazikitsidwa / kusinthidwa ndi pulogalamuyo mpaka pano nthawi iliyonse yomwe ma rekodi akuwonjezeredwa / kusinthidwa (atomiki ndi kuwonjezera / kusintha). Mwachitsanzo, tiyeni tiyitane ndime update_time
. Posunga kuchuluka kwa gawoli pazambiri zomwe zasamutsidwa, titha kuyambitsa gawo lotsatira losinthana ndi mtengowu (sankhani zolemba ndi mtengo wamunda. update_time
, kupitirira mtengo wosungidwa kale). Vuto ndi njira yotsirizayi ndikuti kusintha kwa deta kumatha kuchitika m'magulu. Chifukwa cha zomwe zili m'mundamo update_time
sizingakhale zapadera. Chifukwa chake, gawoli silingagwiritsidwe ntchito potulutsa deta (tsamba ndi tsamba). Kuti muwonetse deta tsamba ndi tsamba, muyenera kupanga njira zowonjezera zomwe zingakhale zotsika kwambiri (mwachitsanzo, kuchotsa kuchokera ku database zolemba zonse ndi mtengo wake. update_time
apamwamba kuposa omwe apatsidwa ndikupanga zolemba zingapo, kuyambira pakusintha kwina koyambira koyambira).
Mutha kusintha luso la kusamutsa deta posintha pang'ono njira yapitayi. Kuti tichite izi, tidzagwiritsa ntchito mtundu wamtundu (intaneti yayitali) ngati magawo agawo pakutsata kusintha. Tiyeni titchule gawoli row_ver
. Mtengo wa gawoli uyenera kukhazikitsidwa / kusinthidwa nthawi iliyonse pomwe mbiri ikupangidwa/kusinthidwa. Koma pamenepa, munda sudzapatsidwa nthawi yomwe ilipo, koma mtengo wa kauntala ina, yowonjezereka ndi imodzi. Chifukwa chake, gawoli row_ver
idzakhala ndi makhalidwe apadera ndipo ingagwiritsidwe ntchito osati kusonyeza "delta" deta (deta yowonjezeredwa / yosinthidwa kuyambira kumapeto kwa gawo lapitalo la kusinthana), komanso kugawanitsa mwatsatanetsatane m'masamba.
Njira yotsiriza yochepetsera kuchuluka kwa deta yomwe imasamutsidwa mkati mwa ndondomeko ya kubwereza kwapamwamba ikuwoneka kwa ine kukhala yabwino kwambiri komanso yapadziko lonse. Tiyeni tione mwatsatanetsatane.
Kudutsa Data Pogwiritsa Ntchito Row Version Counter
Kukhazikitsa kwa seva / gawo la master
Mu MS SQL Server, pali mtundu wapadera wa magawo kuti mugwiritse ntchito njirayi - rowversion
. Nawonso database iliyonse ili ndi kauntala yomwe imachulukitsa ndi imodzi nthawi iliyonse mbiri ikawonjezeredwa / kusinthidwa patebulo lomwe lili ndi gawo ngati rowversion
. Mtengo wa kauntalayi umangoperekedwa kugawo lazagawoli mu mbiri yowonjezeredwa/yosinthidwa. Tarantool DBMS ilibe makina omangidwira ofanana. Komabe, mu Tarantool sikovuta kukhazikitsa pamanja. Tiyeni tiwone momwe izi zimachitikira.
Choyamba, mawu ang'onoang'ono: matebulo ku Tarantool amatchedwa mipata, ndipo zolemba zimatchedwa tuples. Mu Tarantool mutha kupanga zotsatizana. Zotsatizana sizili kanthu koma majenereta otchulidwa amagulu ophatikizidwa. Iwo. Izi ndi zomwe timafunikira pazolinga zathu. Pansipa tidzapanga ndondomeko yotere.
Musanayambe ntchito iliyonse ya database ku Tarantool, muyenera kuyendetsa lamulo ili:
box.cfg{}
Zotsatira zake, Tarantool iyamba kulemba zithunzithunzi za database ndi zipika zamalonda ku bukhu lapano.
Tiyeni tipange ndandanda row_version
:
box.schema.sequence.create('row_version',
{ if_not_exists = true })
Yankho if_not_exists
imalola kuti zolemba za chilengedwe zizichitika kangapo: ngati chinthucho chilipo, Tarantool sidzayesa kulenganso. Izi zidzagwiritsidwa ntchito m'malamulo onse a DDL.
Tiyeni tipange danga monga chitsanzo.
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
})
Apa tikuyika dzina la danga (goods
), mayina a minda ndi mitundu yawo.
Magawo owonjezera okha ku Tarantool amapangidwanso pogwiritsa ntchito motsatana. Tiyeni tipange makiyi oyambira owonjezera okha ndi gawo 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
})
Tarantool imathandizira mitundu ingapo yama index. Zolozera zomwe zimagwiritsidwa ntchito kwambiri ndi mitundu ya TREE ndi HASH, yomwe imachokera pamapangidwe ofanana ndi dzinalo. TREE ndiye mtundu wamtundu wosinthasintha kwambiri. Kumakuthandizani kuti akatenge deta mwadongosolo. Koma pakusankha kofanana, HASH ndiyoyenera. Chifukwa chake, ndikofunikira kugwiritsa ntchito HASH pa kiyi yoyamba (zomwe ndi zomwe tidachita).
Kuti mugwiritse ntchito column row_ver
kusamutsa deta yosinthidwa, muyenera kumangirira zikhalidwe zamagawo agawoli row_ver
. Koma mosiyana ndi kiyi yoyamba, mtengo wagawo lazanja row_ver
ziyenera kuwonjezeka ndi imodzi osati powonjezera zolemba zatsopano, komanso posintha zomwe zilipo kale. Mutha kugwiritsa ntchito zoyambitsa izi. Tarantool ili ndi mitundu iwiri ya zoyambitsa danga: before_replace
ΠΈ on_replace
. Zoyambitsa zimachotsedwa nthawi iliyonse yomwe deta yomwe ili mumlengalenga imasintha (pa tuple iliyonse yomwe imakhudzidwa ndi kusintha, ntchito yoyambitsa imayambitsidwa). Mosiyana on_replace
, before_replace
-zoyambitsa zimakulolani kuti musinthe deta ya tuple yomwe choyambitsacho chimapangidwira. Chifukwa chake, zoyambitsa zomaliza zimatikwanira.
box.space.goods:before_replace(function(old, new)
return box.tuple.new({new[1], new[2], new[3],
box.sequence.row_version:next()})
end)
Choyambitsa chotsatirachi chimalowa m'malo mwa mtengo wamunda row_ver
tuple yosungidwa ku mtengo wina wotsatira row_version
.
Kuti athe kuchotsa deta kuchokera mlengalenga goods
pa ndime row_ver
, tiyeni tipange index:
box.space.goods:create_index('row_ver', {
parts = { 'row_ver' },
unique = true,
type = 'TREE',
if_not_exists = true
})
Mtundu wa index - mtengo (TREE
), chifukwa tidzafunika kutulutsa zomwe zili mumndandanda wokwera wamtengowo row_ver
.
Tiyeni tiwonjeze data ku danga:
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}
Chifukwa Munda woyamba ndi wowonjezera-owonjezera; timadutsa nil m'malo mwake. Tarantool imangolowetsa mtengo wotsatira. Mofananamo, monga mtengo wa minda ya mzati row_ver
mutha kudutsa popanda - kapena osatchula mtengo konse, chifukwa ndime iyi ili pomaliza mu danga.
Tiyeni tiwone zotsatira zoyika:
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]
...
Monga mukuonera, minda yoyamba ndi yomaliza imadzazidwa ndi basi. Tsopano kudzakhala kosavuta kulemba ntchito yokweza tsamba ndi tsamba la kusintha kwa malo 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
Ntchitoyi imatenga ngati parameter mtengo row_ver
, kuyambira pomwe ndikofunikira kutsitsa zosintha, ndikubwezeretsa gawo lazosinthidwa.
Zitsanzo za data mu Tarantool zimachitika kudzera m'ma index. Ntchito get_goods
amagwiritsa ntchito iterator ndi index row_ver
kulandira deta yosinthidwa. Mtundu wa Iterator ndi GT (Wamkulu Kuposa, wamkulu kuposa). Izi zikutanthauza kuti wobwereza adzadutsa motsatizana ziwerengero kuyambira pa kiyi yodutsa (mtengo wamunda. row_ver
).
Wobwereza amabwezera ma tuples. Kuti kenako muthe kusamutsa deta kudzera pa HTTP, ndikofunikira kusintha ma tuples kukhala mawonekedwe osavuta kutsatiridwa motsatira. Chitsanzo chimagwiritsa ntchito ntchito yokhazikika pa izi tomap
. M'malo mogwiritsa ntchito tomap
mukhoza kulemba ntchito yanu. Mwachitsanzo, tingafune kutchulanso gawo name
, osadutsa munda code
ndi kuwonjezera munda 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
Kukula kwa tsamba lazotulutsa (chiwerengero cha zolemba mu gawo limodzi) kumatsimikiziridwa ndi kusintha page_size
. Mu chitsanzo mtengo page_size
ndi 5. Mu pulogalamu yeniyeni, kukula kwa tsamba kumakhala kofunikira kwambiri. Zimatengera kukula kwa danga la tuple. Kukula koyenera kwa tsamba kungadziwike mwachidziwitso poyesa nthawi yosamutsa deta. Kukula kwa tsamba, kumachepetsa kuchuluka kwa maulendo ozungulira pakati pa mbali zotumiza ndi zolandira. Mwanjira iyi mutha kuchepetsa nthawi yonse yotsitsa zosintha. Komabe, ngati kukula kwa tsamba ndi kwakukulu kwambiri, tikhala nthawi yayitali kwambiri pa seva ndikuyika zitsanzo. Zotsatira zake, pangakhale kuchedwa pakukonza zopempha zina zomwe zikubwera ku seva. Parameter page_size
ikhoza kutsitsidwa kuchokera ku fayilo yosinthika. Pamalo aliwonse opatsirana, mutha kukhazikitsa mtengo wake. Komabe, m'malo ambiri mtengo wokhazikika (mwachitsanzo, 100) ungakhale woyenera.
Tiyeni tigwiritse ntchito 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
...
Tiyeni titenge mtengo wamunda row_ver
kuchokera pamzere womaliza ndikuyimbiranso ntchitoyi:
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
...
Kenanso:
tarantool> get_goods(8)
---
- []
...
Monga mukuwonera, ikagwiritsidwa ntchito motere, ntchitoyi imabwezeretsa zolemba zonse za danga tsamba ndi tsamba goods
. Tsamba lomaliza likutsatiridwa ndi kusankha kopanda kanthu.
Tiyeni tisinthe malo:
box.space.goods:update(4, {{'=', 6, 'copybook'}})
box.space.goods:insert{nil, 'clip', 234}
box.space.goods:insert{nil, 'folder', 432}
Tasintha mtengo wamunda name
pakulowa kumodzi ndikuwonjezera zolemba ziwiri zatsopano.
Tiyeni tibwereze kuyimba komaliza:
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
...
Ntchitoyo idabweza zolemba zosinthidwa ndikuwonjezera. Choncho ntchito get_goods
amakulolani kuti mulandire deta yomwe yasintha kuyambira kuyitana kwake komaliza, komwe kuli maziko a njira yobwerezabwereza yomwe ikuganiziridwa.
Tisiya kutulutsa zotsatira kudzera pa HTTP mu mawonekedwe a JSON kunja kwa nkhaniyi. Mutha kuwerenga za izi apa:
Kukhazikitsa gawo la kasitomala / kapolo
Tiyeni tiwone momwe kukhazikitsidwa kwa mbali yolandirira kumawonekera. Tiyeni tipange malo kumbali yolandirira kuti tisunge zomwe zidatsitsidwa:
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
})
Mapangidwe a danga amafanana ndi mawonekedwe a danga mu gwero. Koma popeza sitidzapereka zomwe talandira kwina kulikonse, gawoli row_ver
sichili m'malo a wolandira. M'munda id
zozindikiritsa zoyambira zidzajambulidwa. Chifukwa chake, pa mbali yolandila palibe chifukwa chopangira auto-incrementing.
Kuphatikiza apo, timafunikira malo kuti tisunge zikhalidwe 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
})
Pamalo aliwonse odzaza (munda space_name
) tidzasunga mtengo womaliza wokwezedwa apa row_ver
(munda value
). Gawoli limakhala ngati kiyi yoyamba space_name
.
Tiyeni tipange ntchito kuti tiyike data ya danga goods
kudzera pa HTTP. Kuti tichite izi, tikufuna laibulale yomwe imagwiritsa ntchito kasitomala wa HTTP. Mzere wotsatirawu umakweza laibulale ndikuyambitsa kasitomala wa HTTP:
local http_client = require('http.client').new()
Tikufunanso laibulale ya json deerialization:
local json = require('json')
Izi ndizokwanira kupanga ntchito yotsitsa deta:
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
Ntchitoyi ikuchita pempho la HTTP ku adilesi ya url ndikutumiza row_ver
monga parameter ndi kubweza zotsatira zosafunika za pempho.
Ntchito yosunga zomwe mwalandira zikuwoneka motere:
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
Mkombero wosunga deta kumlengalenga goods
kuyikidwa mu malonda (ntchitoyo imagwiritsidwa ntchito pa izi box.atomic
) kuchepetsa kuchuluka kwa ntchito za disk.
Pomaliza, ntchito yolumikizira danga mdera lanu goods
ndi gwero mutha kukhazikitsa motere:
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
Choyamba timawerenga mtengo wosungidwa kale row_ver
kwa danga goods
. Ngati ikusowa (gawo loyamba losinthana), ndiye timalitenga ngati row_ver
ziro. Kenako, timatsitsa tsamba ndi tsamba zomwe zasinthidwa kuchokera komwe kumachokera pa ulalo womwe watchulidwa. Pobwerezabwereza, timasunga zomwe talandira ku malo oyenera am'deralo ndikusintha mtengo wake row_ver
(mu space row_ver
ndi mu variable row_ver
) - tenga mtengo row_ver
kuchokera pamzere womaliza wa data yodzaza.
Kuteteza ku kulumphira mwangozi (ngati pakhala cholakwika mu pulogalamu), loop while
akhoza kusinthidwa ndi for
:
for _ = 1, max_req do ...
Chifukwa cha ntchitoyo sync_goods
danga goods
wolandirayo adzakhala ndi matembenuzidwe atsopano a zolemba zonse za danga goods
mu gwero.
Mwachiwonekere, kufufutidwa kwa deta sikungathe kuwulutsidwa motere. Ngati chosowacho chilipo, mutha kugwiritsa ntchito chizindikiro chochotsa. Onjezani ku danga goods
munda wa boolean is_deleted
ndipo m'malo mochotsa mbiri, timagwiritsa ntchito kufufuta momveka - timayika mtengo wamunda is_deleted
mu mtengo true
. Nthawi zina m'malo mwa malo a boolean is_deleted
ndikosavuta kugwiritsa ntchito kumunda deleted
, yomwe imasunga tsiku la nthawi yochotsa cholembedwacho. Mukachotsa momveka bwino, mbiri yolembedwa kuti ichotsedwe idzasamutsidwa kuchokera komwe kumachokera kupita komwe mukupita (malinga ndi malingaliro omwe takambirana pamwambapa).
Kusintha row_ver
angagwiritsidwe ntchito kutumiza deta kuchokera kumalo ena: palibe chifukwa chopanga ndondomeko yosiyana pa malo aliwonse opatsirana.
Tinayang'ana njira yothandiza yobwereza deta yapamwamba pamapulogalamu pogwiritsa ntchito Tarantool DBMS.
anapezazo
- Tarantool DBMS ndi chinthu chokongola, chodalirika chopanga mapulogalamu olemetsa kwambiri.
- Kubwereza kwapamwamba kwa deta kumakhala ndi ubwino wambiri kusiyana ndi kubwereza kochepa.
- Njira yobwerezabwereza yapamwamba yomwe yakambidwa m'nkhaniyi imakupatsani mwayi wochepetsera kuchuluka kwa data yomwe yasamutsidwa mwa kusamutsa zolemba zokha zomwe zasintha kuyambira gawo lomaliza la kusinthana.
Source: www.habr.com