Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

I te ngahuru o 2019, he huihuinga kua roa e tatarihia ana i te roopu Mail.ru Cloud iOS. Ko te papaaarangi matua mo te pupuri tonu i te ahua tono kua tino rerekee mo te ao pūkoro Raraunga Raraunga Mahara Mahara Uira (LMDB). Kei raro iho i te tapahanga ka tukuna atu e matou he arotake taipitopito mo taua mea i roto i nga waahanga e wha. Tuatahi, me korero tatou mo nga take mo tenei whiringa kore-iti me te uaua. Na ka anga whakamua tatou ki te whai whakaaro ki nga pou e toru kei te ngakau o te hoahoanga LMDB: nga konae kua mapi-mahara, te B+-rakau, te huarahi kape-i-tuhi mo te whakatinana i te tauwhitiwhiti me te maha. Ka mutu, mo te kai reka - te waahanga mahi. I roto i tenei ka titiro tatou me pehea te hoahoa me te whakatinana i te aronuinga papaaarangi me nga ripanga maha, tae atu ki tetahi taurangi, kei runga ake o te API uara-matua taumata-iti.

Tuhinga

  1. Te hihiri mo te whakatinanatanga
  2. Turanga LMDB
  3. E toru nga pou o LMDB
    3.1. Tohorā #1. Ko nga konae kua mapi mahara
    3.2. Tohorā #2. B+-rakau
    3.3. Tohorā #3. Tārua-tuhi-tuhi
  4. Te hoahoa aronuinga raraunga ki runga ake o te API uara-matua
    4.1. Nga tangohanga taketake
    4.2. Whakatauira Ripanga
    4.3. Te whakatauira i nga hononga i waenga i nga ripanga

1. Te hihiri mo te whakatinanatanga

Kotahi tau i te tau 2015, ka raru matou ki te ine i te maha o nga wa e takamuri ana te atanga o ta matou tono. I mahia e matou tenei mo tetahi take. He maha ake nga amuamu kua tae mai ki a matou i etahi wa ka mutu te urupare a te tono ki nga mahi a nga kaiwhakamahi: kaore e taea te pehi i nga paatene, kaore nga rarangi e panuku, aha atu. Mo nga tikanga inenga korerotia i runga i AvitoTech, na konei ka hoatu e au te raupapa tau anake.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko nga hua inenga he ua makariri mo matou. I puta mai he maha noa atu nga raru i puta mai i te whakatio i era atu. Mena i mua i te mohio ki tenei meka ko te tohu hangarau matua o te kounga ko te kore utu, na muri i te arotahi nukuhia i runga i te whakatio kore utu.

Kua hanga papatohu me te whakatio a i muri i te whakapaunga ine и kounga tātaritanga o ratou take, ka marama te hoariri matua - arorau pakihi taumaha mahia i roto i te miro matua o te tono. Ko te tauhohenga maori ki tenei whakama ko te hiahia nui ki te pana ki roto i nga awa mahi. Hei whakaoti nahanaha i tenei raruraru, i tahuri matou ki tetahi hoahoanga miro-maha i runga i nga kaiwhakaari mama. I whakatapua e ahau ki tana urutaunga mo te ao iOS e rua nga miro i runga i Twitter roopu me tuhinga mo Habré. Hei wahanga o nga korero o naianei, e hiahia ana ahau ki te whakanui i nga ahuatanga o te whakatau i awe i te kowhiringa o te paataka raraunga.​

Ko te tauira kaiwhakaari o te whakahaere punaha e kii ana ko te miro maha hei kaupapa tuarua. Ko nga mea tauira kei roto he pai ki te whakawhiti i nga rohe awa. A kaore e mahia e ratou i etahi wa, i konei, i reira, engari tata tonu me nga waahi katoa.​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko te papanga raraunga tetahi o nga waahanga kokonga o te hoahoa kua whakaatuhia. Ko tana mahi matua ko te whakatinana i te tauiratono Pātengi Raraunga Tiri. Mena i roto i te ao hinonga ka whakamahia hei whakarite i te tukutahitanga raraunga i waenga i nga ratonga, na i roto i te keehi o te hoahoanga kaiwhakaari - nga raraunga i waenga i nga miro. No reira, i hiahiatia e matou he papaaarangi e kore e raru noa i te wa e mahi tahi ana i roto i te taiao miro-maha. Ina koa, ko te tikanga ko nga taonga ka riro mai i a ia me noho haumaru i te iti rawa o te miro, me te mea pai kia kore e huri. Kei te mohio koe, ka taea te whakamahi i te waa mai i te maha o nga miro me te kore e uru ki tetahi kati, he painga whai hua ki te mahi.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOSKo te take nui tuarua i awe i te kowhiringa o te papaunga raraunga ko to maatau API kapua. Na te huarahi tukutahi i tangohia e git. Pērā ki a ia, i whai mātou tuimotu-tuatahi API, he nui ake te ahua mo nga kaihoko kapua. Ko te whakaaro ka pana noa ratou i te ahua o te kapua kia kotahi, katahi ka puta te tukutahitanga i roto i te nuinga o nga keehi ma te huri i nga huringa. Aue, ko tenei whai waahi kei roto noa i te rohe kaupapa, kaore ano nga kaihoko i ako me pehea te mahi me nga papanga i roto i nga mahi. He maha nga take whaitake mo tenei, na, kia kore ai e whakaroa te whakaurunga, ka waiho e matou nga taiapa. Inaianei, ko te mea nui ake ko nga whakatau ako o te akoranga mo nga mea ka puta ina kii te API "A" kaore tana kaihoko e kii "B".

Na, ki te whakaaro koe ki te git, na, i te wa e mahi ana i te whakahau kume, hei utu mo te tono papaki ki te whakaahua o te rohe, ka whakataurite i tona ahuatanga katoa me te ahua o te tūmau katoa, katahi ka tino tika to whakaaro me pehea te tukutahitanga i roto i te kapua. kiritaki. He ngawari te whakaaro ki te whakatinana, me toha e koe nga rakau DOM e rua ki te mahara me nga korero-meta mo nga kaitoro katoa me nga konae rohe. Ka puta mai mena ka penapena te kaiwhakamahi ki te 500 mano nga konae i roto i te kapua, na ki te tukutahi me mahi ano me te whakangaro i nga rakau e rua me te 1 miriona node. Engari ko ia pona he whakahiato kei roto he kauwhata o nga mea iti. I runga i tenei ahuatanga, i tumanakohia nga hua o te tohu. I puta mai ahakoa me te kore e whai whakaaro ki te whakakotahitanga algorithm, ko te tikanga o te hanga me te whakangaro i te maha o nga taonga iti ka utu he pene tino pai. o nga tuhinga kaiwhakamahi. Ko te hua o tenei, ka whakatikahia e matou te waahanga tuarua mo te kowhiri i te papaaarangi - te kaha ki te whakatinana i nga mahi CRUD me te kore toha kaha o nga taonga.

Ko etahi atu whakaritenga he mea tuku iho, ko ta raatau rarangi katoa e whai ake nei.

  1. Te haumaru miro.
  2. Tukatuka maha. I tohuhia e te hiahia ki te whakamahi i taua tauira paataka raraunga ki te tukutahi i nga ahuatanga kaore i waenga i nga miro anake, engari i waenga i te tono matua me nga taapiri iOS.
  3. Te kaha ki te whakaatu i nga hinonga kua rongoa hei taonga kore-whakarereke.​
  4. Kaore he tohatoha hihiri i roto i nga mahi CRUD.
  5. Tautoko tauwhitinga mo nga rawa taketake ACID: te ngota, te rite, te wehe me te pono.
  6. Te tere i runga i nga keehi tino rongonui.

Na tenei huinga o nga whakaritenga, ko te SQLite he pai te whiriwhiri. Heoi, hei wahanga o te ako mo etahi atu, ka kite ahau i tetahi pukapuka "Te tiimata me te LevelDB". I raro i tana kaiarahi, i tuhia he tohu tohu e whakataurite ana i te tere o te mahi me nga papaa raraunga rereke i roto i nga ahuatanga o te kapua. Ko te hua i nui ake i o maatau tumanako. I roto i nga keehi tino rongonui - te tiki pehu ki runga i te raarangi kua tohua o nga konae katoa me te raarangi kua tohua o nga konae katoa mo te raarangi kua tohua - LMDB kua 10 nga wa tere atu i te SQLite. Kua kitea te whiringa.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

2. LMDB Turanga

He whare pukapuka iti rawa a LMDB (10K nga rarangi anake) e whakamahi ana i te paparanga papaaapapa iti rawa o nga papaa raraunga - te rokiroki.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko te hoahoa i runga ake nei e whakaatu ana ko te whakatairite i te LMDB me te SQLite, e whakatinana ana hoki i nga taumata teitei ake, kaore i te tika atu i te SQLite me nga Raraunga Matua. He pai ake te whakahua i nga miihini rokiroki rite ki nga kaiwhakataetae rite - BerkeleyDB, LevelDB, Sophia, RocksDB, me etahi atu. He whanaketanga ano kei te mahi a LMDB hei waahanga miihini rokiroki mo SQLite. I te tau 2012 te whakamatautau tuatahi whakapau na LMDB Howard Chu. Результаты I puta mai he tino whakaihiihi ka mauhia tana kaupapa e nga kaiwhaiwhai OSS, ka kitea te haere tonu o te tangata. LumoSQL. I te Hanuere 2020, ko Den Shearer te kaituhi o tenei kaupapa ka whakaatuhia i LinuxConfAu.

Ko te LMDB te nuinga e whakamahia ana hei miihini mo nga papaa raraunga tono. Ko te ahua o te whare pukapuka ki nga kaihanga OpenLDAP, i tino kore i pai ki a BerkeleyDB hei turanga mo ta raatau kaupapa. Ka timata mai i te whare pukapuka iti btree, I taea e Howard Chu te hanga i tetahi o nga huarahi tino rongonui o to tatou wa. I whakatapua e ia tana purongo tino pai ki tenei korero, me te hanganga o roto o LMDB. "Te Raraunga Raraunga Mahara Mahara Uira". Ko tetahi tauira pai mo te wikitoria i tetahi whare rokiroki i tohatohahia e Leonid Yuryev (aka yleo) mai i Positive Technologies i tana ripoata i Highload 2015 "He toa motuhake te miihini LMDB". I roto, ka korero ia mo te LMDB i roto i te horopaki o te mahi rite ki te whakatinana i te ReOpenLDAP, a kua tukuna kee a LevelDB ki nga whakaheinga whakataurite. Ko te hua o te whakatinanatanga, ko Positive Technologies kua kaha te whakawhanake marau MDBX me nga ahuatanga tino reka, nga arotautanga me te whakatika iro.

He maha nga wa ka whakamahia te LMDB hei rokiroki rite-he. Hei tauira, Mozilla Firefox pūtirotiro i whiriwhiri mo te maha o nga hiahia, a, timata mai i te putanga 9, Xcode pai ake tona SQLite mo te penapena tohu.

Kua tohu ano te miihini ki te ao o te whanaketanga pūkoro. Ko nga tohu o tona whakamahinga ka taea kitea i roto i te kiritaki iOS mo Telegram. I haere tonu a LinkedIn me te kowhiri i te LMDB hei rokiroki taunoa mo tana anga keteroki raraunga o te kainga Rocket Raraunga, mo tera korerotia i roto i tana tuhinga i te tau 2016.

Kei te angitū a LMDB ki te whawhai mo tetahi waahi i te ra i roto i te kohanga i mahue mai e BerkeleyDB i muri i tana taenga ki raro i te mana o Oracle. E arohaina ana te whare pukapuka mo tona tere me te pono, ahakoa ka whakaritea ki ona hoa. Kei te mohio koe, karekau he tina kore utu, a ka hiahia ahau ki te whakanui i te tauhokohoko ka pa ki a koe ina whiriwhiri koe i waenga i te LMDB me te SQLite. Ko te hoahoa i runga ake nei e whakaatu marama ana i te pikinga o te tere. Tuatahi, kaore matou e utu mo etahi atu paparanga tangohanga i runga ake o te rokiroki kōpae. E marama ana kaore e taea e te hoahoanga pai te mahi me te kore o raatau, a ka puta mai i roto i te waehere tono, engari he maamaa ake. Karekau e mau nga ahuatanga kaore e hiahiatia ana e tetahi tono motuhake, hei tauira, tautoko mo nga patai i te reo SQL. Tuarua, ka taea te whakatinana pai i te mapi o nga mahi tono mo nga tono mo te rokiroki kōpae. Ki te SQLite i roto i aku mahi kei runga i nga matea tatauranga toharite o te tono toharite, katahi koe, hei kaiwhakawhanake tono, e tino mohio ana koe ki nga ahuatanga o te taumaha mahi. Mo te otinga whai hua ake, me utu e koe he tohu utu nui ake mo te whanaketanga o te otinga tuatahi me tana tautoko i muri mai.

3. E toru nga pou o LMDB

I te titiro ki te LMDB mai i te tirohanga a te manu, kua tae ki te wa ki te hohonu. Ko nga waahanga e toru e whai ake nei ka whakatapua ki te tātari i nga pou matua kei runga te hoahoanga rokiroki:

  1. Ko nga konae kua mapi-mahara hei tikanga mo te mahi me te kōpae me te tukutahi i nga hanganga raraunga o roto.
  2. B+-rakau hei whakahaere i te hanganga o nga raraunga rongoa.
  3. Tārua-tuhi-tuhi hei huarahi ki te whakarato i nga taonga tauwhitinga ACID me te maha.

3.1. Tohorā #1. Ko nga konae kua mapi mahara

Ko nga konae kua mapi-maumahara he huānga hoahoanga nui ka puta ki te ingoa o te putunga. Ko nga take o te keteroki me te tukutahi o te uru ki nga korero rongoa ka waiho katoa ki te punaha whakahaere. Karekau he keteroki kei roto i te LMDB. He whakatau mohio tenei na te kaituhi, na te mea ko te panui tika i nga raraunga mai i nga konae mahere ka taea e koe te tapahi i nga kokonga maha i roto i te whakatinanatanga miihini. Kei raro nei he rarangi tino kore o etahi o ratou.

  1. Ko te pupuri i te riterite o nga raraunga i roto i te rokiroki i te wa e mahi tahi ana mai i te maha o nga mahi ka waiho hei kawenga ma te punaha whakahaere. I te waahanga e whai ake nei, ka korerohia tenei miihini me nga pikitia.
  2. Ko te kore o nga keteroki ka whakakore katoa i te LMDB mai i te maataki e pa ana ki nga tohatoha hihiri. Ko te panui i nga raraunga i roto i te mahi ko te whakatakoto i te tohutohu ki te wahitau tika i roto i te mahara mariko me te kore ke atu. He rite te ahua o te pakimaero putaiao, engari i roto i te waehere puna rokiroki ka uru katoa nga waea ki te calloc ki te mahi whirihoranga rokiroki.
  3. Ko te kore o nga keteroki ko te kore o nga raka e pa ana ki te tukutahitanga o to raatau urunga. Ko nga kaipanui, he maha tonu nga kaipanui i te wa ano, kaua e tutaki ki tetahi mutex kotahi e haere ana ki te raraunga. Na tenei, ko te tere o te panui he pai te tauineine raina i runga i te maha o nga PTM. I roto i te LMDB, ko nga mahi whakarereke anake ka tukutahia. Kotahi noa te kaituhi i te wa kotahi.
  4. Ko te iti o te keteroki me te arorau tukutahi ka whakakore i te momo tino uaua o nga hapa e pa ana ki te mahi i roto i te taiao miro-maha. E rua nga rangahau patengi raraunga pai i te huihuinga Usenix OSDI 2014: "Kaore nga punaha konae katoa i hanga rite: i runga i te uaua o te hanga i nga tono tukinga-rite" и "Whakamamae i nga Raraunga Raraunga mo te ngahau me te whai hua". Mai i a raatau ka taea e koe te kohi korero mo te pono o mua o te LMDB me te whakatinanatanga o nga rawa tauwhitinga ACID, he pai ake i tera o SQLite.
  5. Ko te iti o te LMDB ka taea te tohu miihini o tana waehere kia noho katoa ki roto i te keteroki L1 o te tukatuka me nga ahuatanga tere e whai ake nei.

Kia aroha mai, i roto i te iOS, me nga konae kua mapi-mahara, kaore nga mea katoa i te kore kapua pera i ta maatau e pai ai. Ki te korero mo nga ngoikoretanga e pa ana ki a raatau, he mea tika kia mahara ki nga tikanga whanui mo te whakatinana i tenei tikanga i roto i nga punaha whakahaere.

Nga korero whanui mo nga konae kua mapi-mahara

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOSKi nga tono katoa e rere ana, ka hono te punaha whakahaere i tetahi hinonga e kiia nei he tukanga. Ka tohatohahia ia tukanga he awhe tatai o nga wahitau ka tuu i nga mea katoa e tika ana kia mahi. Kei nga waahi iti rawa nga waahanga me nga tohu me nga raraunga me nga rauemi. Whai muri ka puta mai he poraka mokowā wāhitau hihiri, e mohiotia ana e matou i raro i te ingoa puranga. Kei roto nga waahi noho o nga hinonga ka puta i te wa e whakahaere ana te kaupapa. Kei runga ko te waahi mahara e whakamahia ana e te puranga tono. Ka tipu, ka kirimana ranei; i etahi atu kupu, he ahua hihiri ano tona rahi. Kia kore ai e pana me te pokanoa tetahi ki tetahi, kei nga pito rereke o te waahi noho. Ka whakamahia e te punaha whakahaere nga wahitau kei tenei waahanga waenga ki te hono i nga momo hinonga ki te tukanga. Ina koa, ka taea e ia te hono atu i etahi huinga waahi noho tonu me tetahi konae kei runga i te kōpae. Ko taua momo konae ka kiia he mapi-mahara.​

He nui te mokowā wāhitau kua tohaina ki te hātepe. Ko te tikanga, he iti noa te maha o nga wahitau ma te rahi o te tohu tohu, ka whakatauhia e te kaha moka o te punaha. Mena ka mapihia te mahara-a-tinana ki te 1-ki-1, ka kohia e te mahi tuatahi te RAM katoa, karekau he korero mo nga mahi maha.​

Heoi, mai i o maatau wheako e mohio ana ka taea e nga punaha whakahaere hou te mahi i nga wa kotahi te maha o nga tikanga e hiahiatia ana. Ka taea tenei na te mea he nui noa nga mahara ka tohatohahia e ratou ki nga tukanga i runga i te pepa, engari ko te mea pono ka utaina ki roto i te mahara tinana matua anake ko tera waahanga e hiahiatia ana i konei a inaianei. Na reira, ko te maharatanga e pa ana ki tetahi tukanga ka kiia ko te mariko.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko te punaha whakahaere ka whakarite i te mahara mariko me te mahara tinana ki nga wharangi o te rahi. I te wa e tonohia ana tetahi wharangi o te mahara mariko, ka utaina e te punaha whakahaere ki roto i te mahara tinana ka taurite ki tetahi ripanga motuhake. Mena kaore he waahi kore utu, ka kapehia tetahi o nga wharangi kua utaina i mua ki te kōpae, a ko te mea e hiahiatia ana ka noho. Ko tenei tikanga, ka hoki mai ano tatou, ka kiia ko te whakawhiti. Ko te ahua i raro nei e whakaatu ana i te tukanga i whakaahuatia. I runga i tera, ka utaina te wharangi A me te wahitau 0, ka tuu ki te wharangi mahara matua me te wahitau 4. I kitea tenei meka i roto i te ripanga reta i te nama waea 0.​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

He rite tonu te korero me nga konae kua mapi ki te mahara. Ko te tikanga, kei te noho tonu, kei roto i te waahi noho mariko. Heoi, ka uru ratou ki te wharangi mahara tinana ma ia wharangi me te tono anake. Ko te whakarereketanga o aua wharangi ka tukutahia ki te konae kei runga kopae. Ma tenei ara, ka taea e koe te mahi i te konae I/O ma te mahi noa me nga paita i roto i te mahara - ka whakawhiti aunoa nga huringa katoa e te kakano punaha whakahaere ki te konae puna.​

Ko te ahua i raro nei e whakaatu ana me pehea te tukutahi a LMDB i tona ahuatanga i te wa e mahi tahi ana me te patengi raraunga mai i nga tikanga rereke. Ma te mapi i te mahara mariko o nga tukanga rereke ki te konae kotahi, ka tohe tonu matou ki te punaha whakahaere ki te tukutahi i etahi poraka o o raatau waahi waahi ki a raatau ano, kei reira te titiro a LMDB.​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko tetahi ahuatanga nui ko te LMDB, ma te taunoa, ka whakarereke i te konae raraunga ma te punaha waea tuhi, ka whakaatu i te konae ano ki te aratau panui-anake. E rua nga hua nui o tenei huarahi.

Ko te hua tuatahi he noa ki nga punaha whakahaere katoa. Ko te mea nui ko te taapiri i te whakamarumaru ki te kino pohehe ki te papaaarangi ma te he waehere. Kei te mohio koe, ko nga tohutohu ka taea te whakahaere o tetahi tukanga he utu kore utu ki te uru ki nga raraunga mai i nga waahi katoa o tona waahi waahi. I te wa ano, i maharahia e matou, ko te whakaatu i tetahi konae i roto i te aratau panui-tuhi te tikanga ka taea e tetahi tohutohu te whakarereke. Mena ka pohehe ia, ka ngana, hei tauira, ki te tuhirua i tetahi huānga huānga ki te taupū kore, katahi ka taea e ia te huri pohehe i te konae kua mapi ki tenei wahitau, ka puta te pirau o te putunga raraunga. Mena ka whakaatuhia te konae ki te aratau panui-anake, na te ngana ki te huri i te mokowā wāhitau e tika ana ka mutu te kaupapa me te tohu. SIGSEGV, ka noho tonu te kōnae.

Ko te putanga tuarua he mea motuhake ki a iOS. Kaore te kaituhi me etahi atu puna korero e tino whakahua ana, engari ki te kore e pai te LMDB mo te whakahaere i runga i tenei punaha whakahaere pūkoro. Ko te waahanga e whai ake nei ka whakatapua ki tana whakaaro.

Nga korero motuhake o nga konae kua mapi-mahara ki iOS

He purongo whakamiharo i WWDC i te tau 2018 "IOS Mahara Hohonu Ruku". Ka kii mai ki a maatau kei roto i te iOS, ko nga wharangi katoa kei roto i te mahara tinana tetahi o nga momo e 3: he paru, he kopeke me te ma.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko te Mahara Maama he kohinga wharangi ka taea te wetewete mai i te mahara tinana. Ko nga raraunga kei roto ka taea te utaina ano ina hiahiatia mai i ona puna taketake. Ko nga konae kua mapi mahara-anake ka taka ki tenei waahanga. Kare a iOS e mataku ki te wetewete i nga wharangi kua mapihia ki te konae mai i te mahara i nga wa katoa, na te mea ka taurangitia kia tukutahi me te konae kei runga kopae.

Ko nga wharangi whakarereke katoa ka mutu ki roto i nga mahara paru, ahakoa te waahi i tu tuatahi ai. Ina koa, ko nga konae mapi-mahara kua whakarerekehia ma te tuhi ki te mahara mariko e hono ana ki a raatau ka whakarōpūhia penei. Te whakatuwhera i te LMDB me te haki MDB_WRITEMAP, i muri i te whakarereketanga, ka taea e koe te manatoko ake.​

I te wa ka timata te tono ki te tango i te mahara tinana, ka tukuna e iOS ki te kopae whaarangi paru. Ko te katoa o nga mahara e nohoia ana e nga wharangi paru me nga wharangi kōpeke ko te tohu tapuwae mahara o te tono. Ka tae ki tetahi uara paepae, ka tae mai te daemon o te OOM killer system i muri i te mahi ka whakamutua e ia. Koinei te ahuatanga o te iOS i whakaritea ki nga punaha whakahaere papamahi. Engari, ko te whakaiti i te tapuwae mahara ma te huri i nga wharangi mai i te mahara tinana ki te kōpae kaore i te whakaratohia ki iOS. Tena pea ko te tikanga o te neke haere i nga wharangi ki te kopae me te hoki ki muri he whakapau kaha mo nga taputapu pūkoro, kei te penapena ranei a iOS te rauemi mo te tuhi ano i nga pūtau ki runga i nga puku SSD, kaore pea nga kaihoahoa i makona ki nga mahi katoa o te punaha, kei reira nga mea katoa. whakawhiti tonu. Ahakoa tera, ka mau tonu te meka.

Ko te rongo pai, kua korerohia i mua ake nei, ko te LMDB ma te taunoa kaore e whakamahi i te tikanga mmap hei whakahou i nga konae. Ko te tikanga ko nga raraunga kua whakaatuhia ka whakarōpūtia e iOS hei mahara ma, kaore e uru ki te tapuwae mahara. Ka taea e koe te manatoko i tenei ma te whakamahi i tetahi taputapu Xcode e kiia nei ko VM Tracker. Ko te whakaahua i raro nei e whakaatu ana i te ahua o te mahara mariko iOS o te tono Kapua i te wa e mahi ana. I te timatanga, e 2 nga tauira LMDB i arawhiti i roto. I whakaaetia te tuatahi ki te whakaatu i tana konae ki te 1GiB o te mahara mariko, te tuarua - 512MiB. Ahakoa te meka e mau ana nga putunga e rua i te nui o te mahara noho, kaore tetahi o ratou e whai waahi paru.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Na inaianei kua tae ki te wa mo nga korero kino. He mihi ki te tikanga whakawhiti i roto i nga punaha whakahaere papamahi 64-bit, ka taea e ia mahinga te noho mokowā wāhitau mariko kia rite ki te mokowā kōpae mārō kore utu mo tana whakawhitinga pea. Ko te whakakapi i te whakawhiti me te kopiri i roto i te iOS ka tino whakaitihia te morahi o te ariā. Inaianei me uru nga mahi ora katoa ki roto i te mahara matua (panuihia te RAM), a ko nga mea katoa e kore e pai me kaha ki te whakamutu. Ka penei te korero i runga ake nei PūrongoTuhinga o mua tuhinga whaimana. Ko te mutunga, ka tino whakawhāitihia e iOS te nui o te mahara e waatea ana mo te tohatoha ma te mmap. I konei konei Ka taea e koe te tiro ki nga rohe o te nui o te mahara ka tohatohahia ki nga taputapu rereke ma te whakamahi i tenei waea punaha. I runga i nga tauira atamai tino hou, kua riro mai a iOS ki te 2 gigabytes, a ki runga i nga putanga o runga o te iPad - na te 4. I roto i te mahi, o te akoranga, me arotahi koe ki nga tauira taputapu tautoko iti rawa, kei reira nga mea katoa e tino pouri ana. Ko te mea kino rawa atu, ma te titiro ki te ahua mahara o te tono i roto i te VM Tracker, ka kite koe kei tawhiti atu a LMDB i te mea anake e kii ana he mapi-mahara. Ka kainga nga kohanga pai e nga kaiwhakawhiwhi punaha, nga konae rauemi, nga anga whakaahua, me etahi atu kaikino iti.

I runga i nga hua o nga whakamatautau i roto i te Kapua, ka tae mai matou ki nga uara whakararu e whai ake nei mo te mahara kua tohaina e LMDB: 384 megabytes mo nga taputapu 32-bit me te 768 mo nga taputapu 64-bit. I muri i te paunga o tenei pukapuka, ka timata nga mahi whakarereke ki te whakamutu me te waehere MDB_MAP_FULL. Ka kite matou i enei hapa i roto i ta maatau tirotiro, engari he iti noa iho ka taea te waiho i tenei waa.

Ko te take kore-marama mo te nui o te kohi mahara na roto i te rokiroki ka taea te noho roa mo nga tauwhitinga. Kia mohio ai me pehea te hono o enei ahuatanga e rua, ka awhinatia tatou ma te whakaaro ki nga pou e rua e toe ana o te LMDB.

3.2. Tohorā #2. B+-rakau

Hei tauira i nga ripanga ki runga ake o te rokiroki uara-matua, me noho nga mahi e whai ake nei i roto i tana API:

  1. Te whakauru huānga hōu.
  2. Rapua he huānga me te kī kua hoatu.
  3. Te tango i tetahi huānga.
  4. Hurihia i runga i nga waahi o nga taviri i roto i te raupapa kua tohua.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOSKo te hanganga raraunga ngawari ka ngawari ki te whakatinana i nga mahi e wha he rakau rapu rua. Ko ia o ona pona he tohu matua e wehewehe ana i te katoa o nga taviri tamariki ki nga rakau iti e rua. Kei te taha maui nga mea iti ake i te matua, kei te taha matau nga mea nui ake. Ko te whiwhi i tetahi huinga mau taviri ka tutuki ma tetahi o nga haerenga rakau matarohia

E rua nga hapa taketake o nga rakau-rua e kore ai e whai hua hei hanganga raraunga-a-kopae. Tuatahi, ko te tohu o to raatau toenga kaore e taea te tohu. He nui te tupono ki te whiwhi rakau ka rereke nga teitei o nga manga rereke, ka tino kino te uaua o te rapu algorithm ki te mea e tumanakohia ana. Tuarua, ko te nui o nga hononga-whakawhitinga i waenga i nga pona ka kore te noho o nga rakau-rua i roto i te maharatanga Ka taea te noho kati (i runga i nga hononga i waenganui i a raatau) ki nga wharangi rereke katoa i roto i te mahara mariko. Ko te mutunga mai, ahakoa he haerenga ngawari o etahi pona tata i roto i te rakau, me toro atu ki te maha o nga wharangi. He raru tenei ahakoa ka korero tatou mo te whai huatanga o nga rakau rua hei hanganga raraunga-mahara, na te mea ko te huri haere tonu i nga wharangi i roto i te keteroki tukatuka ehara i te mea tino pai. Ina tae mai ki te tiki auau i nga wharangi e hono ana ki nga node mai i te kōpae, ka tino rite te ahuatanga whakapouri.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOSKo nga rakau-B, he whanaketanga o nga rakau-rua, ka whakaoti rapanga i kitea i te kowae o mua. Tuatahi, he whakataurite i a raatau ano. Tuarua, ka wehea e ia o ratou pona te huinga o nga taviri tamaiti kaua ki te 2, engari ki roto i nga huinga-iti M, ka taea te nui o te nama M, i runga i te raupapa o nga rau, tae noa ki nga mano.

Na reira:

  1. Kei ia node te maha o nga taviri kua ota, he poto rawa nga rakau.
  2. Ka whiwhi te rakau i te waahi o te waahi i roto i te maharatanga, na te mea ko nga ki e tata ana te uara kei te taha o tetahi ki tetahi i runga i nga waahanga tata.
  3. Ka whakaitihia te maha o nga pona whakawhiti i te hekenga o te rakau i te wa e rapu ana.
  4. Ka whakaitihia te maha o nga pona whaainga e panuihia ana i nga paatai ​​awhe, na te mea he maha nga taviri kua otahia.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ka whakamahi a LMDB i te rereketanga o te rakau-B e kiia nei he rakau B+ hei rokiroki raraunga. Ko te hoahoa i runga ake nei e whakaatu ana i nga momo pona e toru kei roto:

  1. Kei runga ko te putake. Ko te kaupapa o te putunga korero i roto i te whare putunga. I roto i te tauira LMDB kotahi, ka taea e koe te hanga i nga papaaarangi maha e tiritiri ana i te waahi wahitau mariko kua mapi. Ka timata ia o ratou i tona ake putake.
  2. Kei te taumata iti ko nga rau. Kei roto anake i a raatau nga takirua uara-matua kua rongoa i roto i te papaunga raraunga. Ma te ara, koinei te ahuatanga o te B+-rakau. Mēnā ka penapenahia e te rākau-B ngā wāhanga wāriu ki ngā kōpuku o ngā taumata katoa, ko te rerekētanga B+ kei te iti rawa. Ka oti tenei meka, ka kiia ano e matou te momo-iti o te rakau i whakamahia i roto i te LMDB he rakau-B.
  3. Kei waenganui i te pakiaka me nga rau he 0 neke atu ranei nga taumata hangarau me nga pona whakatere (manga). Ko ta ratou mahi he wehewehe i te huinga mau taviri i waenganui i nga rau.

A-tinana, he poraka maumahara te roa o nga pona. Ko to ratou rahi he maha o te rahi o nga wharangi mahara i roto i te punaha whakahaere, i korerohia e matou i runga ake nei. Ko te hanganga node e whakaatuhia ana i raro nei. Kei roto i te pane nga korero meta, ko te mea tino kitea hei tauira ko te arowhai. Whai muri ka puta mai nga korero e pa ana ki nga taapiri kei roto nga pūtau whai raraunga. Ka taea e nga raraunga te mau taviri, mena kei te korero tatou mo nga waahanga whakatere, nga takirua uara-matua katoa ranei mo nga rau. "Te Aromatawai o nga Toa Mahinga-Mahinga Nui".

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

I muri i te whakahaerenga o nga korero o roto o nga wharangi wharangi, ka whakamaarama ano matou mo te rakau B-LMDB i runga i te ahua ngawari ki te ahua e whai ake nei.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko nga wharangi whai pona kei runga i te kōpae. Kei te pito o te konae nga wharangi nama teitei ake. Ko te wharangi e kiia nei he meta kei roto nga korero e pa ana ki nga wehenga e kitea ai nga pakiaka o nga rakau katoa. I te wa e whakatuwhera ana i te konae, ka tirotirohia e LMDB te wharangi konae ma te wharangi mai i te mutunga ki te timatanga ki te rapu i tetahi wharangi meta whaimana, ka kitea e ia nga papaunga raraunga.​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Na, he whakaaro mo te hanganga arorau me te tinana o te whakahaere raraunga, ka taea e taatau te neke ki te whakaaro mo te pou tuatoru o LMDB. Ma tana awhina ka puta nga whakarereketanga rokiroki katoa i roto i nga whakawhitiwhitinga me te wehe mai i a raatau ano, ka whakawhiwhia ki te papaaarangi te katoa te taonga o te maha.

3.3. Tohorā #3. Tārua-tuhi-tuhi

Ko etahi o nga mahi B-rakau ka uru ki te whakarereke i nga waahanga o ona pona. Ko tetahi tauira ko te taapiri i tetahi taviri hou ki tetahi node kua eke ki tona kaha morahi. I roto i tenei take, he mea tika, tuatahi, kia wehea te node kia rua, tuarua, ki te taapiri i tetahi hononga ki te node tamaiti hou e pihi ana i tona matua. He tino kino tenei tikanga. Mena mo etahi take (tukinga, mate hiko, me etahi atu) he waahanga noa iho o nga huringa mai i te raupapa ka puta, ka noho tonu te rakau ki te ahua koretake.

Ko tetahi o nga otinga tuku iho mo te hanga i te he o te patengi raraunga ko te taapiri i tetahi atu hanganga raraunga i runga i te kōpae ki te taha o te B-rakau - he rangitaki tauwhitinga, e mohiotia ana ko te tuhi-a-mua (WAL). He konae kei te mutunga ka tuhia te mahi e whakaarohia ana i mua i te whakarereketanga i te B-rakau ake. No reira, ki te kitea te pirau o nga raraunga i te wa e tirotirohia ana e ia ano, ka tirotirohia e te papaunga raraunga te raarangi kia pai ai.

Kua whiriwhiria e LMDB tetahi tikanga rereke hei tikanga whakararu i te he, e kiia nei ko te kape-i-tuhi. Ko te mea nui ko te kore e whakahou i nga raraunga i runga i tetahi whaarangi, ka kape katoa i te tuatahi ka mahia nga whakarereketanga katoa ki te kape.​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

I muri mai, kia waatea ai nga raraunga kua whakahouhia, me whakarereke te hono ki te node kua noho naianei i roto i tana putea matua. I te mea me whakarereke ano mo tenei, ka kape ano i mua. Ka haere tonu te tukanga tae noa ki te pakiaka. Ko te mea whakamutunga hei huri ko nga raraunga kei te wharangi meta.​​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ki te ohorere te tukinga o te tukanga i te wa e whakahou ana, karekau he wharangi meta hou e hanga, karekau ranei e tuhia katoatia ki te kōpae, ka he ana tana arowhai. I roto i enei take e rua, ka kore e taea te toro atu ki nga wharangi hou, engari kare nga wharangi tawhito e pa. Ka whakakorehia te hiahia mo te LMDB ki te tuhi i mua i te raarangi kia mau tonu ai nga raraunga. Ko te tikanga, ko te hanganga o te rokiroki raraunga i runga i te kōpae kua whakaahuatia i runga ake nei ka mau ki tana mahi. Ko te kore o te raarangi tauwhitinga marama tetahi o nga ahuatanga o LMDB e whakarato ana i te tere panui raraunga teitei.​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko te hua o te hoahoa, e kiia ana ko te rakau-apiri-anake B-rakau, ka tuku i te wehenga tauwhitinga me te whakaputa-maha. I roto i te LMDB, ko ia tauwhitinga tuwhera e hono ana ki te pakiaka rakau e tika ana inaianei. Kia oti ra ano te tauwhitinga, ko nga wharangi o te rakau e pa ana ki a ia e kore e whakarereketia, e whakamahia ano mo nga putanga hou o nga raraunga. i whakatuwherahia te tauwhitinga, ahakoa kei te kaha tonu te whakahou i te rokiroki i tenei wa. Koinei te ngako o te multiversion, ka waiho a LMDB hei puna raraunga pai mo ta tatou e aroha nei UICollectionView. I te whakatuwheratanga o te tauwhitinga, kaore he take ki te whakanui ake i te tapuwae mahara o te tono ma te tuku tere i nga raraunga o naianei ki etahi hanganga mahara-roto, mo te mataku kei noho kore. Ko tenei ahuatanga e wehewehe ana i te LMDB mai i te SQLite ano, kaore e taea te whakamanamana mo taua momo wehenga. I te whakatuwheratanga o nga whakawhitiwhitinga e rua i roto i te whakamutunga me te whakakore i tetahi rekoata i roto i tetahi o enei, ka kore e taea te whiwhi i te rekoata kotahi i roto i te rekoata tuarua e toe ana.

Ko te taha takahuri o te moni ko te nui ake o te kai o te mahara mariko. Ko te kiriata e whakaatu ana he aha te ahua o te hanganga papaaarangi mena ka whakarerekehia i te wa kotahi me nga whakawhitinga panui e 3 tuwhera e titiro ana ki nga momo putanga rereke. I te mea kaore e taea e LMDB te whakamahi ano i nga pona ka taea te toro atu mai i nga pakiaka e pa ana ki nga whakawhitinga o naianei, karekau he whiringa ma te toa engari ki te toha i tetahi atu pakiaka tuawha ki roto i te mahara ka kati ano i nga wharangi kua whakarereketia i raro.​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

I konei ka pai ki te maumahara i te waahanga kei runga i nga konae kua mapi maharatia. Te ahua nei ko te kai taapiri o te mahara mariko kaua e tino awangawanga i a maatau, na te mea kaore e whai waahi ki te maharatanga tapuwae o te tono. Heoi, i te wa ano, i tohuhia he tino pukumahi a iOS ki te tohatoha, kaore e taea e matou, penei i runga i te tūmau, i te papamahi ranei, te whakarato i te rohe LMDB o te 1 terabyte me te kore e whakaaro mo tenei ahuatanga. Mena ka taea, me ngana koe ki te whakapoto i te roanga o nga tauwhitinga.

4. Te hoahoa i te aronuinga raraunga ki runga ake o te API uara-matua

Me timata ta tatou tātaritanga API ma te titiro ki nga tangohanga taketake e whakaratohia ana e LMDB: te taiao me nga papaunga raraunga, nga taviri me nga uara, nga whakawhitinga me nga pehu.

He korero mo nga rarangi waehere

Ko nga mahi katoa i roto i te iwi whanui LMDB API e whakahoki ana i nga hua o a raatau mahi i roto i te ahua o te waehere hapa, engari i roto i nga raarangi ka whai ake ka whakakorehia tana manatoko mo te wa poto. marau C++ takai lmdbxx, i roto i nga hapa ka hangaia hei wehe C++.

Ko te huarahi tere ki te hono i te LMDB ki tetahi kaupapa mo iOS, macOS ranei, ka kii ahau i taku CocoaPod POSLMDB.

4.1. Nga tangohanga taketake

Taiao

hanganga MDB_env ko te putunga o te ahua o roto o te LMDB. Whānau mahi mua mdb_env ka taea e koe te whirihora i etahi o ona ahuatanga. I roto i te keehi ngawari, he penei te ahua o te miihini miihini.

mdb_env_create(env);​
mdb_env_set_map_size(*env, 1024 * 1024 * 512)​
mdb_env_open(*env, path.UTF8String, MDB_NOTLS, 0664);

I roto i te tono Mail.ru Cloud, i hurihia e matou nga uara taunoa o nga taapiri e rua anake.

Ko te mea tuatahi ko te rahi o te mokowā wāhitau mariko e maheretia ana te kōnae rokiroki. Engari, ahakoa i runga i te taputapu kotahi, ka rereke te uara motuhake mai i te oma ki te oma. Ki te whai whakaaro ki tenei ahuatanga o iOS, ko te nui o te rahinga rokiroki ka tohua. Ka timata mai i tetahi uara, ka haurua haere ki te mahi mdb_env_open e kore e hoki mai he hua rereke mai i ENOMEM. I roto i te ariā, he rereke ano te huarahi - tuatahi tohaina te iti o te mahara ki te miihini, katahi ka tae mai nga hapa, MDB_MAP_FULL, whakanuia. Heoi, he nui ake te tataramoa. Ko te take ko te tikanga mo te tohatoha mahara (remap) ma te whakamahi i te mahi mdb_env_set_map_size ka whakakore i nga hinonga katoa (nga pehu, nga whakawhitinga, nga taviri me nga uara) kua riro mai i te miihini. Ma te whai whakaaro ki tenei huringa o nga huihuinga i roto i te waehere ka arahi ki te raru nui. Mena, he mea nui ki a koe te mahara mariko, he take pea tenei kia ata titiro ki te marau kua haere ki mua. MDBX, kei roto i nga ahuatanga kua panuitia ko te "whakatikanga rahinga papaa raraunga aunoa i runga i te rere".

Ko te tawhā tuarua, ko te uara taunoa kaore i pai ki a maatau, ka whakahaere i nga miihini ki te whakarite i te haumaru miro. Kia aroha mai, i te iti rawa iOS 10 he raruraru ki te tautoko mo te miro rokiroki rohe. Mo konei, i roto i te tauira i runga ake nei, ka whakatuwherahia te putunga me te haki MDB_NOTLS. I tua atu i tenei, i tika ano marau C++ takai lmdbxxki te tapahi i nga taurangi me tenei huanga me roto.

Raraunga

He tauira B-rākau motuhake te pātengi raraunga, i kōrerohia i runga ake nei. Ko te whakatuwheratanga ka puta i roto i tetahi tauwhitinga, he ahua ke i te tuatahi.

MDB_txn *txn;​
MDB_dbi dbi;​
mdb_txn_begin(env, NULL, MDB_RDONLY, &txn);​
mdb_dbi_open(txn, NULL, MDB_CREATE, &dbi);​
mdb_txn_abort(txn);

Ae, ko te tauwhitinga i roto i te LMDB he hinonga rokiroki, ehara i te hinonga raraunga motuhake. Ma tenei ariā ka taea e koe te mahi i nga mahi ngota i runga i nga hinonga kei roto i nga papaa raraunga rereke. I roto i te ariā, ka whakatuwherahia te ahua o te whakatauira i nga ripanga i roto i te ahua o nga papaarangi rereke, engari i tetahi wa ka haere ahau i tetahi huarahi rereke, i whakaahuahia i raro nei.

Nga matua me nga uara

hanganga MDB_val ka whakatauira i te ariā o te matua me te uara. Karekau he mohio o te putunga mo o raatau kupu. Ki a ia, ko tetahi atu mea he huinga paita o te rahi. Ko te rahinga matua ko te 512 paita.

typedef struct MDB_val {​
    size_t mv_size;​
    void *mv_data;​
} MDB_val;​​

Ma te whakamahi i te whakatairite, ka tohua e te toa nga taviri i runga i te raupapa piki. Ki te kore e whakakapia e koe ki a koe ake, ka whakamahia te taunoa, ka whakarōpū i te paita-a-paita ki te raupapa papakupu.​

Nga mahi

Ko te hanganga tauwhitinga e whakaahuahia ana i roto i nga korero upoko o mua, no reira ka korero poto ahau i o raatau taonga matua:

  1. Ka tautoko i nga ahuatanga taketake katoa ACID: te ngota, te rite, te wehe me te pono. Kaore e taea e au te awhina engari kei te kite he pepeke mo te roa o te macOS me te iOS i whakatauhia ki MDBX. Ka taea e koe te panui atu i a raatau README.
  2. Ko te huarahi ki te miro maha e whakaahuatia ana e te kaupapa "kaituhi kotahi / maha nga kaipānui". Ka aukati nga kaituhi tetahi ki tetahi, engari kaua e aukati i nga kaipānui. Kaore nga kaipānui e aukati i nga kaituhi, i a raatau ano.
  3. Tautoko mo nga whakawhitinga kohanga.
  4. Tautoko Multiversion.

He tino pai te mahi maha i roto i te LMDB e hiahia ana ahau ki te whakaatu i roto i te mahi. Mai i te waehere i raro nei ka kite koe kei te mahi tonu ia tauwhitinga me te putanga o te putunga raraunga i mau tonu i te wa i whakatuwherahia ai, kua wehea rawatia mai i nga huringa katoa o muri mai. Ko te tiimata i te rokiroki me te taapiri i tetahi rekoata whakamatautau ki a ia kaore he mea whakamere, no reira ka waiho enei tikanga ki raro i te kaipahua.

Te taapiri i te urunga whakamatautau

MDB_env *env;
MDB_dbi dbi;
MDB_txn *txn;

mdb_env_create(&env);
mdb_env_open(env, "./testdb", MDB_NOTLS, 0664);

mdb_txn_begin(env, NULL, 0, &txn);
mdb_dbi_open(txn, NULL, 0, &dbi);
mdb_txn_abort(txn);

char k = 'k';
MDB_val key;
key.mv_size = sizeof(k);
key.mv_data = (void *)&k;

int v = 997;
MDB_val value;
value.mv_size = sizeof(v);
value.mv_data = (void *)&v;

mdb_txn_begin(env, NULL, 0, &txn);
mdb_put(txn, dbi, &key, &value, MDB_NOOVERWRITE);
mdb_txn_commit(txn);

MDB_txn *txn1, *txn2, *txn3;
MDB_val val;

// Открываем 2 транзакции, каждая из которых смотрит
// на версию базы данных с одной записью.
mdb_txn_begin(env, NULL, 0, &txn1); // read-write
mdb_txn_begin(env, NULL, MDB_RDONLY, &txn2); // read-only

// В рамках первой транзакции удаляем из базы данных существующую в ней запись.
mdb_del(txn1, dbi, &key, NULL);
// Фиксируем удаление.
mdb_txn_commit(txn1);

// Открываем третью транзакцию, которая смотрит на
// актуальную версию базы данных, где записи уже нет.
mdb_txn_begin(env, NULL, MDB_RDONLY, &txn3);
// Убеждаемся, что запись по искомому ключу уже не существует.
assert(mdb_get(txn3, dbi, &key, &val) == MDB_NOTFOUND);
// Завершаем транзакцию.
mdb_txn_abort(txn3);

// Убеждаемся, что в рамках второй транзакции, открытой на момент
// существования записи в базе данных, её всё ещё можно найти по ключу.
assert(mdb_get(txn2, dbi, &key, &val) == MDB_SUCCESS);
// Проверяем, что по ключу получен не абы какой мусор, а валидные данные.
assert(*(int *)val.mv_data == 997);
// Завершаем транзакцию, работающей хоть и с устаревшей, но консистентной базой данных.
mdb_txn_abort(txn2);

Ka tūtohu ahau kia whakamatau koe i taua mahi tinihanga me SQLite ka kite he aha te mea ka tupu.

Ko te Multiversion he tino pai ki te oranga o te kaiwhakawhanake iOS. Ma te whakamahi i tenei rawa, ka taea e koe te whakarereke i te reiti whakahou o te puna raraunga mo nga puka mata, i runga i nga whakaaro o nga wheako kaiwhakamahi. Hei tauira, me tango tetahi ahuatanga o te tono Mail.ru Cloud penei i te uta aunoa i nga ihirangi mai i te taiwhanga pāpāho punaha. Ma te hononga pai, ka taea e te kiritaki te taapiri i etahi whakaahua mo ia hekona ki te tūmau. Mena ka whakahou koe i muri i ia tangohanga UICollectionView me nga ihirangi pāpāho kei te kapua o te kaiwhakamahi, ka wareware koe ki te 60 fps me te panuku maeneene i roto i tenei mahi. Hei aukati i nga whakahōutanga mata auau, me whakawhāiti te tere o te huringa o te raraunga i roto i te take UICollectionViewDataSource.

Ki te kore e tautokohia e te patengi raraunga te maha o nga huringa ka taea e koe te mahi me te ahuatanga o naianei, katahi ka hanga he whakaahua-waa o nga raraunga ka hiahia koe ki te kape ki etahi hanganga raraunga-maumahara, ki tetahi ripanga rangitahi ranei. He tino utu tetahi o enei huarahi. I roto i te take o te rokiroki i roto i te mahara, ka whiwhi tatou i nga utu i roto i te mahara, na te penapena i nga mea hanga, me te waa, e pa ana ki nga huringa ORM nui. Mo te tepu rangitahi, he pai ake te utu o tenei, e whai tikanga ana i roto i nga keehi kore-iti.

Ko te otinga multiversion a LMDB he whakaoti i te raru o te pupuri i te puna raraunga i runga i te tino huatau. He nui noa ki te whakatuwhera i tetahi tauwhitinga me te voila - kia oti ra ano, ka whakamanahia te huinga raraunga ka whakatika. Ko te arorau mo tona tere whakahou kei roto katoa i nga ringaringa o te paparanga whakaaturanga, kaore he rauemi nui.

Pehu

Ka whakaratohia e nga pehu he tikanga mo te hurihuri i runga i nga takirua uara-matua ma te hikoi B-rakau. Ki te kore ratou, karekau e taea te whakatauira tika i nga ripanga kei roto i te putunga korero, ka huri tatou inaianei.

4.2. Whakatauira Ripanga

Ko te taonga o te raupapa matua ka taea e koe te hanga tangohanga taumata-tiketike penei i te ripanga ki runga ake o nga tangohanga taketake. Kia whai whakaaro tatou ki tenei mahi ma te whakamahi i te tauira o te ripanga matua o te kiritaki kapua, e keteroki ana i nga korero mo nga konae me nga kōpaki katoa a te kaiwhakamahi.

Aronuinga ripanga

Ko tetahi o nga ahuatanga noa mo te hanganga ripanga me te rakau kōpaki ko te kowhiringa o nga huānga katoa kei roto i te raarangi kua tohua. Rarangi Whakatikatika. Hei whakatinana i runga ake i te rokiroki uara-matua, me whakariterite nga ki o nga konae me nga kōpaki kia whakarōpūhia i runga i o raatau mema ki te raarangi matua. I tua atu, hei whakaatu i nga ihirangi o te whaiaronga i roto i te ahua e mohiotia ana e te kaiwhakamahi Windows (nga kopaki tuatahi, katahi ko nga konae, ka tohua kia rite ki te raarangi), me whakauru nga waahanga taapiri e rite ana ki te matua.

Ko te pikitia i raro nei e whakaatu ana me pehea, i runga i te mahi kei te ringaringa, te ahua o te ahua o nga ki te ahua o te huinga paita. Ko nga paita me te tautohu o te whaiaronga matua (whero) ka tuu i te tuatahi, katahi me te momo (matomato) me te hiku me te ingoa (puru). tikanga e hiahiatia ana. Ma te haere i nga taviri me te tohu tohu whero ano e homai ana ki a maatau nga uara e hono ana i roto i te raupapa me whakaatu ki te atanga kaiwhakamahi (ki te taha matau), me te kore e tono atu i muri i te tukatuka.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Whakaraupapa Kī me nga Uara

He maha nga tikanga mo te whakaraupapa i nga taonga kua oti te hanga i te ao. I te mea karekau he whakaritenga ke atu i te tere, i whiriwhiria e matou te tere tere mo matou - he putunga o te mahara e nohoia ana e tetahi tauira o te hanganga reo C. No reira, ka taea te whakatauira te ki o te huānga whaiaronga ki te hanganga e whai ake nei NodeKey.

typedef struct NodeKey {​
    EntityId parentId;​
    uint8_t type;​
    uint8_t nameBuffer[256];​
} NodeKey;

Hei whakaora NodeKey i roto i te rokiroki e hiahiatia ana i roto i te ahanoa MDB_val tuuhia te atatohu raraunga ki te wahitau o te timatanga o te hanganga, ka tatauhia te rahi me te mahi sizeof.

MDB_val serialize(NodeKey * const key) {
    return MDB_val {
        .mv_size = sizeof(NodeKey),
        .mv_data = (void *)key
    };
}

I roto i te upoko tuatahi mo nga paearu kowhiringa raraunga, i kii ahau ko te whakaiti i nga tohatoha hihiri i roto i nga mahi CRUD hei take whiriwhiri nui. Waehere mahi serialize e whakaatu ana me pehea i roto i te keehi o LMDB ka taea te karo i a raatau i te whakauru i nga rekoata hou ki roto i te papaunga raraunga. Ko te huinga paita taumai mai i te tūmau ka huri i te tuatahi ki roto i nga hanganga tāpae, katahi ka makahia ki roto i te rokiroki. Ki te whakaaro karekau he tohatoha hihiri i roto i te LMDB, ka taea e koe te tiki i tetahi ahuatanga tino pai na nga paerewa iOS - whakamahia te pumahara puranga anake hei mahi me nga raraunga i te huarahi katoa mai i te whatunga ki te kōpae!

Te raupapa taviri me te whakatairite rua

Ko te hononga raupapa matua e tohuhia ana e tetahi mahi motuhake e kiia ana he whakatairite. I te mea karekau he mohio o te miihini ki nga kupu o nga paita kei roto, karekau he whiringa ma te kaiwhakarite taunoa engari ki te whakarite i nga taviri ki te raupapa papakupu, ka huri ki te whakataurite paita-a-paita. He rite ki te heu ki te toki tapahi. Heoi, i nga keehi ngawari ka kitea e au tenei tikanga ka whakaaetia. Ko te rerekee e whakaahuahia ana i raro nei, engari i konei ka kite ahau i etahi rake e rua kua marara i tenei huarahi.

Ko te mea tuatahi hei maumahara ko te tohu mahara o nga momo raraunga taketake. No reira, i runga i nga taputapu Apple katoa, ka penapenahia nga taurangi tauoti ki te whakatakotoranga Endian Iti. Ko te tikanga ka noho te paita iti rawa ki te taha maui, karekau e taea te whakariterite tauoti ma te whakamahi i te whakataurite paita-a-paita. Hei tauira, ko te ngana ki te mahi me te huinga tau mai i te 0 ki te 511 ka puta te hua e whai ake nei.

// value (hex dump)
000 (0000)
256 (0001)
001 (0100)
257 (0101)
...
254 (fe00)
510 (fe01)
255 (ff00)
511 (ff01)

Hei whakaoti i tenei rapanga, me penapena nga tauoti ki roto i te matua ki te whakatakotoranga e tika ana mo te whakataurite paita-paita. Ko nga mahi mai i te whanau ka awhina koe ki te kawe i nga huringa e tika ana hton* (ina koa htons mo nga tau paita-rua mai i te tauira).

Ko te whakatakotoranga hei whakaatu i nga aho i roto i te hotaka, e mohio ana koe, he katoa hītori. Mena ko nga tohu o nga aho, me te whakawaehere hei tohu i a raatau i roto i te mahara, e kii ana ka nui ake i te kotahi paita mo ia ahua, he pai ake te whakarere i te whakaaro mo te whakamahi i te whakataurite taunoa.

Ko te mea tuarua hei maumahara matāpono whakahāngai whakahiato mara hanganga. Na ratou, ko nga paita me nga uara paru ka taea te hanga i roto i te maharatanga i waenga i nga mara, ko te tikanga, ka pakaruhia te tohatoha paita-paita. Hei whakakore i te para, me whakaatu e koe nga mara i roto i te raupapa kua tino tautuhia, me maumahara ki nga ture whakatikatika, me whakamahi ranei i te huanga i roto i te whakapuakanga hanganga. packed.

Te tono i nga taviri me te whakataurite o waho

He uaua rawa pea te arorau whakatairite matua mo te whakatairite-rua. Ko tetahi o nga take maha ko te waahi o nga waahi hangarau i roto i nga hanganga. Ka whakaatu ahau i to raatau ahuatanga ma te whakamahi i te tauira o te taviri mo tetahi huānga whaiaronga kua waia ki a tatou.

typedef struct NodeKey {​
    EntityId parentId;​
    uint8_t type;​
    uint8_t nameBuffer[256];​
} NodeKey;

Ahakoa tona ngawari, i roto i te nuinga o nga keehi ka pau te mahara. E 256 paita te roa o te kaitapa mo te ingoa, ahakoa he iti noa nga ingoa o te konae me te kōpaki e neke ake i te 20-30 pūāhua.

Ko tetahi o nga tikanga mo te arotau i te rahi o te rekoata ko te "kuti" kia rite ki te rahi. Ko tona ngako, ko nga mea o roto o nga mara taurangi-roa katoa ka rongoa ki roto i te parepare i te pito o te hanganga, ka penapenahia o raatau roa ki nga taurangi motuhake. NodeKey ka hurihia penei.

typedef struct NodeKey {​
    EntityId parentId;​
    uint8_t type;​
    uint8_t nameLength;​
    uint8_t nameBuffer[256];​
} NodeKey;

I tua atu, i te wa e raupapa ana, kaore te rahi o nga raraunga i tohua sizeof te hanganga katoa, me te rahi o nga mara katoa he roa kua whakaritea me te rahi o te waahanga o te papaaru.

MDB_val serialize(NodeKey * const key) {
    return MDB_val {
        .mv_size = offsetof(NodeKey, nameBuffer) + key->nameLength,
        .mv_data = (void *)key
    };
}

Ko te hua o te refactoring, i whiwhi moni penapena nui i roto i te waahi e nohoia ana e nga ki. Heoi, na te waahi hangarau nameLength, kua kore e pai te whakatairite-rua taunoa mo te whakataurite matua. Ki te kore tatou e whakakapi ki a tatou ake, ko te roa o te ingoa ka nui ake te take ki te whakariterite i te ingoa ake.

Ka taea e LMDB ia papaunga raraunga ki a ia ake mahi whakataurite matua. Ka mahia tenei ma te whakamahi i te mahi mdb_set_compare i mua i te whakatuwheratanga. Mo nga take e marama ana, kaore e taea te whakarereke i te roanga o te oranga o te putunga raraunga. Ka whakawhiwhia e te kaiwhakariterite nga taviri e rua i roto i te whakatakotoranga rua hei whakaurunga, a, i te putanga ka whakahokia mai te hua whakatairite: iti iho i te (-1), nui ake i te (1) he rite ranei ki te (0). Pseudocode mo NodeKey te ahua o tera.

int compare(MDB_val * const a, MDB_val * const b) {​
    NodeKey * const aKey = (NodeKey * const)a->mv_data;​
    NodeKey * const bKey = (NodeKey * const)b->mv_data;​
    return // ...
}​

I te mea he rite te momo o nga taviri katoa i roto i te putunga raraunga, ko te tuku herekore i o raatau tohu paita ki te momo hanganga matua tono he ture. Kotahi ano te ahua o konei, engari ka korerohia i raro iho i te waahanga "Rekoata Panui".

Whakaraupapa Uara

Ka tino kaha te mahi a LMDB me nga ki o nga rekoata rongoa. Ko ta raatau whakataurite ki a ratau ka puta i roto i te anga o tetahi mahi tono, a ko te mahinga o te otinga katoa ka whakawhirinaki ki te tere o te kaiwhakariterite. I roto i te ao tino pai, ko te kaiwhakariterite-rua taunoa me nui ki te whakatairite i nga taviri, engari mena me whakamahi koe i a koe ake, me tere te mahi mo te whakakore i nga kii kei roto.

Karekau te putunga korero e aro nui ki te wahanga uara o te rekoata (uara). Ko tana hurihanga mai i te tohu paita ki tetahi mea ka puta noa ina kua hiahiatia e te waehere tono, hei tauira, ki te whakaatu i runga i te mata. I te mea he onge noa tenei, ko nga whakaritenga tere mo tenei tikanga kaore i te tino hirahira, a, i roto i tana whakatinanatanga he nui ake te waatea ki te aro ki te waatea. NSKeyedArchiver.

NSData *data = serialize(object);​
MDB_val value = {​
    .mv_size = data.length,​
    .mv_data = (void *)data.bytes​
};

Heoi ano, i etahi wa he mea nui tonu te mahi. Hei tauira, i te wa e penapena ana nga korero meta mo te hanganga konae o te kapua kaiwhakamahi, ka whakamahia e matou te putunga mahara o nga taonga. Ko te mea nui o te mahi ki te whakaputa i tetahi whakaaturanga raupapa mo ratou ko te mea ko nga huānga o te raarangi kua whakatauirahia e te raupapa o nga karaehe.​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Hei whakatinana i roto i te reo C, ka whakauruhia nga waahi motuhake o nga uri ki roto i nga hanganga motuhake, a, ko to raatau hononga ki te turanga ka tohua ma te waahi o te momo uniana. Ko nga korero o te uniana ka tohua ma te momo huanga hangarau.

typedef struct NodeValue {​
    EntityId localId;​
    EntityType type;​
    union {​
        FileInfo file;​
        DirectoryInfo directory;​
    } info;​
    uint8_t nameLength;​
    uint8_t nameBuffer[256];​
} NodeValue;​

Te taapiri me te whakahou i nga rekoata

Ko te kī rangatū me te uara ka taea te taapiri atu ki te toa. Ki te mahi i tenei, whakamahia te mahi mdb_put.

// key и value имеют тип MDB_val​
mdb_put(..., &key, &value, MDB_NOOVERWRITE);

I te wahanga whirihoranga, ka whakaaetia, ka aukatihia ranei te rokiroki ki te penapena i nga rekoata maha me te taviri kotahi.Ki te rahuitia te taarua o nga taviri, katahi ka whakauruhia he rekoata, ka taea e koe te whakatau mena ka whakaaetia te whakahou i te rekoata o naianei, kaore ranei. Mena ka puta noa te pakaru na te hapa o te waehere, ka taea e koe te tiaki i a koe ma te tohu i te haki. NOOVERWRITE.

Panui pukapuka

Hei panui i nga rekoata i LMDB, whakamahia te mahi mdb_get. Mena ka tohuhia te takirua uara-matua e nga hanganga i tukuna i mua, ka penei te ahua o tenei tikanga.

NodeValue * const readNode(..., NodeKey * const key) {​
    MDB_val rawKey = serialize(key);​
    MDB_val rawValue;​
    mdb_get(..., &rawKey, &rawValue);​
    return (NodeValue * const)rawValue.mv_data;​
}

Ko te raarangi e whakaatuhia ana me pehea e taea ai e koe te whakakore i nga tohatoha hihiko kaore i te wa e tuhi ana, engari i te panui raraunga. I ahu mai i te mahi mdb_get titiro tika te atatohu ki te wahitau mahara mariko kei reira te putunga raraunga e rongoa ai te tohu paita o te ahanoa. Inaa, ka whiwhi tatou i tetahi momo ORM e whakarato ana i te tere panui raraunga teitei tata kore utu. Ahakoa te ataahua katoa o te huarahi, he mea tika kia mahara ki etahi ahuatanga e pa ana ki a ia.

  1. Mo te tauwhitinga panui anake, ka whakamanahia te tohu tohu ki te hanganga uara ka noho mana anake kia kati ra ano te tauwhitinga. Ka rite ki te korero i mua ake nei, ko nga wharangi B-rakau kei reira tetahi mea, he mihi ki te maataapono kape-tuhi-tuhi, ka noho kore e rereke i te mea ka tohutorohia e te kotahi neke atu. I te wa ano, ka oti te tauwhitinga whakamutunga e pa ana ki a raatau, ka taea te whakamahi ano i nga wharangi mo nga raraunga hou. Mena e tika ana kia ora nga taonga i te tauwhitinga i puta ai, me kape tonu.
  2. Mo te tauwhitinga panui panui, ka whai mana te tohutoro ki te hanganga uara ka puta noa tae noa ki te tikanga whakarereke tuatahi (te tuhi, te muku raraunga ranei).
  3. Ahakoa te hanganga NodeValue ehara i te mea kua oti, engari kua kuti (tirohia te waahanga "Te ota ki te whakamahi i te whakataurite o waho"), ka taea e koe te uru humarie ki ona mara ma te tohu. Ko te mea nui kia kaua e whakakorehia!
  4. Kaua rawa e whakarereketia te hanganga ma te tohu tohu kua riro. Ko nga huringa katoa me mahi ma te tikanga anake mdb_put. Heoi, ahakoa te kaha o to hiahia ki te mahi i tenei, kare e taea, i te mea ko te waahi mahara kei reira tenei hanganga kua maapeta ki te aratau panui anake.
  5. Mahia ano he konae ki te waahi wahitau tukanga mo te kaupapa, hei tauira, te whakanui ake i te rahi o te rokiroki ma te whakamahi i te mahi mdb_env_set_map_size ka whakakore rawa i nga whakawhitinga katoa me nga hinonga e pa ana ki te nuinga me te tohu tohu ki etahi mea.

Ka mutu, ko tetahi atu waahanga he tino hianga e kore e uru ki tetahi atu waahanga noa te whakaatu i tona hiranga. I roto i te upoko mo te B-rakau, i hoatu e ahau he hoahoa mo te whakatakotoranga o ona wharangi hei maharatanga. I muri mai i tenei ko te wahitau o te timatanga o te kaitarai me nga raraunga raupapa ka taea te noho noa. Na tenei, i whakawhiwhia te tohu ki a raatau i roto i te hanganga MDB_val me te whakaheke ki te tohu tohu ki tetahi hanganga, ka puta ke te kore e hono i roto i te keehi whanui. I te wa ano, ko nga hoahoanga o etahi maramara (i roto i te keehi o iOS ko te armv7 tenei) e kii ana ko te wahitau o tetahi raraunga he maha o te rahi o te kupu miihini, me etahi atu kupu, te rahi o te punaha ( mo te armv7 he 32 moka). I etahi atu kupu, he mahi penei *(int *foo)0x800002 ki runga ki a ratou he rite ki te mawhiti me te arahi ki te whakamate me te whakatau EXC_ARM_DA_ALIGN. E rua nga huarahi hei karo i taua mate pouri.

Ko te mea tuatahi ka heke ki te kape tuatahi o nga raraunga ki roto i te hanganga e marama ana. Hei tauira, i runga i te whakataurite ritenga ka whakaatuhia tenei e whai ake nei.

int compare(MDB_val * const a, MDB_val * const b) {
    NodeKey aKey, bKey;
    memcpy(&aKey, a->mv_data, a->mv_size);
    memcpy(&bKey, b->mv_data, b->mv_size);
    return // ...
}

Ko tetahi atu huarahi ko te whakamohio i te kaitoha i mua atu karekau pea nga hanganga uara-matua e hono-ahua aligned(1). I runga i te ARM ka taea e koe te whai hua ano ki te whakatutuki me te whakamahi i te huanga kapi. Ma te whakaaro ka awhina ano hoki ki te arotau i te waahi e nohoia ana e te hanganga, he pai ake tenei tikanga ki ahau, ahakoa приводит ki te pikinga o te utu mo nga mahi urunga raraunga.

typedef struct __attribute__((packed)) NodeKey {
    uint8_t parentId;
    uint8_t type;
    uint8_t nameLength;
    uint8_t nameBuffer[256];
} NodeKey;

Uiui awhe

Hei huri i te roopu rekoata, ka tukuna e LMDB he tangohanga pehu. Me titiro me pehea te mahi me te whakamahi i te tauira o te ripanga me nga metadata kapua kaiwhakamahi kua mohio tatou.

Hei waahanga whakaatu i te rarangi o nga konae kei roto i te raarangi, me rapu nga taviri katoa e hono ana nga konae tamariki me nga kōpaki. I roto i nga waahanga o mua i tohua e matou nga ki NodeKey na te mea he mea whakahau na te ID o te raarangi matua. No reira, ma te hangarau, ko te mahi ki te tiki i nga ihirangi o te kōpaki ka heke ki te whakatakoto i te pehu ki te rohe o runga o te roopu o nga taviri me te tohu tuatahi katahi ka huri ki te rohe o raro.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko te rohe o runga ka kitea tika ma te rapu raupapa. Hei mahi i tenei, ka tuuhia te pehu ki te timatanga o te rarangi katoa o nga taviri i roto i te paataka raraunga ka piki ake kia puta ra ano tetahi kii me te tohu tohu o te raarangi matua i raro iho. E rua nga ngoikoretanga o tenei huarahi:

  1. Te whīwhiwhi rapu rārangi, ahakoa, e mōhiotia ana, i roto i ngā rākau whānui me te rākau-B ka taea te mahi i roto i te wā taukohiko.​
  2. Mo te kore noa, ko nga wharangi katoa i mua i te mea e rapuhia ana ka hikina mai i te konae ki te mahara matua, he tino utu nui.

Waimarie, ko te LMDB API e whakarato ana i tetahi huarahi whai hua ki te tuu i te pehu i te tuatahi. Hei mahi i tenei, me whakaputa e koe he taviri e tino kitea ana he iti ake te uara ki te taviri kei te rohe o runga o te waahi. Hei tauira, e pa ana ki te rarangi i te ahua i runga ake nei, ka taea e tatou te hanga i tetahi kii kei roto te mara parentId ka rite ki te 2, ka whakakiia nga toenga katoa ki te kore. Ko taua kī kua whakakiia tetahi waahanga ka tukuna ki te whakauru mahi mdb_cursor_get e tohu ana i te mahi MDB_SET_RANGE.

NodeKey upperBoundSearchKey = {​
    .parentId = 2,​
    .type = 0,​
    .nameLength = 0​
};​
MDB_val value, key = serialize(upperBoundSearchKey);​
MDB_cursor *cursor;​
mdb_cursor_open(..., &cursor);​
mdb_cursor_get(cursor, &key, &value, MDB_SET_RANGE);

Mena ka kitea te rohenga o runga o te roopu o nga taviri, katahi ka huri ano tatou ki runga kia tutaki, ka tutaki ranei te ki ki tetahi atu parentId, karekau ranei e pau nga kii.​

do {​
    rc = mdb_cursor_get(cursor, &key, &value, MDB_NEXT);​
    // processing...​
} while (MDB_NOTFOUND != rc && // check end of table​
         IsTargetKey(key));    // check end of keys group​​

Ko te mea pai ko te waahanga o te whitiwhitinga ma te whakamahi mdb_cursor_get, ehara i te mea ko te matua anake, engari ko te uara. Mena, ki te whakatutuki i nga tikanga tauira, me tirotiro e koe, i roto i era atu mea, nga mara mai i te waahanga uara o te rekoata, katahi ka tino waatea me te kore he tohu taapiri.

4.3. Te whakatauira i nga hononga i waenga i nga ripanga

I tenei wa, kua taea e matou te whai whakaaro ki nga ahuatanga katoa o te hoahoa me te mahi me te papaa raraunga kotahi-tepu. Ka taea e tatou te kii ko te ripanga he huinga rekoata kua tohua he rite te momo takirua uara-matua. Ki te whakaatu koe i tetahi kī hei tapawhā hāngai me te uara e hono ana hei parallelepiped, ka whiwhi koe i tetahi hoahoa ataata o te papaarangi.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Heoi, i roto i te ora tonu karekau e taea te ora me te iti o te whakaheke toto. I te nuinga o nga wa i roto i te putunga raraunga ka hiahiatia, tuatahi, kia maha nga ripanga, tuarua, ki te whiriwhiri i roto i te raupapa rereke mai i te matua matua. Ko tenei waahanga whakamutunga e arotahi ana ki nga take o to raatau hanganga me o raatau hononga.

Nga ripanga taupū

Ko te tono kapua he waahanga "Taiwhanga". Ka whakaatu i nga ihirangi pāpāho mai i te kapua katoa, kua tohua ma te ra. Hei whakatinana pai i taua kowhiringa, i te taha o te ripanga matua me hanga e koe tetahi atu me tetahi momo taviri hou. Ka mau he āpure me te rā i waihangatia ai te kōnae, ka noho hei paearu kōmaka tuatahi. Na te mea he rite nga raraunga ki nga taviri o te ripanga matua, ka kiia ko nga taviri taupū. I roto i te pikitia i raro nei kua tohua ki te karaka.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Hei wehe i nga taviri o nga ripanga rereke mai i a raatau i roto i te papaunga raraunga kotahi, i taapirihia he papaapure hangarau taapiri ki a raatau katoa. Ma te noho hei kaupapa matua mo te tohatoha, ka tutuki i a maatau te whakarōpūtanga o nga taviri i te tuatahi ma nga ripanga, i roto i nga ripanga - i runga i o maatau ake ture.​

Ko te kī taupū e tohu ana i nga raraunga rite ki te matua matua. Ko te whakatinanatanga ngawari o tenei rawa ma te hono ki a ia he kape o te waahanga uara o te matua matua kaore i te tino pai mai i nga tirohanga maha:

  1. Mo te waahi ka tangohia, ka tino whai rawa nga metadata.
  2. Mai i te tirohanga mahi, mai i te wa e whakahou ana i te metadata o te node, me tuhi ano koe ma te whakamahi i nga taviri e rua.
  3. Mai i te tirohanga o te tautoko waehere, ki te wareware tatou ki te whakahou i nga raraunga mo tetahi o nga taviri, ka whiwhi tatou i te pepeke o te koretake o nga raraunga i roto i te rokiroki.

I muri mai, ka whakaarohia me pehea te whakakore i enei hapa.

Te whakarite hononga i waenga i nga tepu

He pai te tauira mo te hono i te ripanga taupū ki te ripanga matua "matua hei uara". E ai ki tona ingoa, ko te wahanga uara o te rekoata taurangi he kape o te uara matua matua. Ka whakakorehia e tenei huarahi nga ngoikoretanga katoa kua whakahuahia i runga ake nei e pa ana ki te penapena i tetahi kape o te waahanga uara o te rekoata tuatahi. Ko te utu anake ko te whiwhi i te uara ma te kii taurangi, me mahi kia 2 nga patai ki te paataka raraunga, kaua ki te kotahi. Ahangahanga, he penei te ahua o te aronuinga putunga raraunga.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko tetahi atu tauira mo te whakarite hononga i waenga i nga ripanga ko "kī nui". Ko te mea nui ko te taapiri i etahi atu huanga ki te taviri, ehara i te mea mo te tohatoha, engari mo te hanga ano i te paatene e pa ana. te horopaki o nga angamahi iOS motuhake, ka hoatu e ahau he korero tito noa, engari he tauira maamaa ake.​

He wharangi kei a nga kiritaki pūkoro kapua e whakaatu ana i nga konae me nga kōpaki katoa i tohatohahia e te kaiwhakamahi ki etahi atu tangata. I te mea he iti noa nga konae penei, a he maha nga momo korero motuhake e pa ana ki te panui e pa ana ki a raatau (ko wai ka whakawhiwhia ki a raatau, he aha nga mana, me etahi atu), kaore e tika te taumaha i te waahanga uara o te tuhia ki te ripanga matua me taua mea. Heoi, ki te hiahia koe ki te whakaatu i aua momo konae tuimotu, me penapena tonu koe ki tetahi waahi. Ko te otinga maori ko te hanga tepu motuhake mo taua mea. I roto i te hoahoa i raro nei, kua whakamuahia tana matua ki te "P", ka taea te whakakapi i te "ingoa ingoa" ki te uara motuhake ake "nga korero mo te iwi".​

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko nga metadata ahurei katoa, mo te penapena i hangaia te teepu hou, ka tuu ki te wahanga uara o te rekoata. I te wa ano, kaore koe e hiahia ki te taapiri i nga raraunga e pa ana ki nga konae me nga kōpaki kua penapenahia ki te ripanga matua. Engari, ko nga raraunga taapiri ka taapirihia ki te matua "P" i roto i te ahua o te "ID node" me nga mara "waatohu". He mihi ki a raatau, ka taea e koe te hanga i tetahi tohu tohu, ka taea e koe te tiki i te matua matua, mai i te mutunga, ka taea e koe te tiki metadata node.

Whakamutunga

He pai ta matou aromatawai i nga hua o te whakatinanatanga o LMDB. Whai muri i tera, ka heke te maha o nga tono kare e 30%.

Ko te whiti me te rawakore o te LMDB papaa raraunga matua-uara i roto i nga tono iOS

Ko nga hua o nga mahi i mahia i tua atu i te roopu iOS. I tenei wa, ko tetahi o nga waahanga matua "Kōnae" i roto i te tono Android kua huri ano ki te whakamahi i te LMDB, me etahi atu waahanga kei te haere. Ko te reo C, kei roto nei te toa uara-matua e whakatinanahia ana, he awhina pai ki te hanga anga tono huri noa i a ia i roto i te C++. I whakamahia he kaihanga waehere ki te hono marie i te whare pukapuka C++ ka puta me te waehere turanga i Objective-C me Kotlin Djinni mai i Dropbox, engari he korero rereke tera.

Source: will.com

Tāpiri i te kōrero