Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2Kuanza - tazama sehemu ya 1.

3. Lahaja za miundo wakati wa kutumia ulimwengu

Muundo kama vile mti ulioagizwa una kesi mbalimbali maalum. Wacha tuzingatie zile ambazo zina thamani ya vitendo wakati wa kufanya kazi na ulimwengu.

3.1 Kesi maalum 1. Node moja bila matawi


Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2Globals inaweza kutumika sio tu kama safu, lakini pia kama vigezo vya kawaida. Kwa mfano, kama kaunta:

Set ^counter = 0  ; установка счётчика
Set id=$Increment(^counter) ;  атомарное инкрементирование

Katika kesi hii, kimataifa, pamoja na maana yake, inaweza pia kuwa na matawi. Moja haimzuii mwingine.

3.2 Kesi maalum 2. Kipeo kimoja na matawi mengi

Kwa ujumla, hii ni msingi wa thamani ya ufunguo. Na ikiwa tutahifadhi nakala ya maadili kama thamani, tutapata jedwali la kawaida sana na ufunguo wa msingi.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2

Ili kutekeleza jedwali la ulimwengu, itabidi tutengeneze safu mlalo sisi wenyewe kutoka kwa thamani za safu wima, na kisha kuzihifadhi kwa ulimwengu kwa kutumia ufunguo msingi. Ili kuifanya iweze kugawanya kamba katika safu tena wakati wa kusoma, unaweza kutumia:

  1. wahusika delimiter.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. mpango mgumu ambao kila uwanja unachukua idadi iliyoamuliwa ya baiti. Kama inavyofanywa katika hifadhidata za uhusiano.
  3. kazi maalum $LB (inapatikana katika Cache), ambayo huunda safu ya maadili.
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Jambo la kufurahisha ni kwamba, si vigumu kutumia ulimwengu kufanya kitu sawa na faharasa za upili katika hifadhidata za uhusiano. Wacha tuite mifumo kama hiyo fahirisi za kimataifa. Faharasa ya kimataifa ni mti msaidizi kwa uga zinazotafutwa kwa haraka ambazo si sehemu ya ufunguo msingi wa ulimwengu mkuu. Ili kuijaza na kuitumia, unahitaji kuandika msimbo wa ziada.

Hebu tuunde faharasa ya kimataifa kwenye safu wima ya kwanza.

Set ^i("col11", id1) = 1
Set ^i("col12", id2) = 1

Sasa, ili kutafuta haraka habari katika safu ya kwanza, tunapaswa kuangalia katika ulimwengu ^i na upate funguo za msingi (id) zinazolingana na thamani inayotakiwa ya safu wima ya kwanza.

Wakati wa kuingiza thamani, tunaweza kuunda mara moja thamani na faharasa za kimataifa kwa sehemu zinazohitajika. Na kwa kuegemea, hebu tufunge yote katika shughuli.

TSTART
Set ^t(id1) = $LB("col11", "col21", "col31")
Set ^i("col11", id1) = 1
TCOMMIT

Maelezo ya jinsi ya kuifanya kwenye M meza kwenye ulimwengu, uigaji wa fahirisi za sekondari.

Majedwali kama haya yatafanya kazi haraka kama katika hifadhidata za kitamaduni (au hata haraka zaidi) ikiwa chaguo za kukokotoa za kuingiza/kusasisha/kufuta safu zimeandikwa katika COS/M na kukusanywa.Niliangalia taarifa hii na majaribio kwenye INSERT kwa wingi na CHAGUA katika jedwali moja la safu wima mbili, ikijumuisha kutumia TSTART na TCOMMIT amri (shughuli).

Sijajaribu hali ngumu zaidi na ufikiaji wa wakati mmoja na miamala inayolingana.

Bila kutumia miamala, kiwango cha uwekaji kilikuwa 778/sekunde kwa kila thamani milioni.
Na thamani milioni 300 - 422 ingizo / pili.

Unapotumia miamala - 572 ingizo/sekunde kwa viingilio vya 082M. Shughuli zote zilifanywa kutoka kwa nambari ya M iliyokusanywa.
Anatoa ngumu ni ya kawaida, sio SSD. RAID5 na Andika-nyuma. Kichakataji cha Phenom II 1100T.

Ili kupima hifadhidata ya SQL kwa njia sawa, unahitaji kuandika utaratibu uliohifadhiwa ambao utafanya uingizaji katika kitanzi. Wakati wa kujaribu MySQL 5.5 (Hifadhi ya InnoDB), kwa kutumia njia hii nilipokea nambari zisizozidi 11K kwa sekunde.
Ndiyo, utekelezaji wa jedwali kwenye ulimwengu unaonekana kuwa mgumu zaidi kuliko katika hifadhidata za uhusiano. Kwa hivyo, hifadhidata za viwanda kwenye ulimwengu zina ufikiaji wa SQL ili kurahisisha kazi na data ya jedwali.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2Kwa ujumla, ikiwa schema ya data haitabadilika mara kwa mara, kasi ya uingizaji sio muhimu na hifadhidata nzima inaweza kuwakilishwa kwa urahisi katika mfumo wa meza za kawaida, basi ni rahisi kufanya kazi na SQL, kwani hutoa kiwango cha juu cha kujiondoa. .

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2Katika kesi hii nilitaka kuonyesha hivyo globals inaweza kufanya kazi kama mjenzi wa kuunda hifadhidata zingine. Kama mkusanyiko ambao lugha zingine zinaweza kuandikwa. Hapa kuna mifano ya jinsi unavyoweza kuunda analogi kwenye ulimwengu thamani-msingi, orodha, seti, jedwali, hifadhidata zenye mwelekeo wa hati.

Ikiwa unahitaji kuunda aina fulani ya hifadhidata isiyo ya kawaida kwa bidii kidogo, basi unapaswa kuangalia kuelekea ulimwengu.

3.3 Kesi maalum 3. Mti wa ngazi mbili, kila nodi ya ngazi ya pili ina idadi maalum ya matawi.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2Labda ulikisia: huu ni utekelezaji mbadala wa jedwali kwenye ulimwengu. Hebu tulinganishe utekelezaji huu na ule uliopita.

Jedwali kwenye mti wa ngazi mbili dhidi ya. kwenye mti wa ngazi moja.

Africa
Faida

  1. Polepole kwa kuingizwa, kwa vile unahitaji kuweka idadi ya nodes sawa na idadi ya nguzo.
  2. Matumizi zaidi ya nafasi ya diski. Kwa kuwa faharasa za kimataifa (zinazoeleweka kama faharisi za safu) zilizo na majina ya safu wima huchukua nafasi ya diski na zinarudiwa kwa kila safu.

  1. Ufikiaji wa haraka wa maadili ya safu wima za kibinafsi, kwani hakuna haja ya kuchanganua kamba. Kulingana na vipimo vyangu, ni 11,5% haraka kwenye safu 2 na zaidi kwenye idadi kubwa ya safu.
  2. Rahisi zaidi kubadilisha schema ya data
  3. Nambari iliyo wazi zaidi

Hitimisho: si kwa kila mtu. Kwa kuwa kasi ni moja wapo ya faida kuu za ulimwengu, hakuna uhakika katika kutumia utekelezaji huu, kwani kuna uwezekano mkubwa hautafanya haraka kuliko jedwali katika hifadhidata za uhusiano.

3.4 Kesi ya jumla. Miti na miti iliyoagizwa

Muundo wowote wa data ambao unaweza kuwakilishwa kama mti unalingana kikamilifu na ulimwengu.

3.4.1 Vitu vyenye mada

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2

Hili ni eneo la matumizi ya jadi ya ulimwengu. Katika uwanja wa matibabu kuna idadi kubwa ya magonjwa, dawa, dalili, na njia za matibabu. Sio busara kuunda meza yenye uwanja milioni kwa kila mgonjwa. Zaidi ya hayo, 99% ya sehemu zitakuwa tupu.

Hebu fikiria hifadhidata ya SQL ya majedwali: "mgonjwa" ~ 100 nyanja, "Dawa" - nyanja 000, "Tiba" - nyanja 100, "Matatizo" - nyanja 000, nk. Nakadhalika. Au unaweza kuunda hifadhidata ya maelfu mengi ya jedwali, kila moja kwa aina maalum ya mgonjwa (na zinaweza kuingiliana!), Matibabu, dawa, na maelfu ya jedwali zaidi kwa miunganisho kati ya majedwali haya.

Globals ni bora kwa dawa, kwani hukuruhusu kuunda kwa kila mgonjwa maelezo sahihi ya historia yake ya matibabu, matibabu anuwai, na vitendo vya dawa, kwa namna ya mti, bila kupoteza nafasi ya ziada ya diski kwenye safu tupu, kama ingekuwa. iwe hivyo katika kesi ya uhusiano.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2Kwa kutumia globals ni rahisi kuunda hifadhidata yenye data kuhusu watu, wakati ni muhimu kukusanya na kupanga utaratibu wa upeo wa habari mbalimbali kuhusu mteja. Hii ni katika mahitaji katika dawa, benki, masoko, kumbukumbu na maeneo mengine

.
Kwa kweli, katika SQL unaweza pia kuiga mti na meza chache tu (EAV, 1,2,3,4,5,6,7,8,9,10), hata hivyo hii ni ngumu zaidi na itakuwa polepole. Kimsingi, itabidi uandike ulimwengu unaofanya kazi kwenye meza na ufiche kazi yote iliyo na meza chini ya safu ya kujiondoa. Ni makosa kuiga teknolojia ya kiwango cha chini (globals) kwa kutumia teknolojia ya kiwango cha juu (SQL). Haifai.

Sio siri kuwa kubadilisha schema ya data kwenye jedwali kubwa (ALTER TABLE) inaweza kuchukua muda wa kutosha. MySQL, kwa mfano, hufanya ALTER TABLE ADD|DROP COLUMN kwa kunakili kabisa habari kutoka kwa jedwali la zamani hadi jedwali jipya (injini za MyISAM zilizojaribiwa, InnoDB). Ambayo inaweza kutundika hifadhidata inayofanya kazi na mabilioni ya rekodi kwa siku, ikiwa sio wiki.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2Kubadilisha muundo wa data tukitumia globals hakutatugharimu chochote. Wakati wowote tunaweza kuongeza mali yoyote mpya tunayohitaji kwa kitu chochote, kwa kiwango chochote cha uongozi. Mabadiliko yanayohusiana na kubadilisha jina la matawi yanaweza kuendeshwa chinichini kwenye hifadhidata inayoendesha.


Kwa hivyo, linapokuja suala la kuhifadhi vitu na idadi kubwa ya mali ya hiari, globals ni chaguo kubwa.

Kwa kuongezea, wacha nikukumbushe kuwa ufikiaji wa mali yoyote ni ya papo hapo, kwani katika ulimwengu njia zote ni miti ya B.

Hifadhidata za kimataifa, kwa ujumla, ni aina ya hifadhidata iliyoelekezwa kwa hati yenye uwezo wa kuhifadhi taarifa za daraja. Kwa hivyo, hifadhidata zinazozingatia hati zinaweza kushindana na ulimwengu katika uwanja wa kuhifadhi rekodi za matibabu. Lakini bado sio sawa kabisaWacha tuchukue MongoDB kwa kulinganisha. Katika kikoa hiki inapoteza kwa ulimwengu kwa sababu zifuatazo:

  1. Ukubwa wa hati. Sehemu ya hifadhi ni maandishi katika umbizo la JSON (kwa usahihi zaidi BSON) yenye ujazo wa juu wa takriban 16MB. Kizuizi kilifanywa mahsusi ili hifadhidata ya JSON isipunguze kasi wakati wa uchanganuzi ikiwa hati kubwa ya JSON imehifadhiwa ndani yake na kufikiwa na sehemu. Hati hii inapaswa kuwa na habari zote kuhusu mgonjwa. Sote tunajua jinsi rekodi nene za wagonjwa zinaweza kuwa. Ukubwa wa juu wa kadi ya 16MB mara moja huweka mwisho kwa wagonjwa ambao kadi ya ugonjwa ni pamoja na faili za MRI, uchunguzi wa X-ray na masomo mengine. Katika tawi moja la ulimwengu unaweza kuwa na gigabytes na terabytes za habari. Kimsingi, tunaweza kukomesha hili, lakini nitaendelea.
  2. Muda wa fahamu/mabadiliko/ufutaji wa mali mpya kwenye chati ya mgonjwa. Hifadhidata kama hiyo lazima isome ramani nzima kwenye kumbukumbu (hii ni kiasi kikubwa!), Changanua BSON, ongeza/badilisha/futa nodi mpya, sasisha faharisi, uipakie kwenye BSON, na uihifadhi kwenye diski. Ulimwengu unahitaji tu kufikia mali mahususi na kuidanganya.
  3. Ufikiaji wa haraka wa mali ya mtu binafsi. Pamoja na mali nyingi katika hati na muundo wake wa ngazi nyingi, ufikiaji wa mali ya mtu binafsi utakuwa haraka zaidi kutokana na ukweli kwamba kila njia katika ulimwengu ni mti wa B. Katika BSON, lazima uchanganue hati kwa mstari ili kupata mali inayotaka.

3.3.2 Safu shirikishi

Safu shirikishi (hata zenye safu zilizowekwa) zinafaa kikamilifu kwenye ulimwengu. Kwa mfano, safu kama hiyo kutoka kwa PHP itaonyeshwa kwenye picha ya kwanza 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 Hati za daraja: XML, JSON

Pia huhifadhiwa kwa urahisi katika ulimwengu. Inaweza kuwekwa kwa njia tofauti kwa kuhifadhi.

XML
Njia rahisi zaidi ya kuchanganua XML katika ulimwengu ni kuhifadhi sifa za lebo kwenye nodi. Na ikiwa ufikiaji wa haraka wa sifa za lebo unahitajika, basi tunaweza kuzihamisha kwenye matawi tofauti.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2

<note id=5>
<to>Вася</to>
<from>Света</from>
<heading>Напоминание</heading>
<body>Позвони мне завтра!</body>
</note>

Kwenye COS hii inaweza kuendana na nambari:

Set ^xml("note")="id=5"
Set ^xml("note","to")="Саша"
Set ^xml("note","from")="Света"
Set ^xml("note","heading")="Напоминание"
Set ^xml("note","body")="Позвони мне завтра!"

Maoni: Kwa XML, JSON, safu shirikishi, unaweza kupata njia nyingi tofauti za kuonyesha kwenye ulimwengu. Katika kesi hii, hatukuonyesha mpangilio wa tagi ndogo kwenye lebo ya noti. Kimataifa ^xml vitambulisho vidogo vitaonyeshwa kwa mpangilio wa alfabeti. Ili kutafakari kwa uangalifu agizo, unaweza kutumia, kwa mfano, onyesho lifuatalo:

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2
JSON.
Picha ya kwanza kutoka sehemu ya 3.3.1 inaonyesha onyesho la hati hii ya JSON:

var document = {
  "name": "Vince Medvedev",
  "city": "Moscow",
  "threatments": {
    "surgeries": ["apedicectomy", "biopsy"],
    "radiation": ["gamma", "x-rays"],
    "physiotherapy": ["knee", "shoulder"]
  },
};

3.3.4 Miundo inayofanana iliyounganishwa na uhusiano wa daraja

Mifano: muundo wa ofisi za mauzo, eneo la watu katika muundo wa MLM, hifadhidata ya fursa katika chess.

Database ya kwanza. Unaweza kutumia makadirio ya nguvu ya kiharusi kama thamani ya faharasa ya nodi ya kimataifa. Kisha, ili kuchagua hoja yenye nguvu zaidi, itakuwa ya kutosha kuchagua tawi na uzito mkubwa zaidi. Katika ulimwengu, matawi yote katika kila ngazi yatapangwa kwa nguvu ya kusonga.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2

Muundo wa ofisi za mauzo, muundo wa watu katika MLM. Nodi zinaweza kuhifadhi maadili fulani ya kache ambayo yanaonyesha sifa za subtree nzima. Kwa mfano, kiasi cha mauzo ya mti mdogo uliopeanwa. Wakati wowote tunaweza kupata takwimu inayoonyesha mafanikio ya tawi lolote.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2

4. Ni katika hali gani kuna manufaa zaidi kutumia ulimwengu?

Safu wima ya kwanza inaonyesha hali ambapo utapata faida kubwa kwa kasi kwa kutumia ulimwengu, na ya pili wakati muundo au muundo wa data utarahisishwa.

Kasi
Urahisi wa kuchakata/kuwasilisha data

  1. Ingizo [na kupanga kiotomatiki katika kila ngazi], [kuashiria kwa ufunguo mkuu]
  2. Kuondoa miti midogo
  3. Vifaa vilivyo na sifa nyingi zilizowekwa ambazo zinahitaji ufikiaji wa mtu binafsi
  4. Muundo wa kihierarkia na uwezo wa kupitisha matawi ya watoto kutoka kwa tawi lolote, hata ambalo halipo
  5. Upitishaji wa kina wa kwanza wa miti midogo
  1. Vitu/huluki zilizo na idadi kubwa ya mali/huluki za hiari [na/au zilizoorodheshwa]
  2. Data isiyo na schema. Wakati mali mpya zinaweza kuonekana mara nyingi na za zamani kutoweka.
  3. Unahitaji kuunda hifadhidata maalum.
  4. Misingi ya njia na miti ya maamuzi. Wakati ni rahisi kuwakilisha njia kama mti.
  5. Kuondoa miundo ya daraja bila kutumia kujirudia

Kuendeleza "Ulimwengu ni panga-hazina za kuhifadhi data. Safu chache. Sehemu ya 3".

Onyo: Nakala hii na maoni yangu kwake ni maoni yangu na hayana uhusiano wowote na msimamo rasmi wa Shirika la InterSystems.

Chanzo: mapenzi.com

Kuongeza maoni