Ko te tukurua taumata teitei i roto i te Tarantool DBMS

Kia ora, kei te hanga tono ahau mo DBMS Tarantool he papaaho i hangaia e te Roopu Mail.ru e whakakotahi ana i te DBMS mahi nui me te tūmau tono i te reo Lua. Ko te tere tere o nga otinga e pa ana ki a Tarantool ka tutuki, ina koa, na te tautoko mo te aratau mahara-mahara o te DBMS me te kaha ki te whakahaere i te arorau pakihi tono i roto i te waahi korero kotahi me nga raraunga. I te wa ano, ka whakamanahia te mau tonu o nga raraunga ma te whakamahi i nga whakawhitiwhitinga ACID (kei te mau tonu te raarangi WAL ki te kōpae). Kua hangaia e Tarantool te tautoko mo te tukurua me te tiritiri. Mai i te putanga 2.1, ka tautokohia nga patai i te reo SQL. He puna tuwhera a Tarantool me te raihana i raro i te raihana BSD ngawari. He putanga Ahumahi hokohoko ano.

Ko te tukurua taumata teitei i roto i te Tarantool DBMS
Ka rongo te mana! (…aka koa ki te mahi)

Ko nga mea katoa i runga ake nei ka waiho a Tarantool hei papaaahua ataahua mo te hanga i nga tono paanui-nui. I roto i enei tono, he maha nga wa e hiahiatia ana mo te tukurua raraunga.

Ka rite ki te korero i runga ake nei, kua hangaia e Tarantool te tukurua raraunga. Ko te maataapono o tana mahi ko te mahi raupapa i runga i nga tauira nga whakawhitinga katoa kei roto i te raarangi matua (WAL). I te nuinga o te wa ko taua tukurua (ka kiia ano e matou taumata iti) ka whakamahia hei whakapumau i te pai o te tono me te toha ranei i te kawenga panui i waenga i nga kohinga kohinga.

Ko te tukurua taumata teitei i roto i te Tarantool DBMS
raihi. 1. Te tāruarua i roto i te kāhui

Ko tetahi tauira o tetahi ahuatanga rereke ko te whakawhiti i nga raraunga i hangaia i roto i tetahi papaarangi ki tetahi atu paparangi mo te tukatuka/aroturuki. I roto i te take whakamutunga, he otinga pai ake pea ki te whakamahi taumata teitei te tukurua - te tukuruatanga raraunga i te taumata arorau pakihi tono. Ko era. Kare matou e whakamahi ana i tetahi otinga kua oti te hanga ki roto i te DBMS, engari ka mahia te tukurua i a matou ano i roto i te tono e whanakehia ana e matou. He pai me nga ngoikoretanga o tenei huarahi. Kia whakarārangihia ngā painga.

1. Tiaki waka:

  • Kaore e taea e koe te whakawhiti i nga raraunga katoa, engari he waahanga noa iho (hei tauira, ka taea e koe te whakawhiti i etahi ripanga anake, etahi o o ratou pou, rekoata ranei e tutuki ana ki tetahi tohu);
  • Kaore i rite ki te tukurua taumata-iti, e mahia tonutia ana i roto i te asynchronous (i whakatinanahia i roto i te putanga o naianei o Tarantool - 1.10) ranei tukutahi (kia whakatinanahia i roto i nga putanga o muri o Tarantool) aratau, ka taea te mahi tukurua taumata-tiketike i roto i nga waahi (arā, te Ko te tono ka tukutahi i nga raraunga - he raraunga waahi whakawhiti, katahi ka okioki i te tukurua, ka mutu ka puta te waahi whakawhiti, me etahi atu);
  • Mena he maha nga huringa o te rekoata, ka taea e koe te whakawhiti i tana putanga hou (kaore i te rite ki te tukurua taumata-iti, ko nga huringa katoa i mahia i runga i te rangatira ka purei raupapa i runga i nga tauira).

2. Kaore he raruraru ki te whakatinana i te whakawhitinga HTTP, e taea ai e koe te tukutahi i nga papaarangi mamao.

Ko te tukurua taumata teitei i roto i te Tarantool DBMS
raihi. 2. Tukurua ki runga HTTP

3. Ko nga hanganga raraunga i waenga i te whakawhiti raraunga kaore e tika kia rite tonu (ano, i te nuinga o te waa, ka taea te whakamahi i nga DBMS rereke, nga reo hotaka, nga papaaho, me etahi atu).

Ko te tukurua taumata teitei i roto i te Tarantool DBMS
raihi. 3. Te tukurua i roto i nga punaha rerekee

Ko te kino ko te mea, i te toharite, he uaua ake/he utu nui te hotaka i te whirihoranga, a, hei utu mo te whakarite i nga mahi hanga-i roto, me whakamahi koe i a koe ake.

Mena i roto i to ahuatanga he mea nui nga painga o runga ake nei (he tikanga e tika ana ranei), he mea tika ki te whakamahi i te tukurua taumata-tiketike. Me titiro ki etahi huarahi hei whakatinana i te tukuruatanga raraunga taumata-tiketike i roto i te Tarantool DBMS.

Te whakaiti waka

Na, ko tetahi o nga painga o te tukurua taumata teitei ko te penapena waka. Kia tino kitea ai tenei painga, he mea tika ki te whakaiti i te nui o nga raraunga i whakawhitia i ia wahanga whakawhiti. Ko te tikanga, kaua e wareware i te mutunga o te huihuinga, me tukutahi te kaiwhiwhi raraunga me te puna (i te iti rawa mo tera waahanga o nga raraunga e uru ana ki te tukurua).

Me pehea te whakaiti i te nui o nga raraunga ka whakawhitia i te wa o te tukurua taumata-tiketike? Ko te otinga ngawari ko te kowhiri i nga raraunga ma te ra me te wa. Hei mahi i tenei, ka taea e koe te whakamahi i te mara-wa-ra kei te ripanga (mehemea kei te noho). Hei tauira, ko te tuhinga "ota" tera pea he mara "he wa mahi ota" - delivery_time. Ko te raru o tenei otinga ko nga uara o tenei mara kaore e uru ki te raupapa e rite ana ki te hanga ota. Na e kore e taea e matou te mahara ki te uara mara teitei delivery_time, ka tukuna i te wa o te waahi whakawhiti o mua, a, i te wa o te waahi whakawhiti e whai ake nei, tohua nga rekoata katoa me te uara mara teitei ake delivery_time. Ko nga rekoata he iti ake te uara mara kua taapirihia i waenga i nga wa whakawhiti delivery_time. I tua atu, ka taea e te ota te whakarereke, engari kaore i pa ki te mara delivery_time. I roto i nga take e rua, kaore nga huringa e whakawhitia mai i te puna ki te waahi. Hei whakaoti i enei raruraru, me whakawhiti raraunga "inaki". Ko era. i ia wahanga whakawhiti ka whakawhitia e matou nga raraunga katoa me te uara mara delivery_time, nui atu i etahi wa o mua (hei tauira, N haora mai i te waa o naianei). Heoi ano, e kitea ana mo nga punaha nui he nui noa atu tenei huarahi ka taea te whakaiti i nga penapena waka e tohe ana matou ki te kore noa. I tua atu, ko te ripanga e whakawhitihia ana kaore pea he mara e hono ana ki te ra-wa.

Ko tetahi atu otinga, he uaua ake mo te whakatinanatanga, ko te whakaae ki te rironga o nga raraunga. I tenei keehi, i ia wahanga whakawhiti, ka tukuna nga raraunga katoa, kaore ano kia whakamanahia e te kaiwhiwhi. Hei whakatinana i tenei, me taapiri he pou Boolean ki te ripanga puna (hei tauira, is_transferred). Mena ka whakaae te kaiwhiwhi kua riro mai te rekoata, ka tangohia e te mara e rite ana te uara true, i muri mai ka kore e uru te urunga ki nga whakawhitinga. Ko tenei whiringa whakatinanatanga kei a raatau nga ngoikoretanga e whai ake nei. Tuatahi, mo ia rekoata kua whakawhitia, me hanga he mihi ka tukuna. Ko te tikanga, ka whakatauritea tenei ki te whakaruarua i te nui o nga raraunga whakawhiti me te arahi ki te rearua te maha o nga haerenga. Tuarua, karekau e taea te tuku i taua rekoata ki te maha o nga kaiwhiwhi (ko te kaiwhiwhi tuatahi ki te whiwhi ka whakaū i te rihīti mo ia ake me era atu katoa).

Ko te tikanga karekau he kino i runga ake nei ko te taapiri i tetahi pou ki te ripanga kua whakawhitia hei whai i nga huringa o ona rarangi. Ka taea te momo ra-wa te ahua o taua pou, a me whakarite/whakahoutia e te tono ki te wa o naianei ia wa ka taapirihia nga rekoata (he mea ngota me te taapiri/whakarereke). Hei tauira, me karanga te pou update_time. Ma te tiaki i te uara mara morahi o tenei pou mo nga rekoata kua whakawhitia, ka taea e tatou te timata i te waahi whakawhiti e whai ake nei me tenei uara (twhiria nga rekoata me te uara mara update_time, nui atu i te uara i rongoa i mua). Ko te raru o te huarahi whakamutunga ko nga huringa raraunga ka puta i nga roopu. Ko te hua o nga uara mara i te pou update_time ehara pea i te mea ahurei. No reira, kaore e taea te whakamahi i tenei pou mo te whakaputanga raraunga wehewehea (waarangi-a-wharangi). Hei whakaatu i te wharangi raraunga ma ia wharangi, me hanga e koe etahi atu tikanga ka iti te pai o te mahi (hei tauira, te tango mai i te paataka raraunga i nga rekoata katoa me te uara. update_time teitei ake i te mea kua tohua me te whakaputa i te maha o nga rekoata, ka timata mai i tetahi waahanga mai i te timatanga o te tauira).

Ka taea e koe te whakapai ake i te pai o te whakawhiti raraunga ma te whakapai paku i te huarahi o mua. Ki te mahi i tenei, ka whakamahia e matou te momo tauoti (tauoti roa) hei uara mara pou mo te whai i nga huringa. Me whakaingoatia te poupou row_ver. Ko te uara āpure o tēnei tīwae me whakarite tonu/whakahōu ia wā ka hangaia/whakakētia he rekoata. Engari i tenei keehi, kaore te mara e tautapahia te ra-wa o naianei, engari ko te uara o etahi porotiti, kua piki ake ma te kotahi. Ko te mutunga, ko te pou row_ver kei roto i nga uara ahurei ka taea te whakamahi kia kaua e whakaatu noa i nga raraunga "delta" (nga raraunga taapiri / whakarereke mai i te mutunga o te huihuinga whakawhiti o mua), engari ki te wawahi noa me te whai hua ki nga wharangi.

Ko te tikanga whakamutunga e whakaarohia ana mo te whakaiti i te nui o nga raraunga i whakawhitia i roto i te anga o te tukurua taumata-tiketike ki ahau nei te mea tino pai me te ao katoa. Kia ata tirohia e tatou.

Te Whakawhiti Raraunga Ma te Kaitatau Putanga Haupae

Te whakatinanatanga o te wahanga tūmau/matua

I roto i te MS SQL Server, he momo pou motuhake hei whakatinana i tenei huarahi - rowversion. Kei ia pātengi raraunga he porotiti ka piki ma te kotahi i ia wa ka taapirihia he rekoata ki te ripanga he rite te ahua rowversion. Ko te uara o tenei porotiti ka tautapa aunoa ki te mara o tenei pou i roto i te rekoata kua taapirihia. Ko te Tarantool DBMS kaore he tikanga hanga-i roto. Engari, i Tarantool ehara i te mea uaua ki te whakatinana i te ringa. Kia titiro tatou me pehea te mahi.

Tuatahi, he kupu iti: ko nga tepu i Tarantool e kiia ana ko nga waahi, a ko nga rekoata ka kiia he tuples. I roto i te Tarantool ka taea e koe te hanga raupapa. Ko nga raupapa he mea ke atu i nga kaihanga kua whakaingoatia o nga uara tauoti kua whakaritea. Ko era. koinei tonu ta tatou e hiahia ana mo o tatou kaupapa. Kei raro iho ka hangaia e matou he raupapa penei.

I mua i te mahi i tetahi mahi pātengi raraunga i Tarantool, me whakahaere e koe te whakahau e whai ake nei:

box.cfg{}

Ko te mutunga mai, ka timata a Tarantool ki te tuhi i nga whakaahua paataka raraunga me nga raarangi tauwhitinga ki te raarangi o naianei.

Me hanga he raupapa row_version:

box.schema.sequence.create('row_version',
    { if_not_exists = true })

Kōwhiringa if_not_exists ka whakaaetia kia mahia te tuhinga waihanga i nga wa maha: mena kei te noho te ahanoa, kaore a Tarantool e ngana ki te hanga ano. Ka whakamahia tenei whiringa ki nga whakahau DDL katoa e whai ake nei.

Me hanga he waahi hei tauira.

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
})

I konei ka tautuhia te ingoa o te waahi (goods), ingoa mara me o raatau momo.

Ko nga mara whakanui-aunoa i Tarantool ka hangaia ma te whakamahi i nga raupapa. Me hanga e tatou he matua whakanui-aunoa ma te mara 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
})

Kei te tautoko a Tarantool i nga momo tohu tohu. Ko nga tohu e whakamahia nuitia ana ko nga momo TREE me te HASH, e pa ana ki nga hanganga e rite ana ki te ingoa. Ko TREE te momo taupū tino whai kiko. Ka taea e koe te tiki raraunga i roto i te tikanga whakarite. Engari mo te whiriwhiringa riterite, he pai ake te HASH. No reira, he mea pai kia whakamahia te HASH mo te matua matua (koinei ta matou i mahi).

Hei whakamahi i te poupou row_ver ki te whakawhiti i nga raraunga whakarereke, me herea e koe nga uara raupapa ki nga mara o tenei pou row_ver. Engari kaore i rite ki te matua matua, ko te uara mara tiwae row_ver me piki ake ma te kotahi ehara i te mea ka taapirihia nga rekoata hou, engari ka huri ano i nga rekoata o mua. Ka taea e koe te whakamahi i nga kaiwhaiwhai mo tenei. E rua nga momo whakaoho mokowhiti a Tarantool: before_replace и on_replace. Ka pupuhihia nga keu i nga wa katoa ka huri nga raraunga o te waahi (mo ia tuple e pa ana ki nga huringa, ka whakarewahia he mahi keu). Rerekē on_replace, before_replaceKa taea e -triggers te whakarereke i nga raraunga o te tuple e mahia ai te keu. Na, ko te momo keu whakamutunga e pai ana ki a maatau.

box.space.goods:before_replace(function(old, new)
    return box.tuple.new({new[1], new[2], new[3],
        box.sequence.row_version:next()})
end)

Ko te keu e whai ake nei ka whakakapi i te uara mara row_ver kua penapena te tuple ki te uara o muri o te raupapa row_version.

Kia taea ai te tango raraunga mai i te waahi goods mā te tīwae row_ver, me hanga he taupū:

box.space.goods:create_index('row_ver', {
    parts = { 'row_ver' },
    unique = true,
    type = 'TREE',
    if_not_exists = true
})

Momo taurangi - rakau (TREE), na te mea ka hiahia matou ki te tango i nga raraunga i roto i te raupapa pikinga o nga uara o te pou row_ver.

Me taapiri etahi raraunga ki te waahi:

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}

No te mea Ko te āpure tuatahi he porotiti piki-aunoa; ka paahi kore noa. Ka whakakapi aunoa a Tarantool i te uara e whai ake nei. Waihoki, ko te uara o nga mara pou row_ver Ka taea e koe te paahi kore - kaore ranei e tohu i te uara, na te mea ko tenei pou te waahi whakamutunga o te waahi.

Kia tirohia te hua whakauru:

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]
...

Ka kite koe, ka whakakiia aunoa nga mara tuatahi me te whakamutunga. Inaianei ka ngawari ki te tuhi i tetahi mahi mo te tukunga-a-wharangi o nga huringa mokowhiti 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

Ka tangohia e te taumahi te uara hei tawhā row_ver, timata mai i te mea e tika ana ki te wetewete i nga huringa, me te whakahoki mai i tetahi waahanga o nga raraunga whakarereke.

Ko te whakatauira raraunga i Tarantool ka mahia ma nga tohu. Mahi get_goods ka whakamahi i te kaitahuri ma te taurangi row_ver ki te whiwhi raraunga whakarereke. Ko te momo kaiwhakariterite ko GT (He nui ake i te, nui ake i te). Ko te tikanga ka takahia e te kaitahuri nga uara taurangi timata mai i te matua kua paahitia (uara mara row_ver).

Ka whakahokia e te kaitoro nga tuple. Kia taea ai e koe te whakawhiti raraunga ma te HTTP, he mea tika ki te huri i nga tuples ki tetahi hanganga watea mo te raupapatanga o muri mai. Ka whakamahia e te tauira te mahi paerewa mo tenei tomap. Engari o te whakamahi tomap ka taea e koe te tuhi i to ake mahi. Hei tauira, ka hiahia pea tatou ki te whakaingoa ano i tetahi mara name, kaua e haere i te mara code me te taapiri i tetahi mara 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

Ko te rahi o te wharangi o nga raraunga whakaputa (te maha o nga rekoata i tetahi waahanga) ka whakatauhia e te taurangi page_size. I roto i te tauira te uara page_size he 5. I roto i te hotaka tuturu, ko te rahi o te wharangi he mea nui ake. Kei runga i te rahi toharite o te tuple mokowhiti. Ka taea te whakatau i te rahi o te wharangi tino pai ma te ine i te wa whakawhiti raraunga. Ka nui ake te rahi o te wharangi, ka iti ake te maha o nga haerenga i waenga i nga taha tuku me te taha tango. Ma tenei ka taea e koe te whakaiti i te wa katoa mo te tango i nga huringa. Heoi, ki te nui rawa te rahi o te wharangi, ka roa rawa ta matou noho i runga i te tūmau ki te rangatū i te tauira. Ko te mutunga mai, ka roa pea te tukatuka i etahi atu tono ka tae mai ki te tūmau. Tawhā page_size ka taea te utaina mai i te konae whirihoranga. Mo ia waahi tuku, ka taea e koe te whakarite i tana ake uara. Heoi, mo te nuinga o nga mokowā ka pai te uara taunoa (hei tauira, 100).

Kia mahia te mahi 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
...

Me tango te uara mara row_ver mai i te raina whakamutunga ka karanga ano i te mahi:

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
...

Ano ano:

tarantool> get_goods(8)
---
- []
...

Ka taea e koe te kite, ina whakamahia penei, ka whakahoki te mahi i nga rekoata mokowā katoa i ia wharangi goods. Ko te wharangi whakamutunga ka whai i te kowhiringa kore.

Me huri tatou ki te waahi:

box.space.goods:update(4, {{'=', 6, 'copybook'}})
box.space.goods:insert{nil, 'clip', 234}
box.space.goods:insert{nil, 'folder', 432}

Kua hurihia e matou te uara mara name mo te urunga kotahi me te taapiri e rua nga urunga hou.

Me whakahoki ano te waea mahi whakamutunga:

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
...

I whakahokia mai e te mahi nga rekoata kua whakarereke me te taapiri. Na te mahi get_goods ka taea e koe te whiwhi raraunga kua rereke mai i tana piiraa whakamutunga, koinei te putake o te tikanga tukurua e whakaarohia ana.

Ka waiho e matou te whakaputanga o nga hua ma te HTTP i te ahua o JSON i waho o te waahanga o tenei tuhinga. Ka taea e koe te panui mo tenei i konei: https://habr.com/ru/company/mailru/blog/272141/

Te whakatinanatanga o te wahanga o te kiritaki/pononga

Kia titiro tatou ki te ahua o te whakatinanatanga o te taha whiwhi. Me hanga he mokowā ki te taha tango hei rokiroki i nga raraunga kua tikiakehia:

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
})

Ko te hanganga o te waahi ka rite ki te hanganga o te waahi i te puna. Engari na te mea kaore matou e tuku i nga raraunga kua riro ki hea atu, ko te pou row_ver kaore i te waahi o te kaiwhiwhi. I te mara id ka tuhia nga tohu tohu. Na reira, i runga i te taha o te kaikawe kaore he take ki te whakanui-aunoa.

I tua atu, me whai waahi ki te whakaora i nga uara 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 ia mokowā utaina (marae space_name) ka tiakina e matou te uara whakamutunga kua utaina ki konei row_ver (marae value). Ko te tīwae te kī matua space_name.

Me hanga he mahi hei uta raraunga mokowā goods mā HTTP. Ki te mahi i tenei, me hiahia he whare pukapuka e whakatinana ana i te kiritaki HTTP. Ko te raina e whai ake nei ka utaina te whare pukapuka me te tuku i te kiritaki HTTP:

local http_client = require('http.client').new()

Kei te hiahia ano matou he whare pukapuka mo te json deserialization:

local json = require('json')

He nui tenei hei hanga i tetahi mahi uta raraunga:

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

Ka mahia e te mahi he tono HTTP ki te wahitau url ka tukuna row_ver hei tawhā me te whakahoki i te hua o te tono.

Ko te mahi mo te tiaki i nga raraunga kua riro he penei te ahua:

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

Te huringa o te penapena raraunga ki te waahi goods whakanohoia ki roto i te tauwhitinga (ka whakamahia te mahi mo tenei box.atomic) hei whakaiti i te maha o nga mahi kōpae.

Ka mutu, ko te mahi tukutahi mokowā rohe goods me te puna ka taea e koe te whakatinana penei:

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

Tuatahi ka panui tatou i te uara kua tiakina i mua row_ver mo te waahi goods. Mena kei te ngaro (te waahi whakawhiti tuatahi), katahi ka tangohia hei row_ver kore. I muri mai i roto i te huringa ka mahia e matou he wharangi ma te wharangi tangohanga o nga raraunga kua whakarerekehia mai i te puna ki te url kua tohua. I ia whitiwhitinga, ka tiakina e matou nga raraunga kua riro ki te waahi rohe e tika ana, ka whakahou i te uara row_ver (i te waahi row_ver me te taurangi row_ver) - tangohia te uara row_ver mai i te rarangi whakamutunga o nga raraunga kua utaina.

Hei whakamarumaru i te kopikopiko ohorere (mehemea he hapa i roto i te hotaka), te kapiti while ka taea te whakakapi e for:

for _ = 1, max_req do ...

Ko te hua o te mahi i te mahi sync_goods wāhi goods kei roto i te kaiwhiwhi nga putanga hou o nga rekoata mokowā katoa goods i te puna.

Maamaa, kaore e taea te paoho te whakakorenga raraunga penei. Mena he hiahia pera, ka taea e koe te whakamahi tohu whakakore. Tāpirihia ki te mokowā goods mara boolean is_deleted a hei utu mo te whakakore tinana i tetahi rekoata, ka whakamahia e matou te whakakore arorau - ka whakatauhia e matou te uara mara is_deleted ki te tikanga true. I etahi wa hei utu mo te mara boolean is_deleted he pai ake te whakamahi i te mara deleted, e pupuri ana i te ra-wa o te mukunga arorau o te rekoata. I muri i te mahi i te muku arorau, ka whakawhitia te rekoata kua tohua mo te whakakorenga mai i te puna ki te taunga (e ai ki te arorau i korerohia i runga ake nei).

Te Pukenga row_ver ka taea te whakamahi ki te tuku raraunga mai i etahi atu waahi: kaore he take ki te hanga i tetahi raupapa motuhake mo ia waahi tuku.

I titiro matou ki tetahi huarahi whai hua mo te tukurua raraunga taumata-tiketike i roto i nga tono ma te whakamahi i te Tarantool DBMS.

kitenga

  1. Ko te Tarantool DBMS he hua ataahua, he hua whakaari mo te hanga i nga tono taumaha.
  2. He maha nga painga o te tukuruatanga taumata-tiketike ki runga i te tukurua taumata-iti.
  3. Ko te tikanga tukurua taumata-tiketike i korerohia i roto i te tuhinga ka taea e koe te whakaiti i te nui o nga raraunga whakawhiti ma te whakawhiti noa i nga rekoata kua rereke mai i te waahi whakawhiti whakamutunga.

Source: will.com

Tāpiri i te kōrero