Mga bahin sa pagdesinyo sa usa ka modelo sa datos alang sa NoSQL

Pasiuna

Mga bahin sa pagdesinyo sa usa ka modelo sa datos alang sa NoSQL "Kinahanglan ka nga modagan nga kusog kutob sa imong mahimo aron magpabilin sa lugar,
ug aron makaabot sa usa ka dapit, kinahanglang modagan ka labing menos kaduha ka paspas!”
(c) Alice sa Wonderland

Kaniadto gihangyo ko nga maghatag ug lecture analista among kompanya sa hilisgutan sa pagdesinyo sa mga modelo sa datos, tungod kay naglingkod sa mga proyekto sa dugay nga panahon (usahay sulod sa daghang mga tuig) nawala namon ang panan-aw sa kung unsa ang nanghitabo sa among palibot sa kalibutan sa mga teknolohiya sa IT. Sa among kompanya (mahitabo ra kini) daghang mga proyekto ang wala mogamit mga database sa NoSQL (labing menos sa pagkakaron), mao nga sa akong lecture gilain ko nga gihatagan sila ug pagtagad gamit ang panig-ingnan sa HBase ug gisulayan nga i-orient ang presentasyon sa materyal sa mga nga wala pa mogamit niini nagtrabaho. Sa partikular, akong gihulagway ang pipila ka bahin sa disenyo sa modelo sa datos gamit ang usa ka pananglitan nga akong nabasa pipila ka tuig na ang milabay sa artikulong "Introduction to HB ase Schema Design" ni Amandeep Khurana. Kung nag-analisar sa mga pananglitan, gitandi nako ang daghang mga kapilian sa pagsulbad sa parehas nga problema aron mas maayo nga mahatag ang mga nag-unang ideya sa mga mamiminaw.

Bag-ohay lang, "gikan sa wala’y mahimo," gipangutana nako ang akong kaugalingon (ang taas nga katapusan sa semana sa Mayo sa quarantine labi ka maayo alang niini), pila ang katumbas sa teoretikal nga mga kalkulasyon sa praktis? Sa tinuud, ingon niini ang pagkahimugso sa ideya alang niini nga artikulo. Ang usa ka developer nga nagtrabaho uban sa NoSQL sulod sa pipila ka mga adlaw mahimong dili makakat-on og bisan unsa nga bag-o gikan niini (ug busa mahimo dayon nga laktawan ang katunga sa artikulo). Apan alang sa mga analistaAlang sa mga wala pa nagtrabaho pag-ayo sa NoSQL, sa akong hunahuna kini mapuslanon alang sa pag-angkon og sukaranan nga pagsabut sa mga bahin sa pagdesinyo sa mga modelo sa datos alang sa HBase.

Pananglitan nga pagtuki

Sa akong opinyon, sa dili ka pa magsugod sa paggamit sa mga database sa NoSQL, kinahanglan nimo nga hunahunaon pag-ayo ug timbangtimbangon ang mga kaayohan ug kahusay. Kasagaran ang problema lagmit masulbad gamit ang tradisyonal nga relational DBMSs. Busa, mas maayo nga dili gamiton ang NoSQL nga walay hinungdan nga mga hinungdan. Kung nakahukom ka nga mogamit usa ka database sa NoSQL, nan kinahanglan nimong tagdon nga ang mga pamaagi sa disenyo dinhi medyo lahi. Ilabi na ang pipila niini mahimong talagsaon alang niadtong kaniadto nakiglabot lamang sa mga relational nga DBMS (sumala sa akong mga obserbasyon). Busa, sa "relasyon" nga kalibutan, kasagaran magsugod kita pinaagi sa pag-modelo sa problema nga domain, ug unya, kung gikinahanglan, denormalize ang modelo. Sa NoSQL kami kinahanglan dayon nga tagdon ang gipaabut nga mga senaryo alang sa pagtrabaho sa datos ug sa sinugdan i-denormalize ang datos. Dugang pa, adunay daghang uban pang mga kalainan, nga hisgutan sa ubos.

Atong tagdon ang mosunod nga "synthetic" nga problema, diin kita magpadayon sa pagtrabaho:

Gikinahanglan ang pagdesinyo sa usa ka istruktura sa pagtipig alang sa lista sa mga higala sa mga tiggamit sa pipila nga abstract nga social network. Aron mapasayon, atong hunahunaon nga ang tanan namong mga koneksyon gitumong (sama sa Instagram, dili Linkedin). Ang istruktura kinahanglan nga magtugot kanimo nga epektibo:

  • Tubaga ang pangutana kung ang user A nagbasa ba sa user B (reading pattern)
  • Tugoti ang pagdugang/pagtangtang sa mga koneksyon sa kaso sa suskrisyon/unsubskripsyon sa user A gikan sa user B (data change template)

Siyempre, adunay daghang mga kapilian sa pagsulbad sa problema. Sa usa ka regular nga database sa relational, lagmit nga maghimo lang kami usa ka talaan sa mga relasyon (posible nga gihulagway kung, pananglitan, kinahanglan namon nga magtipig usa ka grupo sa tiggamit: pamilya, trabaho, ug uban pa, nga naglakip niini nga "higala"), ug aron ma-optimize. Ang katulin sa pag-access makadugang mga indeks / partisyon. Lagmit nga ang kataposang lamesa motan-aw sama niini:

user_id
higala_id

Vasya
Si Pedro

Vasya
Olya

Pagkahuman niini, para sa katin-awan ug mas maayong pagsabot, akong itudlo ang mga ngalan imbes nga mga ID

Sa kaso sa HBase, nahibal-an namon nga:

  • episyente nga pagpangita nga dili moresulta sa usa ka bug-os nga lamesa scan posible eksklusibo pinaagi sa yawe
    • sa pagkatinuod, mao nga ang pagsulat SQL pangutana pamilyar sa daghan sa maong mga database mao ang usa ka dili maayo nga ideya; sa teknikal, siyempre, mahimo nimong ipadala ang usa ka pangutana sa SQL nga adunay Joins ug uban pang lohika sa HBase gikan sa parehas nga Impala, apan kung unsa kini ka epektibo ...

Busa, napugos kami sa paggamit sa user ID isip yawe. Ug ang una nakong gihunahuna sa hilisgutan nga "diin ug unsaon pagtipig sa mga ID sa mga higala?" tingali usa ka ideya sa pagtipig kanila sa mga kolum. Kini nga labing klaro ug "naive" nga kapilian motan-aw sama niini (tawgon nato kini Opsyon 1 (default)para sa dugang nga pakisayran):

RowKey
Mga kolum

Vasya
1: Petya
2: Olya
3: Dasha

Si Pedro
1: Masha
2: Vasya

Dinhi, ang matag linya katumbas sa usa ka tiggamit sa network. Ang mga kolum adunay mga ngalan: 1, 2, ... - sumala sa gidaghanon sa mga higala, ug ang mga ID sa mga higala gitipigan sa mga kolum. Importante nga hinumdoman nga ang matag laray adunay lainlaing gidaghanon sa mga kolum. Sa panig-ingnan sa numero sa ibabaw, ang usa ka laray adunay tulo ka mga kolum (1, 2 ug 3), ug ang ikaduha adunay duha ra (1 ug 2) - dinhi kami mismo migamit sa duha ka mga kabtangan sa HBase nga wala sa mga relational database:

  • ang abilidad sa dinamikong pagbag-o sa komposisyon sa mga kolum (pagdugang usa ka higala -> pagdugang usa ka kolum, pagtangtang usa ka higala -> pagtangtang usa ka kolum)
  • Ang lainlaing mga laray mahimong adunay lainlaing mga komposisyon sa kolum

Atong susihon ang atong istruktura alang sa pagsunod sa mga kinahanglanon sa buluhaton:

  • Pagbasa sa datos: aron masabtan kung si Vasya nag-subscribe sa Olya, kinahanglan naton nga ibawas tibuok linya pinaagi sa yawe nga RowKey = "Vasya" ug pagsunud sa mga kantidad sa kolum hangtod nga "mahimamat" namon si Olya sa kanila. O pag-uli sa mga kantidad sa tanan nga mga kolum, "dili mahimamat" si Olya ug ibalik ang tubag nga Bakak;
  • Pag-edit sa datos: pagdugang og higala: alang sa usa ka susama nga buluhaton kinahanglan usab nato nga ibawas tibuok linya gamit ang yawe nga RowKey = "Vasya" sa pag-ihap sa kinatibuk-ang gidaghanon sa iyang mga higala. Kinahanglan namon kini nga kinatibuk-ang gidaghanon sa mga higala aron mahibal-an ang gidaghanon sa kolum diin kinahanglan namon isulat ang ID sa bag-ong higala.
  • Pag-usab sa datos: pagtangtang sa usa ka higala:
    • Kinahanglan nga ibawas tibuok linya pinaagi sa yawe nga RowKey = "Vasya" ug paghan-ay sa mga kolum aron makit-an ang usa diin ang higala nga tangtangon girekord;
    • Sunod, pagkahuman sa pagtangtang sa usa ka higala, kinahanglan naton nga "ibalhin" ang tanan nga datos sa usa ka kolum aron dili makakuha og "mga kal-ang" sa ilang pag-numero.

Atong susihon karon kung unsa ka produktibo kini nga mga algorithm, nga kinahanglan naton ipatuman sa "kondisyon nga aplikasyon" nga bahin, gamit ang O-simbolismo. Atong itudlo ang gidak-on sa atong hypothetical social network nga n. Unya ang maximum nga gidaghanon sa mga higala nga maangkon sa usa ka user mao ang (n-1). Mahimo pa natong pasagdan kini (-1) alang sa atong mga katuyoan, tungod kay sulod sa gambalay sa paggamit sa mga simbolo sa O kini dili importante.

  • Pagbasa sa datos: gikinahanglan nga ibawas ang tibuok linya ug i-uli ang tanang mga column niini sa limit. Kini nagpasabot nga ang taas nga banabana sa mga gasto mahimong gibana-bana nga O(n)
  • Pag-edit sa datos: pagdugang og higala: aron mahibal-an ang gidaghanon sa mga higala, kinahanglan nimo nga balikon ang tanan nga mga kolum sa laray, ug dayon isulud ang usa ka bag-ong kolum => O(n)
  • Pag-usab sa datos: pagtangtang sa usa ka higala:
    • Susama sa pagdugang - kinahanglan ka nga moagi sa tanan nga mga kolum sa limitasyon => O(n)
    • Human makuha ang mga kolum, kinahanglan natong "ibalhin" kini. Kung imong ipatuman kini nga "head-on", nan sa limitasyon kinahanglan nimo hangtod sa (n-1) nga mga operasyon. Apan dinhi ug dugang pa sa praktikal nga bahin mogamit kami usa ka lahi nga pamaagi, nga magpatuman sa usa ka "pseudo-shift" alang sa usa ka piho nga gidaghanon sa mga operasyon - nga mao, ang kanunay nga oras igugol niini, bisan pa sa n. Kining kanunay nga oras (O(2) nga eksakto) mahimong mapasagdan kon itandi sa O(n). Ang pamaagi gihulagway sa hulagway sa ubos: gikopya lang namo ang datos gikan sa "katapusan" nga kolum ngadto sa usa nga gusto namong tangtangon ang datos, ug dayon tangtangon ang kataposang kolum:
      Mga bahin sa pagdesinyo sa usa ka modelo sa datos alang sa NoSQL

Sa kinatibuk-an, sa tanan nga mga senaryo nakadawat kami usa ka asymptotic computational complexity sa O (n).
Tingali namatikdan na nimo nga hapit kanunay kinahanglan naton basahon ang tibuuk nga laray gikan sa database, ug sa duha nga mga kaso gikan sa tulo, aron lang maagian ang tanan nga mga kolum ug kuwentahon ang kinatibuk-ang gidaghanon sa mga higala. Busa, isip usa ka pagsulay sa pag-optimize, mahimo nimong idugang ang usa ka kolum nga "ihap", nga nagtipig sa kinatibuk-ang gidaghanon sa mga higala sa matag tiggamit sa network. Sa kini nga kaso, dili naton mabasa ang tibuuk nga laray aron makalkulo ang kinatibuk-ang gidaghanon sa mga higala, apan basaha ra ang usa ka kolum nga "ihap". Ang nag-unang butang mao ang dili pagkalimot sa pag-update sa "ihap" sa pagmaniobra sa datos. Nga. kita mouswag Opsyon 2 (ihap):

RowKey
Mga kolum

Vasya
1: Petya
2: Olya
3: Dasha
ihap: 3

Si Pedro
1: Masha
2: Vasya

ihap: 2

Kung itandi sa una nga kapilian:

  • Pagbasa sa datos: aron makakuha og tubag sa pangutana nga "Gibasa ba ni Vasya si Olya?" walay nausab => O(n)
  • Pag-edit sa datos: pagdugang og higala: Gipasimple namo ang pagsal-ot sa usa ka bag-ong higala, tungod kay dili na namo kinahanglan nga basahon ang tibuok linya ug i-uli ang mga kolum niini, apan makuha ra ang kantidad sa kolum nga "ihap", ug uban pa. hibal-i dayon ang numero sa kolum aron makasulod ug bag-ong higala. Kini modala ngadto sa pagkunhod sa computational complexity ngadto sa O(1)
  • Pag-usab sa datos: pagtangtang sa usa ka higala: Kung nagtangtang sa usa ka higala, mahimo usab namon gamiton kini nga kolum aron makunhuran ang gidaghanon sa mga operasyon sa I / O kung "ibalhin" ang data usa ka cell sa wala. Apan ang panginahanglan sa pag-uli sa mga kolum aron makit-an ang kinahanglan nga tangtangon nagpabilin gihapon, busa => ​​O(n)
  • Sa laing bahin, karon kung mag-update sa datos kinahanglan namon nga i-update ang kolum nga "ihap" matag higayon, apan kini nagkinahanglag kanunay nga oras, nga mahimong mapasagdan sa sulod sa balangkas sa mga simbolo sa O.

Sa kinatibuk-an, ang opsyon 2 ingon og usa ka gamay nga mas maayo, apan kini sama sa "ebolusyon imbis nga rebolusyon." Aron makahimo usa ka "rebolusyon" kinahanglan naton Opsyon 3 (col).
Atong ibalik ang tanan nga "balikbalik": atong i-assign ngalan sa kolum user ID! Ang masulat sa mismong column dili na importante para nato, pasagdi nga numero 1 (sa kinatibuk-an, ang mapuslanong mga butang mahimong tipigan didto, pananglitan, ang grupo nga "pamilya/higala/etc."). Kini nga pamaagi mahimong makapakurat sa dili andam nga "layo" nga wala’y kasinatian kaniadto nga nagtrabaho sa mga database sa NoSQL, apan kini nga pamaagi nga nagtugot kanimo nga magamit ang potensyal sa HBase sa kini nga buluhaton nga labi ka epektibo:

RowKey
Mga kolum

Vasya
Petya: 1
Olya: 1
Dasha: 1

Si Pedro
Masha: 1
Vasya: 1

Dinhi makakuha kami daghang mga bentaha sa usa ka higayon. Aron masabtan kini, atong analisahon ang bag-ong estraktura ug banabanaon ang computational complexity:

  • Pagbasa sa datos: aron matubag ang pangutana kung naka-subscribe ba si Vasya sa Olya, igo na nga basahon ang usa ka kolum nga "Olya": kung naa kini, nan ang tubag Tinuod, kung dili - Bakak => O(1)
  • Pag-edit sa datos: pagdugang og higala: Pagdugang og higala: pagdugang lang og bag-ong column “Friend ID” => O(1)
  • Pag-usab sa datos: pagtangtang sa usa ka higala: kuhaa lang ang Friend ID column => O(1)

Sama sa imong nakita, usa ka hinungdanon nga bentaha sa kini nga modelo sa pagtipig mao nga sa tanan nga mga senaryo nga kinahanglan namon, naglihok kami nga adunay usa ra ka kolum, paglikay sa pagbasa sa tibuuk nga laray gikan sa database ug, dugang pa, pag-ihap sa tanan nga mga kolum niini nga laray. Mahimo kaming mohunong didto, apan ...

Mahimo ka nga malibog ug moadto sa usa ka gamay nga unahan sa dalan sa pag-optimize sa pasundayag ug pagkunhod sa mga operasyon sa I/O kung mag-access sa database. Unsa kaha kung gitipigan namon ang kompleto nga impormasyon sa relasyon direkta sa row key mismo? Sa ato pa, himoa ang yawe nga composite sama sa userID.friendID? Sa kini nga kaso, dili na naton kinahanglan nga basahon ang mga kolum sa linya (Opsyon 4(laray)):

RowKey
Mga kolum

Vasya.Petya
Petya: 1

Vasya.Olya
Olya: 1

Vasya.Dasha
Dasha: 1

Petya.Masha
Masha: 1

Petya.Vasya
Vasya: 1

Dayag nga, ang pagtasa sa tanang senaryo sa pagmaniobra sa datos sa maong istruktura, sama sa miaging bersyon, mahimong O(1). Ang kalainan sa opsyon 3 kay naa ra sa kaepektibo sa mga operasyon sa I/O sa database.

Aw, ang katapusan nga "pana". Sayon nga makita nga sa kapilian 4, ang row key adunay usa ka variable nga gitas-on, nga mahimo’g makaapekto sa pasundayag (dinhi mahinumduman namon nga ang HBase nagtipig mga datos ingon usa ka set sa mga byte ug mga linya sa mga lamesa gisunud sa yawe). Dugang pa nga kami adunay usa ka separator nga kinahanglan nga atimanon sa pipila nga mga sitwasyon. Aron mawagtang kini nga impluwensya, mahimo nimong gamiton ang mga hash gikan sa userID ug friendID, ug tungod kay ang duha ka hash adunay kanunay nga gitas-on, mahimo nimo nga i-concatenate kini, nga walay separator. Unya ang datos sa lamesa mahimong ingon niini (Opsyon 5 (hash)):

RowKey
Mga kolum

dc084ef00e94aef49be885f9b01f51c01918fa783851db0dc1f72f83d33a5994
Petya: 1

dc084ef00e94aef49be885f9b01f51c0f06b7714b5ba522c3cf51328b66fe28a
Olya: 1

dc084ef00e94aef49be885f9b01f51c00d2c2e5d69df6b238754f650d56c896a
Dasha: 1

1918fa783851db0dc1f72f83d33a59949ee3309645bd2c0775899fca14f311e1
Masha: 1

1918fa783851db0dc1f72f83d33a5994dc084ef00e94aef49be885f9b01f51c0
Vasya: 1

Dayag, ang pagkakomplikado sa algorithm sa pagtrabaho sa ingon nga istruktura sa mga senaryo nga among gihunahuna mahimong parehas sa kapilian 4 - kana mao, O (1).
Sa kinatibuk-an, atong i-summarize ang tanan natong mga banabana sa computational complexity sa usa ka lamesa:

Pagdugang og higala
Pagsusi sa usa ka higala
Pagtangtang sa usa ka higala

Opsyon 1 (default)
O (n)
O (n)
O (n)

Opsyon 2 (ihap)
O (1)
O (n)
O (n)

Opsyon 3 (kolum)
O (1)
O (1)
O (1)

Opsyon 4 (laray)
O (1)
O (1)
O (1)

Opsyon 5 (hash)
O (1)
O (1)
O (1)

Sama sa imong makita, ang mga kapilian 3-5 daw mao ang labing gipalabi ug sa teoriya nga pagsiguro sa pagpatuman sa tanan nga gikinahanglan nga mga sitwasyon sa pagmaniobra sa datos sa kanunay nga panahon. Sa mga kondisyon sa among buluhaton, wala’y klaro nga kinahanglanon aron makakuha usa ka lista sa tanan nga mga higala sa tiggamit, apan sa tinuud nga mga kalihokan sa proyekto, maayo alang kanamo, ingon maayong mga analista, nga "magpaabut" nga ang ingon nga buluhaton mahimong motungha ug "ipakaylap ang usa ka straw." Busa, ang akong mga simpatiya anaa sa kiliran sa opsyon 3. Apan lagmit nga sa usa ka tinuod nga proyekto kini nga hangyo masulbad na sa ubang mga paagi, busa, nga walay usa ka kinatibuk-ang panglantaw sa tibuok nga problema, mas maayo nga dili mohimo katapusan nga mga konklusyon.

Pag-andam sa eksperimento

Gusto nakong sulayan ang mga teoretikal nga argumento sa ibabaw sa praktis - kini ang tumong sa ideya nga mitungha sa taas nga semana. Aron mahimo kini, gikinahanglan ang pagtimbang-timbang sa katulin sa pag-operate sa among "kondisyon nga aplikasyon" sa tanan nga gihulagway nga mga senaryo alang sa paggamit sa database, ingon man ang pagtaas sa kini nga panahon nga adunay pagtaas sa gidak-on sa social network (n). Ang target nga parameter nga nakapainteres kanamo ug nga among sukdon sa panahon sa eksperimento mao ang oras nga gigugol sa "kondisyon nga aplikasyon" aron mahimo ang usa ka "operasyon sa negosyo". Sa "transaksyon sa negosyo" gipasabot namo ang usa sa mosunod:

  • Pagdugang usa ka bag-ong higala
  • Pagsusi kung ang Gumagamit A usa ka higala ni Gumagamit B
  • Pagtangtang sa usa ka higala

Busa, nga gikonsiderar ang mga kinahanglanon nga gilatid sa inisyal nga pahayag, ang senaryo sa pag-verify migawas ingon sa mosunod:

  • Pagrekord sa datos. Random nga makamugna og inisyal nga network sa gidak-on n. Aron mas maduol sa "tinuod nga kalibutan", ang gidaghanon sa mga higala sa matag tiggamit usa usab ka random variable. Sukda ang oras diin ang among "kondisyon nga aplikasyon" nagsulat sa tanan nga nahimo nga datos sa HBase. Dayon bahina ang resulta nga oras sa kinatibuk-ang gidaghanon sa mga nadugang nga higala - mao kini kung giunsa naton makuha ang kasagaran nga oras alang sa usa ka "operasyon sa negosyo"
  • Pagbasa sa datos. Para sa matag user, paghimo ug lista sa "mga personalidad" diin kinahanglan nimo nga makakuha og tubag kung ang user naka-subscribe sa kanila o wala. Ang gitas-on sa lista = gibana-bana nga gidaghanon sa mga higala sa tiggamit, ug alang sa katunga sa gisusi nga mga higala ang tubag kinahanglan nga "Oo", ug alang sa laing katunga - "Dili". Ang tseke gihimo sa ingon nga han-ay nga ang mga tubag nga "Oo" ug "Dili" magpuli-puli (nga mao, sa matag ikaduha nga kaso kinahanglan naton nga moagi sa tanan nga mga kolum sa linya alang sa mga kapilian 1 ug 2). Ang kinatibuk-ang oras sa screening gibahin sa gidaghanon sa mga higala nga gisulayan aron makuha ang kasagaran nga oras sa screening matag hilisgutan.
  • Pagtangtang sa datos. Kuhaa ang tanan nga mga higala gikan sa tiggamit. Dugang pa, ang han-ay sa pagtangtang random (nga mao, "gi-shuffle" namo ang orihinal nga lista nga gigamit sa pagrekord sa datos). Ang kinatibuk-ang oras sa tseke gibahin sa gidaghanon sa mga higala nga gikuha aron makuha ang kasagaran nga oras matag tseke.

Ang mga senaryo kinahanglan nga ipadagan alang sa matag usa sa 5 nga mga kapilian sa modelo sa datos ug alang sa lainlaing mga gidak-on sa social network aron makita kung giunsa ang pagbag-o sa oras samtang kini nagtubo. Sulod sa usa ka n, ang mga koneksyon sa network ug ang lista sa mga tiggamit nga susihon kinahanglan, siyempre, parehas sa tanan nga 5 nga kapilian.
Para sa mas maayong pagsabot, sa ubos mao ang usa ka pananglitan sa namugna nga datos para sa n= 5. Ang sinulat nga “generator” naghimo ug tulo ka ID nga diksyonaryo isip output:

  • ang una kay para sa insertion
  • ang ikaduha kay para sa pagsusi
  • ikatulo - alang sa pagtangtang

{0: [1], 1: [4, 5, 3, 2, 1], 2: [1, 2], 3: [2, 4, 1, 5, 3], 4: [2, 1]} # всего 15 друзей

{0: [1, 10800], 1: [5, 10800, 2, 10801, 4, 10802], 2: [1, 10800], 3: [3, 10800, 1, 10801, 5, 10802], 4: [2, 10800]} # всего 18 проверяемых субъектов

{0: [1], 1: [1, 3, 2, 5, 4], 2: [1, 2], 3: [4, 1, 2, 3, 5], 4: [1, 2]} # всего 15 друзей

Sama sa imong makita, ang tanan nga mga ID nga labaw sa 10 sa diksyonaryo alang sa pagsusi mao gyud ang mga siguradong maghatag tubag nga sayup. Ang pagsal-ot, pagsusi ug pagtangtang sa "mga higala" gihimo sa eksakto nga pagkasunod-sunod nga gitakda sa diksyonaryo.

Ang eksperimento gihimo sa usa ka laptop nga nagdagan Windows 10, diin ang HBase nagdagan sa usa ka sudlanan sa Docker, ug ang Python nga adunay Jupyter Notebook nagdagan sa pikas. Ang Docker gigahin 2 CPU cores ug 2 GB sa RAM. Ang tanan nga lohika, pareho ang pagsundog sa "kondisyon nga aplikasyon" ug ang "piping" alang sa paghimo sa datos sa pagsulay ug oras sa pagsukod, gisulat sa Python. Ang librarya gigamit sa pagtrabaho uban sa HBase happybase, aron makalkulo ang mga hash (MD5) para sa opsyon 5 - hashlib

Giisip ang gahum sa pag-compute sa usa ka partikular nga laptop, usa ka paglansad alang sa n = 10, 30, ... gipili nga eksperimento. 170 - kung ang kinatibuk-ang oras sa pag-opera sa tibuuk nga siklo sa pagsulay (tanan nga mga senaryo para sa tanan nga kapilian alang sa tanan n) labi pa o dili kaayo makatarunganon ug angay sa usa ka party sa tsa (sa aberids nga 15 minuto).

Dinhi kinahanglan nga maghimo usa ka komento nga sa kini nga eksperimento wala kami nag-una nga pagtimbang-timbang sa hingpit nga mga numero sa pasundayag. Bisan ang usa ka paryente nga pagtandi sa lainlain nga duha nga kapilian mahimong dili hingpit nga husto. Karon interesado kami sa kinaiya sa pagbag-o sa oras depende sa n, tungod kay gikonsiderar ang pag-configure sa ibabaw sa "test stand", lisud kaayo ang pagkuha sa mga pagbanabana sa oras nga "gihawan" sa impluwensya sa random ug uban pang mga hinungdan ( ug ang maong buluhaton wala gitakda).

Resulta sa eksperimento

Ang una nga pagsulay mao kung giunsa pagbag-o ang oras nga gigugol sa pagpuno sa lista sa mga higala. Ang resulta anaa sa graph sa ubos.
Mga bahin sa pagdesinyo sa usa ka modelo sa datos alang sa NoSQL
Ang mga kapilian 3-5, ingon sa gipaabut, nagpakita sa usa ka hapit kanunay nga "transaksyon sa negosyo" nga oras, nga wala magdepende sa pagtubo sa gidak-on sa network ug usa ka dili mailhan nga kalainan sa pasundayag.
Ang opsyon 2 nagpakita usab sa makanunayon, apan gamay nga mas grabe nga performance, halos eksaktong 2 ka beses nga may kalabotan sa mga opsyon 3-5. Ug kini dili mahimo gawas sa pagmaya, tungod kay kini adunay kalabotan sa teorya - sa kini nga bersyon ang gidaghanon sa mga operasyon sa I / O hangtod / gikan sa HBase eksakto nga 2 ka beses nga mas dako. Mahimo kini nga dili direkta nga ebidensya nga ang among test bench, sa prinsipyo, naghatag ug maayong katukma.
Ang Opsyon 1 usab, sama sa gipaabut, nahimo nga labing hinay ug nagpakita sa usa ka linear nga pagtaas sa oras nga gigugol sa pagdugang sa usag usa sa gidak-on sa network.
Atong tan-awon karon ang mga resulta sa ikaduhang pagsulay.
Mga bahin sa pagdesinyo sa usa ka modelo sa datos alang sa NoSQL
Ang mga kapilian 3-5 usab molihok sama sa gipaabut - kanunay nga oras, independente sa gidak-on sa network. Ang mga opsyon 1 ug 2 nagpakita sa usa ka linear nga pagtaas sa panahon samtang ang gidak-on sa network nagdugang ug susama nga performance. Dugang pa, ang opsyon 2 nahimo nga usa ka gamay nga hinay - dayag tungod sa panginahanglan sa pag-proofread ug pagproseso sa dugang nga "ihap" nga kolum, nga mahimong mas mamatikdan samtang ang n motubo. Apan likayan gihapon nako ang paghimog bisan unsang mga konklusyon, tungod kay ang katukma sa kini nga pagtandi medyo ubos. Dugang pa, kini nga mga ratios (nga ang kapilian, 1 o 2, mas paspas) nausab gikan sa pagdagan ngadto sa pagdagan (samtang nagpadayon ang kinaiya sa pagsalig ug "pag-adto sa liog ug liog").

Aw, ang katapusang graph mao ang resulta sa pagsulay sa pagtangtang.

Mga bahin sa pagdesinyo sa usa ka modelo sa datos alang sa NoSQL

Pag-usab, walay mga surpresa dinhi. Ang mga kapilian 3-5 naghimo sa pagtangtang sa kanunay nga oras.
Dugang pa, makapainteres, ang mga kapilian 4 ug 5, dili sama sa nangaging mga senaryo, nagpakita nga medyo mas grabe nga performance kaysa opsyon 3. Dayag, ang operasyon sa pagtangtang sa laray mas mahal kay sa operasyon sa pagtangtang sa kolum, nga kasagarang makatarunganon.

Ang mga opsyon 1 ug 2, sama sa gipaabot, nagpakita sa usa ka linear nga pagtaas sa panahon. Sa parehas nga oras, ang kapilian 2 kanunay nga hinay kaysa kapilian 1 - tungod sa dugang nga operasyon sa I/O aron "mapadayon" ang kolum sa pag-ihap.

Kinatibuk-ang konklusyon sa eksperimento:

  • Ang mga opsyon 3-5 nagpakita sa mas dako nga episyente samtang sila nagpahimulos sa HBase; Dugang pa, ang ilang pasundayag magkalainlain sa usag usa pinaagi sa kanunay ug wala magdepende sa gidak-on sa network.
  • Ang kalainan tali sa mga kapilian 4 ug 5 wala natala. Apan wala kini magpasabot nga ang opsyon 5 dili angay gamiton. Lagmit nga ang eksperimento nga senaryo nga gigamit, nga gikonsiderar ang mga kinaiya sa pasundayag sa test bench, wala magtugot niini nga makit-an.
  • Ang kinaiya sa pag-uswag sa panahon nga gikinahanglan sa paghimo sa "mga operasyon sa negosyo" uban sa mga datos sa kasagaran nagpamatuod sa kaniadto nga nakuha nga teoretikal nga mga kalkulasyon alang sa tanan nga mga kapilian.

Epilogo

Ang dili maayo nga mga eksperimento nga gihimo kinahanglan dili isipon nga hingpit nga kamatuoran. Adunay daghang mga hinungdan nga wala gikonsiderar ug gituis ang mga resulta (kini nga mga pagbag-o labi nga makita sa mga graph nga adunay gamay nga gidak-on sa network). Pananglitan, ang katulin sa pagdaginot, nga gigamit sa happybase, ang gidaghanon ug pamaagi sa pagpatuman sa lohika nga akong gisulat sa Python (Dili nako maangkon nga ang kodigo gisulat nga maayo ug epektibo nga gigamit ang mga kapabilidad sa tanan nga mga sangkap), tingali ang mga bahin sa HBase caching, background nga kalihokan sa Windows 10 sa akong laptop, ug uban pa. Sa kinatibuk-an, mahimo natong hunahunaon nga ang tanan nga mga kalkulasyon sa teoretikal nga eksperimento nagpakita sa ilang pagkabalido. Aw, o labing menos dili posible nga ipanghimakak sila sa ingon nga "head-on attack".

Sa konklusyon, mga rekomendasyon alang sa tanan nga nagsugod pa lang sa pagdesinyo sa mga modelo sa datos sa HBase: abstract gikan sa miaging kasinatian nga nagtrabaho uban ang relational database ug hinumdomi ang "mga sugo":

  • Kung nagdesinyo, nagpadayon kami gikan sa buluhaton ug mga sumbanan sa pagmaniobra sa datos, ug dili gikan sa modelo sa domain
  • Episyente nga pag-access (nga walay full table scan) – pinaagi lamang sa yawe
  • Denormalisasyon
  • Ang lainlaing mga laray mahimong adunay lainlaing mga kolum
  • Dinamikong komposisyon sa mga mamumulong

Source: www.habr.com

Idugang sa usa ka comment