3. Nā ʻano like ʻole o nā hale i ka wā e hoʻohana ai i ka honua
ʻO kahi hale e like me ka lāʻau kauoha ʻia nā hihia kūikawā like ʻole. E noʻonoʻo kākou i nā mea i loaʻa ka waiwai kūpono i ka hana ʻana me ka honua.
3.1 Ka hihia kūikawā 1. Hoʻokahi node me nā lālā ʻole
Hiki ke hoʻohana ʻia nā globals ʻaʻole wale e like me kahi array, akā e like me nā loli maʻamau. No ka laʻana, ma ke ʻano he counter:
Set ^counter = 0 ; установка счётчика
Set id=$Increment(^counter) ; атомарное инкрементирование
I kēia hihia, hiki ke loaʻa nā lālā o ka honua, me ka hoʻohui ʻana i kona ʻano. ʻAʻole hoʻokaʻawale kekahi i kekahi.
3.2 Ka hihia kūikawā 2. Hoʻokahi vertex a me nā lālā he nui
Ma keʻano laulā, he kumu waiwai kī maʻamau kēia. A inā mākou e mālama i kahi tuple o nā waiwai ma ke ʻano he waiwai, e loaʻa iā mākou kahi papa maʻamau me kahi kī nui.
No ka hoʻokō ʻana i kahi papaʻaina ma ka honua, pono mākou e hana i nā lālani iā mākou iho mai nā koina kolamu, a laila mālama iā lākou i ka honua me ke kī mua. I mea e hiki ai ke puunaue hou i ke kaula i na kolamu i ka heluhelu ana, hiki ia oe ke hoohana:
- nā huaʻōlelo hoʻokaʻawale.
Set ^t(id1) = "col11/col21/col31" Set ^t(id2) = "col12/col22/col32"
- he hoʻolālā paʻa kahi e noho ai kēlā me kēia kahua i kahi helu paita i koho mua ʻia. E like me ka hana ʻana i nā waihona pili.
- he hana kūikawā $LB (loaʻa i loko o ka Cache), e hana ana i ke kaula o nā waiwai.
Set ^t(id1) = $LB("col11", "col21", "col31") Set ^t(id2) = $LB("col12", "col22", "col32")
ʻO ka mea e mahalo ai, ʻaʻole paʻakikī ka hoʻohana ʻana i nā honua e hana i kahi mea e like me nā helu helu lua ma nā ʻikepili pili. E kāhea kākou i kēlā mau hale index globals. He lāʻau kōkua ka index global no ka ʻimi wikiwiki ʻana i nā kahua ʻaʻole i ʻāpana o ke kī nui o ka honua nui. No ka hoʻopiha a hoʻohana ʻana, pono ʻoe e kākau i nā code hou.
E hana kākou i papa kuhikuhi honua ma ke kolamu mua.
Set ^i("col11", id1) = 1
Set ^i("col12", id2) = 1
I kēia manawa, e ʻimi wikiwiki i ka ʻike ma ke kolamu mua, pono mākou e nānā i ka honua ^i a e huli i nā kī kumu (id) e pili ana i ka waiwai i makemake ʻia o ke kolamu mua.
Ke hoʻokomo i kahi waiwai, hiki iā mākou ke hana koke i ka waiwai a me ka index globals no nā māla i makemake ʻia. A no ka hilinaʻi, e hoʻopili mākou i nā mea āpau i kahi kālepa.
TSTART
Set ^t(id1) = $LB("col11", "col21", "col31")
Set ^i("col11", id1) = 1
TCOMMIT
Nā kikoʻī e pili ana i ka hana ʻana ma M
E holo wikiwiki ana ia mau papa e like me ka ʻikepili kuʻuna (a ʻoi aku ka wikiwiki) inā kākau ʻia nā hana no ka hoʻokomo ʻana/hōʻano a holoi i nā lālani ma COS/M a hōʻuluʻulu ʻia.Ua nānā au i kēia ʻōlelo me nā hoʻāʻo ʻana ma ka nui INSERT a me SELECT i hoʻokahi papaʻaina ʻelua kolamu, me ka hoʻohana ʻana i nā kauoha TSTART a me TCOMMIT (transactions).
ʻAʻole au i hoʻāʻo i nā hiʻohiʻona paʻakikī me ka loaʻa like ʻana a me nā hana like.
Me ka ʻole o ka hoʻohana ʻana i nā kālepa, ʻo ka helu hoʻokomo ʻana he 778 inserts / kekona no kēlā me kēia miliona waiwai.
Me 300 miliona mau waiwai - 422 hoʻokomo / kekona.
I ka hoʻohana ʻana i nā kālepa - 572 inserts/second no 082M inserts. Ua hana ʻia nā hana a pau mai ka M code i hui ʻia.
He mea maʻamau ka paʻakikī, ʻaʻole SSD. RAID5 me Kākau-hoʻi. Phenom II 1100T kaʻina hana.
No ka ho'āʻoʻana i kahi waihona SQL ma keʻano like, ponoʻoe e kākau i kahi kaʻina hana mālama e hana i nā hoʻokomo i loko o ka loop. Ke hoʻāʻo nei ʻo MySQL 5.5 (InnoDB storage), me ka hoʻohana ʻana i kēia ʻano i loaʻa iaʻu nā helu ma mua o 11K hoʻokomo i kekona.
ʻAe, ʻoi aku ka paʻakikī o ka hoʻokō ʻana i nā papa ma ka honua ma mua o nā ʻikepili pili. No laila, loaʻa iā SQL nā ʻikepili ʻenehana ma ka honua e hoʻomaʻamaʻa i ka hana me ka ʻikepili tabular.
Ma keʻano laulā, inā ʻaʻole e loli pinepine ka schema data, ʻaʻole koʻikoʻi ka wikiwiki o ka hoʻokomo ʻana a hiki ke hōʻike maʻalahi ʻia ka ʻikepili holoʻokoʻa ma ke ʻano o nā papa maʻamau, a laila ʻoi aku ka maʻalahi o ka hana me SQL, no ka mea, hāʻawi ia i kahi kiʻekiʻe o ka abstraction. .
Ma kēia hihia kūikawā makemake wau e hōʻike i kēlā Hiki i nā globals ke hana ma ke ʻano he mea kūkulu no ka hana ʻana i nā ʻikepili ʻē aʻe. E like me kahi hui i hiki ke kākau ʻia i nā ʻōlelo ʻē aʻe. Eia nā laʻana o ka hana ʻana i nā analogues ma ka honua
Inā pono ʻoe e hana i kekahi ʻano ʻikepili maʻamau ʻole me ka hoʻoikaika liʻiliʻi, a laila pono ʻoe e nānā i ka honua.
3.3 Ka hihia kūikawā 3. ʻElua lāʻau pae, ʻo kēlā me kēia node o ka pae ʻelua he helu paʻa o nā lālā.
Manaʻo paha ʻoe: he hoʻokō ʻokoʻa kēia o nā papa ma ka honua. E hoʻohālikelike kākou i kēia hoʻokō me ka mua.
Nā papa ma luna o kahi lāʻau pae ʻelua vs. ma kahi lāʻau pae hoʻokahi.
Минусы
Плюсы
- ʻOi aku ka mālie no ka hoʻokomo ʻana, no ka mea pono ʻoe e hoʻonohonoho i ka helu o nā nodes e like me ka helu o nā kolamu.
- ʻOi aku ka hoʻohana ʻana i ka lewa disk. No ka mea, ʻo nā papa kuhikuhi honua (i hoʻomaopopo ʻia he mau kuhikuhi kikoʻī) me nā inoa kolamu e lawe i ka hakahaka disk a ua kope ʻia no kēlā me kēia lālani.
- ʻOi aku ka wikiwiki o ke komo ʻana i nā waiwai o nā kolamu pākahi, no ka mea ʻaʻohe pono e paʻi i ke kaula. Wahi a kaʻu mau hoʻāʻo, ʻoi aku ka wikiwiki o 11,5% ma nā kolamu 2 a ʻoi aku ka nui o nā kolamu.
- E maʻalahi ka hoʻololi ʻana i ka ʻikepili
- ʻOi aku ka ʻōlelo akaka
Panina: ʻaʻole no nā mea a pau. No ka mea, ʻo ka wikiwiki kekahi o nā pōmaikaʻi nui loa o ka honua, ʻaʻohe wahi liʻiliʻi o ka hoʻohana ʻana i kēia hoʻokō, no ka mea, ʻaʻole ʻoi aku ka wikiwiki o ka hana ma mua o nā papa ma nā ʻikepili pili.
3.4 Hihia nui. Nā lāʻau a me nā lāʻau kauoha
ʻO kēlā me kēia ʻano ʻikepili i hiki ke hōʻike ʻia ma ke ʻano he kumulāʻau kūpono loa me nā honua.
3.4.1 Nā mea me nā kumuhana
ʻO kēia kahi o ka hoʻohana kuʻuna o ka honua. I ka lāʻau lapaʻau he nui ka nui o nā maʻi, nā lāʻau lapaʻau, nā hōʻailona, a me nā ʻano lapaʻau. He mea kūponoʻole ka hanaʻana i kahi papaʻaina me kahi miliona mau māla no kēlā me kēia maʻi. Eia kekahi, ʻo 99% o nā māla e nele.
E noʻonoʻo i kahi waihona SQL o nā papa: "maʻi" ~ 100 kahua, "Lapaʻau" - 000 mau kahua, "Therapy" - 100 mau kahua, "Complications" - 000 mau kahua, etc. a laila. A i ʻole hiki iā ʻoe ke hana i kahi waihona o nā kaukani papa ʻaina, kēlā me kēia no kahi ʻano maʻi kūikawā (a hiki iā lākou ke overlap!), nā lāʻau lapaʻau, nā lāʻau lapaʻau, a me nā kaukani hou aku no nā pilina ma waena o kēia mau papa.
He kūpono nā Globals no ka lāʻau lapaʻau, ʻoiai lākou e ʻae iā ʻoe e hana no kēlā me kēia maʻi i ka wehewehe pololei o kāna mōʻaukala olakino, nā ʻano lapaʻau like ʻole, a me nā hana o nā lāʻau lapaʻau, ma ke ʻano o kahi lāʻau, me ka ʻole o ka hoʻopau ʻana i kahi diski ʻokoʻa ma nā kolamu ʻole, e like me ka ka hihia ma ka hihia pili.
ʻO ka hoʻohana ʻana i ka honua he mea maʻalahi ia e hana i kahi waihona me ka ʻikepili e pili ana i nā kānaka, i ka wā he mea nui e hōʻiliʻili a hoʻonohonoho i ka nui o nā ʻike like ʻole e pili ana i ka mea kūʻai aku. Pono kēia i ka lāʻau lapaʻau, ka waihona kālā, ke kūʻai aku, ka waihona a me nā wahi ʻē aʻe
.
ʻOiaʻiʻo, ma SQL hiki iā ʻoe ke hoʻohālike i kahi lāʻau me nā papa liʻiliʻi wale nō (
ʻAʻole ia he mea huna i ka hoʻololi ʻana i ka schema data ma nā papa nui (ALTER TABLE) hiki ke lawe i kahi manawa kūpono. ʻO MySQL, no ka laʻana, hana ʻo ALTER TABLE ADD|DROP COLUMN ma ke kope piha ʻana i ka ʻike mai ka papaʻaina kahiko i ka papaʻaina hou (i hoʻāʻo ʻia ʻo MyISAM, InnoDB engines). Hiki iā ia ke kau i kahi waihona hana me nā piliona o nā moʻolelo no nā lā, inā ʻaʻole he pule.
ʻO ka hoʻololi ʻana i ke ʻano o ka ʻikepili inā mākou e hoʻohana i nā globals ʻaʻohe mea e uku iā mākou. I kēlā me kēia manawa hiki iā mākou ke hoʻohui i nā waiwai hou e pono ai mākou i kekahi mea, ma kēlā me kēia pae o ka hierarchy. Hiki ke hoʻololi ʻia nā hoʻololi e pili ana i ka hoʻololi ʻana i nā lālā ma ke kua ma kahi waihona e holo ana.
No laila, i ka wā e mālama ai i nā mea me ka nui o nā waiwai koho, he koho maikaʻi loa ka honua.
Eia kekahi, e hoʻomanaʻo wau iā ʻoe he hikiwawe ke komo i kekahi o nā waiwai, ʻoiai ma ka honua nā ala āpau he B-lāʻau.
ʻO nā ʻikepili honua, ma ke ʻano laulā, he ʻano o ka waihona waihona palapala me ka hiki ke mālama i ka ʻike hierarchical. No laila, hiki i nā waihona waihona palapala ke hoʻokūkū me nā honua ma ke kahua o ka mālama ʻana i nā moʻolelo olakino. Akā, ʻaʻole like loa iaE lawe kākou iā MongoDB no ka hoʻohālikelike. Ma keia kahua lilo ia i ka honua no kēia mau kumu:
- Nui palapala. He kikokikona ka waihona waihona ma ke ʻano JSON (ʻoi aku ka pololei o BSON) me ka nui o ka nui ma kahi o 16MB. Ua hana pono ʻia ka palena i ʻole e lohi ka waihona JSON i ka wā e hoʻopaʻa ʻia inā mālama ʻia kahi palapala JSON nui i loko a laila komo ʻia e nā māla. Pono i loko o kēia palapala nā ʻike a pau e pili ana i ka mea maʻi. ʻIke mākou a pau i ka mānoanoa o nā moʻolelo maʻi. ʻO ka nui kāleka kiʻekiʻe o 16MB e hoʻopau koke i nā poʻe maʻi i loaʻa nā kāleka maʻi i nā faila MRI, nā kiʻi X-ray a me nā haʻawina ʻē aʻe. Ma kahi lālā o ka honua hiki iā ʻoe ke loaʻa i nā gigabytes a me nā terabytes o ka ʻike. Ma ke kumu, hiki iā mākou ke hoʻopau i kēia, akā e hoʻomau wau.
- Ka manawa o ka ʻike/hoʻololi/holo ʻia o nā waiwai hou i ka pakuhi o ka mea maʻi. Pono ia waihona waihona e heluhelu i ka palapala ʻāina holoʻokoʻa i ka hoʻomanaʻo (he nui kēia!), E hoʻopau i ka BSON, hoʻohui / hoʻololi / holoi i kahi node hou, hōʻano hou i nā kuhikuhi, hoʻokomo i loko o BSON, a mālama iā ia i ka disk. Pono ka honua holoʻokoʻa e komo i kahi waiwai kikoʻī a hoʻopunipuni iā ia.
- Loaʻa wikiwiki i nā waiwai pākahi. Me ka nui o nā waiwai i loko o kahi palapala a me kona hoʻolālā pae, ʻoi aku ka wikiwiki o ke komo ʻana i kēlā me kēia waiwai ma muli o ka ʻoiaʻiʻo ʻo kēlā me kēia ala i ka honua he B-lāʻau. Ma BSON, pono ʻoe e hoʻokaʻawale laina i ka palapala e ʻike ai i ka waiwai i makemake ʻia.
3.3.2 Hoʻohui hui
ʻO nā hui hui (ʻoiai me nā pūnana pūnana) kūpono loa i ka honua. No ka laʻana, e hōʻike ʻia kēlā ʻano papa mai PHP ma ke kiʻi mua 3.3.1.
$a = array(
"name" => "Vince Medvedev",
"city" => "Moscow",
"threatments" => array(
"surgeries" => array("apedicectomy", "biopsy"),
"radiation" => array("gamma", "x-rays"),
"physiotherapy" => array("knee", "shoulder")
)
);
3.3.3 Nā palapala hierarchical: XML, JSON
Hoʻopaʻa maʻalahi hoʻi i ka honua. Hiki ke waiho ʻia ma nā ʻano like ʻole no ka mālama ʻana.
'ōkuene
ʻO ke ala maʻalahi loa e hoʻokaʻawale i ka XML i loko o ka honua, ʻo ia ka mālama ʻana i nā ʻano inoa inoa i nā nodes. A inā pono ke komo wikiwiki i nā ʻano hōʻailona, a laila hiki iā mākou ke hoʻoneʻe iā lākou i nā lālā ʻokoʻa.
<note id=5>
<to>Вася</to>
<from>Света</from>
<heading>Напоминание</heading>
<body>Позвони мне завтра!</body>
</note>
Ma ka COS pili kēia i ke code:
Set ^xml("note")="id=5"
Set ^xml("note","to")="Саша"
Set ^xml("note","from")="Света"
Set ^xml("note","heading")="Напоминание"
Set ^xml("note","body")="Позвони мне завтра!"
Manaʻo: No XML, JSON, hui hui, hiki iā ʻoe ke hele mai me nā ʻano like ʻole o ka hōʻike ʻana ma ka honua. I kēia hihia, ʻaʻole mākou i noʻonoʻo i ka hoʻonohonoho ʻana o nā subtags i ka hōʻailona memo. Ma ke ao holoʻokoʻa ^xml e hōʻike ʻia nā subtags ma ke ʻano pīʻāpā. No ka noʻonoʻo pono ʻana i ke kauoha, hiki iā ʻoe ke hoʻohana, no ka laʻana, i kēia hōʻike:
JSON.
Hōʻike ke kiʻi mua mai ka pauku 3.3.1 i kahi hōʻike o kēia palapala JSON:
var document = {
"name": "Vince Medvedev",
"city": "Moscow",
"threatments": {
"surgeries": ["apedicectomy", "biopsy"],
"radiation": ["gamma", "x-rays"],
"physiotherapy": ["knee", "shoulder"]
},
};
3.3.4 Nā hale like i hoʻopili ʻia e nā pilina hierarchical
Nā laʻana: ke ʻano o nā keʻena kūʻai aku, kahi o nā poʻe i loko o kahi hoʻolālā MLM, ka waihona o nā wehe i ka chess.
ʻIkepili hoʻomaka. Hiki iā ʻoe ke hoʻohana i ka manaʻo kuhi stroke e like me ka waiwai kuhikuhi o ka node honua. A laila, i mea e koho ai i ka neʻe ikaika loa, e lawa ia e koho i ka lālā me ke kaumaha nui loa. Ma ke ao holoʻokoʻa, e hoʻokaʻawale ʻia nā lālā āpau ma kēlā me kēia pae e ka ikaika neʻe.
ʻO ke ʻano o nā keʻena kūʻai, ke ʻano o ka poʻe ma MLM. Hiki i nā nodes ke mālama i kekahi mau waiwai caching e hōʻike ana i nā ʻano o ka subtree holoʻokoʻa. No ka laʻana, ka nui o ke kūʻai ʻana o kahi subtree i hāʻawi ʻia. I kēlā me kēia manawa hiki iā mākou ke kiʻi i kahi kiʻi e hōʻike ana i nā holomua o kēlā me kēia lālā.
4. He aha ka mea e pono ai ka hoʻohana ʻana i ka honua?
Hōʻike ka kolamu mua i nā hihia kahi e loaʻa ai iā ʻoe ka wikiwiki nui ma ka hoʻohana ʻana i nā globals, a ʻo ka lua i ka wā e maʻalahi ai ka hoʻolālā a i ʻole ka ʻikepili.
ʻO ka wikiwiki
ʻO ka maʻalahi o ka hanaʻikepili / hōʻike
- Hoʻokomo [me ka hoʻokaʻawale ʻokoʻa ma kēlā me kēia pae], [ka kuhikuhi ʻana ma ke kī kumu]
- Ke wehe nei i nā lāʻau liʻiliʻi
- Nā mea me ka nui o nā waiwai pūnana e pono ai ke komo kanaka
- ʻO ke ʻano hierarchical me ka hiki ke kāpae i nā lālā keiki mai kekahi lālā, ʻoiai nā lālā ʻole
- Hohonu-ka hele mua o na kumulaau
- Nā mea/hui me ka heluna nui o nā waiwai koho [a/a i ʻole nested].
- ʻIkepili liʻiliʻi. Ke ʻike pinepine ʻia nā waiwai hou a nalowale nā mea kahiko.
- Pono ʻoe e hana i kahi waihona maʻamau.
- Nā kumu ala a me nā kumu lāʻau hoʻoholo. I ka manawa kūpono e hōʻike i nā ala me he lāʻau lā.
- Wehe i nā hale hierarchical me ka hoʻohana ʻole ʻana i ka recursion
Holomua
Akahana: ʻO kēia ʻatikala a me kaʻu mau ʻōlelo i ia mea ʻo koʻu manaʻo a ʻaʻohe pili i ke kūlana kūhelu o InterSystems Corporation.
Source: www.habr.com