Cov yam ntxwv ntawm kev tsim cov qauv ntaub ntawv rau NoSQL

Taw qhia

Cov yam ntxwv ntawm kev tsim cov qauv ntaub ntawv rau NoSQL "Koj yuav tsum tau khiav ceev npaum li koj tuaj yeem nyob hauv qhov chaw,
thiab kom mus txog qhov chaw, koj yuav tsum tau khiav tsawg kawg yog ob zaug sai dua!”
(c) Alice in Wonderland

Qee lub sij hawm dhau los kuv raug hais kom muab lus qhuab qhia cov kws tshuaj ntsuam peb lub tuam txhab ntawm lub ntsiab lus ntawm kev tsim cov ntaub ntawv qauv, vim tias zaum ntawm tej yaam num rau lub sij hawm ntev (qee zaum ob peb xyoos) peb tsis pom dab tsi tshwm sim nyob ib ncig ntawm peb nyob rau hauv lub ntiaj teb no ntawm IT technologies. Hauv peb lub tuam txhab (nws tsuas yog tshwm sim) ntau qhov haujlwm tsis siv NoSQL databases (tsawg kawg rau tam sim no), yog li hauv kuv cov lus qhuab qhia kuv cais qee qhov kev mloog rau lawv siv tus qauv ntawm HBase thiab sim taw qhia qhov kev nthuav qhia ntawm cov khoom rau cov. uas tsis tau siv lawv tau ua haujlwm. Tshwj xeeb, kuv tau piav qhia qee yam ntawm cov yam ntxwv ntawm cov ntaub ntawv tsim qauv siv ib qho piv txwv uas kuv tau nyeem ntau xyoo dhau los nyob rau hauv tsab xov xwm "Introduction to HB ase Schema Design" los ntawm Amandeep Khurana. Thaum txheeb xyuas cov piv txwv, kuv muab piv rau ntau txoj hauv kev los daws qhov teeb meem tib yam kom zoo dua cov tswv yim tseem ceeb rau cov neeg tuaj saib.

Tsis ntev los no, "tsis muaj dab tsi ua," Kuv nug kuv tus kheej cov lus nug (lub Tsib Hlis lub lis piam ntev hauv kev cais tawm tshwj xeeb yog qhov tsim nyog rau qhov no), ntau npaum li cas cov kev ntsuas theoretical yuav raug coj mus xyaum? Qhov tseeb, qhov no yog li cas lub tswv yim rau kab lus no tau yug los. Tus tsim tawm uas tau ua haujlwm nrog NoSQL tau ob peb hnub yuav tsis kawm dab tsi tshiab los ntawm nws (thiab yog li ntawd tam sim ntawd hla ib nrab ntawm tsab xov xwm). Tab sis rau cov kws tshuaj ntsuamRau cov neeg uas tseem tsis tau ua haujlwm ze nrog NoSQL, kuv xav tias nws yuav muaj txiaj ntsig zoo rau kev nkag siab yooj yim ntawm cov yam ntxwv ntawm kev tsim cov qauv ntaub ntawv rau HBase.

Piv txwv kev tsom xam

Hauv kuv lub tswv yim, ua ntej koj pib siv NoSQL databases, koj yuav tsum ua tib zoo xav thiab ntsuas qhov zoo thiab qhov tsis zoo. Feem ntau qhov teeb meem tuaj yeem daws tau los ntawm kev sib raug zoo nrog DBMSs. Yog li, nws yog qhov zoo dua tsis siv NoSQL yam tsis muaj laj thawj tseem ceeb. Yog tias koj txawm li cas los txiav txim siab siv NoSQL database, ces koj yuav tsum coj mus rau hauv tus account tias cov qauv tsim ntawm no txawv me ntsis. Tshwj xeeb tshaj yog qee qhov ntawm lawv yuav txawv txawv rau cov uas yav dhau los tsuas yog cuam tshuam nrog DBMSs (raws li kuv qhov kev soj ntsuam). Yog li, hauv lub ntiaj teb "kev sib raug zoo", peb feem ntau pib los ntawm kev ua qauv ntawm qhov teeb meem, thiab tsuas yog tom qab ntawd, yog tias tsim nyog, denormalize tus qauv. Hauv NoSQL peb yuav tsum tam sim ntawd coj mus rau hauv tus account qhov xav tau scenarios rau kev ua hauj lwm nrog cov ntaub ntawv thiab pib denormalize cov ntaub ntawv. Tsis tas li ntawd, muaj ntau qhov sib txawv, uas yuav tau tham hauv qab no.

Cia peb xav txog cov teeb meem "synthetic" hauv qab no, uas peb yuav txuas ntxiv mus ua haujlwm:

Nws yog ib qho tsim nyog los tsim cov qauv khaws cia rau cov npe ntawm cov phooj ywg ntawm cov neeg siv ntawm qee qhov kev sib tham tsis meej. Txhawm rau kom yooj yim, peb yuav xav tias tag nrho peb cov kev sib txuas tau qhia (raws li ntawm Instagram, tsis yog Linkedin). Cov qauv yuav tsum tso cai rau koj kom ua tau zoo:

  • Teb cov lus nug seb tus neeg siv A nyeem tus neeg siv B (kev nyeem qauv)
  • Tso cai ntxiv / tshem tawm kev sib txuas hauv qhov xwm txheej ntawm kev tso npe / tshem tawm ntawm tus neeg siv A los ntawm tus neeg siv B (cov ntaub ntawv hloov pauv template)

Tau kawg, muaj ntau txoj hauv kev los daws qhov teeb meem. Nyob rau hauv cov ntaub ntawv kev sib raug zoo tsis tu ncua, peb feem ntau yuav tsuas yog ua ib lub rooj sib raug zoo (tej zaum yuav raug ntaus yog, piv txwv li, peb yuav tsum khaws ib pab pawg neeg siv: tsev neeg, kev ua haujlwm, thiab lwm yam, uas suav nrog "phooj ywg"), thiab ua kom zoo dua. nkag mus ceev yuav ntxiv indexes/partitioning. Feem ntau yuav yog lub rooj zaum kawg yuav zoo li no:

user_id
phooj ywg_id

Vasya
Peter

Vasya
Olya

Hauv qab no, kom paub meej thiab nkag siab zoo dua, kuv yuav qhia cov npe tsis yog IDs

Nyob rau hauv rooj plaub ntawm HBase, peb paub tias:

  • Kev tshawb nrhiav kom tau zoo uas tsis ua rau tag nrho lub rooj scan yog ua tau tshwj xeeb ntawm qhov tseem ceeb
    • qhov tseeb, yog vim li cas sau SQL queries paub ntau rau xws li databases yog ib lub tswv yim phem; technically, tau kawg, koj tuaj yeem xa cov lus nug SQL nrog Joins thiab lwm yam logic rau HBase los ntawm tib Impala, tab sis nws yuav ua li cas ...

Yog li ntawd, peb raug yuam kom siv tus neeg siv ID ua tus yuam sij. Thiab kuv thawj zaug xav txog lub ntsiab lus "qhov twg thiab yuav khaws cov phooj ywg li cas?" tej zaum ib lub tswv yim khaws cia rau hauv kab. Qhov kev xaiv pom tseeb tshaj plaws thiab "naive" yuav zoo li qhov no (cia hu nws Kev xaiv 1 (default)rau kev siv ntxiv):

RowKey
Cov kab

Vasya
1: Petya
2: Olya
3: Dasha

Peter
1: Mas
2: Vas

Ntawm no, txhua kab sib raug rau ib tus neeg siv network. Cov kab ntawv muaj npe: 1, 2, ... - raws li tus naj npawb ntawm cov phooj ywg, thiab cov IDs ntawm cov phooj ywg tau muab khaws cia rau hauv kab. Nws yog ib qho tseem ceeb uas yuav tsum nco ntsoov tias txhua kab yuav muaj cov kab sib txawv. Hauv qhov piv txwv hauv daim duab saum toj no, ib kab muaj peb kab (1, 2 thiab 3), thiab qhov thib ob tsuas muaj ob (1 thiab 2) - ntawm no peb tus kheej siv ob HBase cov khoom uas cov ntaub ntawv sib raug zoo tsis muaj:

  • lub peev xwm los hloov pauv cov kab ke sib xyaw ua ke (ntxiv tus phooj ywg -> ntxiv kab, tshem tawm tus phooj ywg -> rho tawm ib kab)
  • cov kab sib txawv tuaj yeem muaj cov kab sib txawv

Cia peb kuaj xyuas peb cov qauv kom ua raws li qhov yuav tsum tau ua ntawm txoj haujlwm:

  • Nyeem cov ntaub ntawv: Yuav kom nkag siab seb Vasya tau sau npe rau Olya, peb yuav tsum tau rho tawm tag nrho cov kab los ntawm tus yuam sij RowKey = "Vasya" thiab txheeb los ntawm kab ntawv tseem ceeb kom txog thaum peb "sib ntsib" Olya hauv lawv. Los yog iterate los ntawm qhov tseem ceeb ntawm txhua kab, "tsis tau ntsib" Olya thiab xa cov lus teb Tsis tseeb;
  • Kho cov ntaub ntawv: ntxiv ib tug phooj ywg: rau ib txoj hauj lwm zoo sib xws peb kuj yuav tsum tau rho tawm tag nrho cov kab siv tus yuam sij RowKey = "Vasya" suav tag nrho nws cov phooj ywg. Peb xav tau tag nrho cov phooj ywg no los txiav txim seb tus naj npawb ntawm kab ntawv uas peb yuav tsum tau sau tus ID ntawm tus phooj ywg tshiab.
  • Hloov cov ntaub ntawv: rho tawm ib tug phooj ywg:
    • Yuav tsum tau rho tawm tag nrho cov kab los ntawm tus yuam sij RowKey = "Vasya" thiab txheeb los ntawm cov kab nyob rau hauv thiaj li yuav nrhiav tau ib tug nyob rau hauv uas tus phooj ywg yuav tsum deleted yog kaw;
    • Tom qab ntawd, tom qab rho tawm ib tus phooj ywg, peb yuav tsum "hloov" tag nrho cov ntaub ntawv mus rau hauv ib kem kom tsis txhob tau txais "kawg" hauv lawv cov lej.

Tam sim no cia peb ntsuas seb cov algorithms ua haujlwm li cas, uas peb yuav xav tau los siv rau ntawm "kev thov xwm txheej" sab, yuav yog, siv O-symbolism. Cia peb qhia qhov loj ntawm peb cov kev sib raug zoo li kev sib raug zoo li n. Tom qab ntawd tus lej siab tshaj ntawm cov phooj ywg ib tus neeg siv tuaj yeem muaj yog (n-1). Peb tuaj yeem tsis quav ntsej ntxiv qhov no (-1) rau peb lub hom phiaj, txij li nyob rau hauv lub moj khaum ntawm kev siv O-cov cim nws tsis tseem ceeb.

  • Nyeem cov ntaub ntawv: Nws yog ib qho tsim nyog kom rho tawm tag nrho cov kab thiab rov ua dua los ntawm tag nrho nws cov kab hauv qhov txwv. Qhov no txhais tau tias qhov kev kwv yees siab tshaj ntawm cov nqi yuav yog kwv yees li O (n)
  • Kho cov ntaub ntawv: ntxiv ib tug phooj ywg: txhawm rau txiav txim siab tus lej ntawm cov phooj ywg, koj yuav tsum rov hais dua los ntawm txhua kab ntawm kab, thiab tom qab ntawd ntxig ib kab tshiab => O(n)
  • Hloov cov ntaub ntawv: rho tawm ib tug phooj ywg:
    • Zoo ib yam li ntxiv - koj yuav tsum mus dhau txhua kab hauv qhov txwv = O (n)
    • Tom qab tshem cov kab, peb yuav tsum "tshem" lawv. Yog tias koj siv qhov "head-on", tom qab ntawd hauv qhov txwv koj yuav xav tau txog (n-1) cov haujlwm. Tab sis ntawm no thiab ntxiv rau hauv qhov ua tau zoo peb yuav siv txoj hauv kev sib txawv, uas yuav siv qhov "pseudo-hloov" rau kev ua haujlwm tas li - uas yog, lub sijhawm tas li yuav raug siv rau nws, tsis hais txog n. Lub sij hawm tas mus li no (O(2) kom meej) tuaj yeem tsis saib xyuas piv rau O(n). Txoj hauv kev tau piav qhia hauv daim duab hauv qab no: peb tsuas yog luam cov ntaub ntawv los ntawm kab "kawg" mus rau qhov uas peb xav rho tawm cov ntaub ntawv, thiab tom qab ntawd rho tawm kab kawg:
      Cov yam ntxwv ntawm kev tsim cov qauv ntaub ntawv rau NoSQL

Nyob rau hauv tag nrho, nyob rau hauv tag nrho cov scenarios peb tau txais asymptotic computational complexity ntawm O (n).
Tej zaum koj twb tau pom tias peb yuav luag ib txwm yuav tsum tau nyeem tag nrho kab los ntawm cov ntaub ntawv, thiab hauv ob kis ntawm peb, tsuas yog mus hla txhua kab thiab suav tag nrho cov phooj ywg. Yog li ntawd, raws li kev sim ua kom zoo, koj tuaj yeem ntxiv "suav" kem, uas khaws tag nrho cov phooj ywg ntawm txhua tus neeg siv network. Hauv qhov no, peb tsis tuaj yeem nyeem tag nrho kab los suav tag nrho cov phooj ywg, tab sis tsuas yog nyeem ib kab "suav" xwb. Qhov tseem ceeb tshaj plaws yog tsis txhob hnov ​​​​qab hloov kho "suav" thaum tswj cov ntaub ntawv. Qhov ntawd. peb tau txais kev txhim kho Kev xaiv 2 ( suav):

RowKey
Cov kab

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

Peter
1: Mas
2: Vas

suav: 2

Piv rau thawj qhov kev xaiv:

  • Nyeem cov ntaub ntawv: kom tau txais cov lus teb rau lo lus nug "Puas Vasya nyeem Olya?" tsis muaj dab tsi hloov => O(n)
  • Kho cov ntaub ntawv: ntxiv ib tug phooj ywg: Peb tau ua kom yooj yim rau kev nkag mus rau tus phooj ywg tshiab, txij li tam sim no peb tsis tas yuav nyeem tag nrho cov kab thiab rov ua dua nws cov kab, tab sis tsuas yog tuaj yeem tau txais tus nqi ntawm "suav" kem, thiab lwm yam. tam sim ntawd txiav txim siab ntawm kab zauv los ntxig ib tug phooj ywg tshiab. Qhov no ua rau txo qis hauv kev ua lej nyuaj rau O(1)
  • Hloov cov ntaub ntawv: rho tawm ib tug phooj ywg: Thaum rho tawm ib tus phooj ywg, peb kuj tuaj yeem siv kab ntawv no los txo cov haujlwm I / O thaum "hloov" cov ntaub ntawv ib lub xov tooj mus rau sab laug. Tab sis qhov yuav tsum tau rov hais dua los ntawm txhua kab kom pom qhov uas yuav tsum tau muab tshem tawm tseem nyob, yog li => O(n)
  • Ntawm qhov tod tes, tam sim no thaum hloov kho cov ntaub ntawv peb yuav tsum hloov kho "suav" kem txhua lub sijhawm, tab sis qhov no yuav siv sij hawm tas li, uas tuaj yeem tsis quav ntsej nyob rau hauv lub moj khaum ntawm O-symbols.

Feem ntau, kev xaiv 2 zoo li me ntsis zoo dua, tab sis nws zoo li "evolution hloov pauv hloov." Yuav kom ua "khoov" peb yuav xav tau Option 3 (col).
Cia peb tig txhua yam "upside down": peb mam li muab kab npe neeg siv ID! Dab tsi yuav sau rau hauv kab ntawv nws tus kheej tsis tseem ceeb rau peb, cia nws yog tus lej 1 (feem ntau, cov khoom muaj txiaj ntsig tuaj yeem khaws cia rau ntawd, piv txwv li, pab pawg "tsev neeg / phooj ywg / thiab lwm yam."). Txoj hauv kev no yuav ua rau xav tsis thoob rau qhov tsis tau npaj "tus neeg ua haujlwm" uas tsis muaj kev paub dhau los ua haujlwm nrog NoSQL databases, tab sis nws yog qhov tseeb qhov no uas tso cai rau koj siv lub peev xwm ntawm HBase hauv txoj haujlwm no zoo dua:

RowKey
Cov kab

Vasya
Peb: 1
Olya: 1
Dasha: 1

Peter
Masha: 1
Vaaj: 1

Ntawm no peb tau txais ob peb qhov zoo ib zaug. Yuav kom nkag siab txog lawv, cia peb txheeb xyuas cov qauv tshiab thiab kwv yees qhov kev ua lej nyuaj:

  • Nyeem cov ntaub ntawv: txhawm rau teb cov lus nug seb Vasya tau sau npe rau Olya, nws txaus los nyeem ib kab "Olya": yog tias nws nyob ntawd, ces cov lus teb yog Tseeb, yog tsis yog - False => O(1)
  • Kho cov ntaub ntawv: ntxiv ib tug phooj ywg: Ntxiv ib tug phooj ywg: tsuas yog ntxiv ib kab tshiab "Tus phooj ywg ID" => O(1)
  • Hloov cov ntaub ntawv: rho tawm ib tug phooj ywg: tsuas yog tshem tawm cov phooj ywg ID kab => O(1)

Raws li koj tuaj yeem pom, qhov txiaj ntsig tseem ceeb ntawm cov qauv khaws cia no yog tias hauv txhua qhov xwm txheej peb xav tau, peb ua haujlwm nrog tsuas yog ib kab xwb, zam kev nyeem tag nrho kab los ntawm cov ntaub ntawv thiab, ntxiv rau, suav tag nrho cov kab ntawm kab no. Peb tuaj yeem nres qhov ntawd, tab sis ...

Koj tuaj yeem xav tsis thoob thiab mus ntxiv me ntsis raws txoj hauv kev ntawm kev ua kom zoo dua qub thiab txo cov haujlwm I / O thaum nkag mus rau hauv cov ntaub ntawv. Yuav ua li cas yog tias peb khaws cov ntaub ntawv kev sib raug zoo ncaj qha rau hauv kab ntawv nws tus kheej? Ntawd yog, ua qhov tseem ceeb sib xyaw zoo li userID.friendID? Hauv qhov no, peb tsis tas yuav nyeem cov kab ntawm kab txhua (Option 4 (kab)):

RowKey
Cov kab

Vasya.Petya
Peb: 1

Vasya.Olya
Olya: 1

Vasya. Dasha
Dasha: 1

Petya Masha
Masha: 1

Petya. Vasya
Vaaj: 1

Obviously, qhov kev ntsuam xyuas ntawm tag nrho cov ntaub ntawv manipulation scenarios nyob rau hauv xws li ib tug qauv, raws li nyob rau hauv yav dhau los version, yuav yog O(1). Qhov sib txawv nrog kev xaiv 3 yuav tsuas yog nyob rau hauv kev ua haujlwm ntawm I / O kev ua haujlwm hauv cov ntaub ntawv.

Zoo, kawg "hnub". Nws yog ib qho yooj yim kom pom tias nyob rau hauv kev xaiv 4, tus yuam sij kab yuav muaj qhov sib txawv ntawm qhov ntev, uas tej zaum yuav cuam tshuam rau kev ua tau zoo (ntawm no peb nco ntsoov tias HBase khaws cov ntaub ntawv raws li pawg ntawm bytes thiab kab hauv cov ntxhuav raug txheeb los ntawm qhov tseem ceeb). Ntxiv rau peb muaj tus cais tawm uas yuav tsum tau ua hauv qee qhov xwm txheej. Txhawm rau tshem tawm qhov kev cuam tshuam no, koj tuaj yeem siv hashes los ntawm userID thiab friendID, thiab txij li ob qho tib si hashes yuav muaj qhov ntev, koj tuaj yeem sib txuas tau yooj yim, tsis muaj qhov sib cais. Ces cov ntaub ntawv nyob rau hauv lub rooj yuav zoo li no (Kev xaiv 5 (hash)):

RowKey
Cov kab

dc084ef00e94aef49be885f9b01f51c01918fa783851db0dc1f72f83d33a5994
Peb: 1

dc084ef00e94aef49be885f9b01f51c0f06b7714b5ba522c3cf51328b66fe28a
Olya: 1

dc084ef00e94aef49be885f9b01f51c00d2c2e5d69df6b238754f650d56c896a
Dasha: 1

1918fa783851db0dc1f72f83d33a59949ee3309645bd2c0775899fca14f311e1
Masha: 1

1918fa783851db0dc1f72f83d33a5994dc084ef00e94aef49be885f9b01f51c0
Vaaj: 1

Obviously, algorithmic complexity ntawm kev ua hauj lwm nrog xws li ib tug qauv nyob rau hauv lub scenarios peb tab tom xav txog yuav zoo ib yam li cov kev xaiv 4 - uas yog, O(1).
Nyob rau hauv tag nrho, cia peb sau tag nrho peb cov kev kwv yees ntawm kev suav complexity nyob rau hauv ib lub rooj:

Ntxiv ib tug phooj ywg
Xyuas ntawm ib tug phooj ywg
Tshem tawm ib tug phooj ywg

Kev xaiv 1 (default)
Nws)
Nws)
Nws)

Option 2 ( suav)
O (1)
Nws)
Nws)

Option 3 (kem)
O (1)
O (1)
O (1)

Option 4 (kab)
O (1)
O (1)
O (1)

Kev xaiv 5 (hash)
O (1)
O (1)
O (1)

Raws li koj tuaj yeem pom, cov kev xaiv 3-5 zoo li yog qhov nyiam tshaj plaws thiab theoretically kom ua tiav ntawm txhua qhov tsim nyog cov ntaub ntawv tswj hwm qhov xwm txheej hauv lub sijhawm tas li. Hauv cov xwm txheej ntawm peb txoj haujlwm, tsis muaj qhov yuav tsum tau ua kom tau txais daim ntawv teev npe ntawm txhua tus neeg siv cov phooj ywg, tab sis hauv cov haujlwm tiag tiag, nws yuav yog qhov zoo rau peb, uas yog cov kws tshuaj ntsuam xyuas zoo, kom "cia siab" tias txoj haujlwm no yuav tshwm sim thiab "hloov ib straw." Yog li ntawd, kuv txoj kev khuv leej yog nyob rau sab ntawm qhov kev xaiv 3. Tab sis nws yog qhov zoo heev uas nyob rau hauv ib qhov project tiag tiag qhov kev thov no tuaj yeem raug daws los ntawm lwm txoj kev, yog li ntawd, tsis muaj kev pom dav dav ntawm tag nrho cov teeb meem, nws yog qhov zoo dua tsis ua. cov lus xaus.

Kev npaj ntawm qhov kev sim

Kuv xav sim cov lus sib cav saum toj no hauv kev xyaum - qhov no yog lub hom phiaj ntawm lub tswv yim uas tau tshwm sim dhau lub lis piam ntev. Txhawm rau ua qhov no, nws yog ib qho tsim nyog los ntsuas qhov kev khiav hauj lwm ceev ntawm peb "qhov kev thov" nyob rau hauv txhua qhov xwm txheej tau piav qhia rau kev siv cov ntaub ntawv, nrog rau kev nce hauv lub sijhawm no nrog kev loj hlob ntawm kev sib raug zoo (n). Lub hom phiaj tsis txaus siab uas peb nyiam thiab peb yuav ntsuas thaum lub sijhawm sim yog lub sijhawm siv los ntawm "kev thov" los ua ib qho "kev ua lag luam". Los ntawm "kev lag luam kev lag luam" peb txhais tau tias ib qho ntawm cov hauv qab no:

  • Ntxiv ib tug phooj ywg tshiab
  • Xyuas seb tus neeg siv A yog tus phooj ywg ntawm Tus Neeg Siv B
  • Tshem ib tug phooj ywg

Yog li, coj mus rau hauv tus account qhov yuav tsum tau teev nyob rau hauv thawj nqe lus, qhov kev pov thawj scenario tshwm sim raws li nram no:

  • Cov ntaub ntawv kaw. Randomly tsim qhov pib network ntawm qhov loj n. Txhawm rau kom ze rau "lub ntiaj teb tiag", tus naj npawb ntawm cov phooj ywg txhua tus neeg siv kuj tseem muaj qhov sib txawv. Ntsuas lub sij hawm thaum peb "kev thov raws cai" sau tag nrho cov ntaub ntawv tsim tawm rau HBase. Tom qab ntawd faib lub sijhawm tshwm sim los ntawm tag nrho cov phooj ywg ntxiv - qhov no yog qhov peb tau txais lub sijhawm nruab nrab rau ib qho "kev ua lag luam"
  • Nyeem cov ntaub ntawv. Rau txhua tus neeg siv, tsim ib daim ntawv teev npe "tus kheej" uas koj yuav tsum tau txais cov lus teb seb tus neeg siv puas tau sau npe rau lawv lossis tsis. Qhov ntev ntawm cov npe = kwv yees li ntawm cov phooj ywg ntawm tus neeg siv, thiab rau ib nrab ntawm cov phooj ywg txheeb xyuas cov lus teb yuav tsum yog "Yog", thiab rau lwm ib nrab - "Tsis yog". Kev kuaj xyuas yog ua raws li qhov kev txiav txim uas cov lus teb "Yes" thiab "Tsis yog" hloov pauv (uas yog, hauv txhua qhov thib ob peb yuav tsum mus dhau txhua kab ntawm kab rau kev xaiv 1 thiab 2). Lub sijhawm tshuaj ntsuam tag nrho yog muab faib los ntawm cov phooj ywg kuaj kom tau txais lub sijhawm tshuaj ntsuam nruab nrab ntawm ib qho kev kawm.
  • Kev rho tawm cov ntaub ntawv. Tshem tag nrho cov phooj ywg los ntawm tus neeg siv. Ntxiv mus, qhov kev txiav txim rho tawm yog random (uas yog, peb "shuffle" cov npe qub siv los sau cov ntaub ntawv). Lub sijhawm kuaj tag nrho yog muab faib los ntawm cov phooj ywg tshem tawm kom tau txais lub sijhawm nruab nrab ntawm ib daim tshev.

Cov xwm txheej yuav tsum tau khiav mus rau txhua qhov ntawm 5 cov qauv kev xaiv cov ntaub ntawv thiab rau ntau qhov sib txawv ntawm kev sib tham kom pom tias lub sijhawm hloov pauv li cas thaum nws loj hlob. Nyob rau hauv ib n, kev sib txuas hauv lub network thiab cov npe ntawm cov neeg siv los kuaj xyuas yuav tsum, ntawm chav kawm, yuav tsum zoo ib yam rau tag nrho 5 txoj kev xaiv.
Rau kev nkag siab zoo dua, hauv qab no yog ib qho piv txwv ntawm cov ntaub ntawv tsim tawm rau n = 5. Cov ntawv sau "generator" tsim peb daim ID dictionaries ua cov zis:

  • thawj tus yog rau kev ntxig
  • qhov thib ob yog rau kev kuaj xyuas
  • thib peb - ​​rau kev tshem tawm

{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 Π΄Ρ€ΡƒΠ·Π΅ΠΉ

Raws li koj tuaj yeem pom, txhua tus ID ntau dua 10 hauv phau ntawv txhais lus rau kev kuaj xyuas yog qhov tseeb uas yuav muab cov lus teb tsis tseeb. Ntxig, txheeb xyuas thiab tshem tawm "cov phooj ywg" yog ua raws nraim hauv cov kab ke teev tseg hauv phau ntawv txhais lus.

Qhov kev sim tau ua tiav ntawm lub laptop uas siv Windows 10, qhov twg HBase tau khiav hauv ib lub thawv Docker, thiab Python nrog Jupyter Notebook tau khiav hauv lwm qhov. Docker tau faib 2 CPU cores thiab 2 GB ntawm RAM. Tag nrho cov logic, ob qho tib si emulation ntawm "kev thov" thiab "piping" rau tsim cov ntaub ntawv xeem thiab ntsuas lub sij hawm, tau sau rau hauv Python. Lub tsev qiv ntawv tau siv los ua haujlwm nrog HBase zoo siab, kom suav hashes (MD5) rau kev xaiv 5 - hashlib

Noj rau hauv tus account lub hwj chim ntawm ib lub laptop tshwj xeeb, lub community launch rau n = 10, 30, ... tau sim xaiv. 170 - thaum lub sijhawm ua haujlwm tag nrho ntawm lub voj voog kev sim tag nrho (txhua qhov xwm txheej rau txhua qhov kev xaiv rau tag nrho n) yog qhov tsim nyog ntau dua lossis tsawg dua thiab haum rau ib tog tshuaj yej (qhov nruab nrab 15 feeb).

Ntawm no nws yog ib qho tsim nyog los ua ib qho lus hais tias hauv qhov kev sim no peb tsis yog qhov ntsuas qhov ua tau zoo tshaj plaws. Txawm tias ib qho kev sib piv ntawm ob qho kev xaiv sib txawv yuav tsis yog tag nrho. Tam sim no peb txaus siab rau qhov xwm txheej ntawm lub sijhawm hloov pauv nyob ntawm n, txij li kev coj mus rau hauv tus account cov kev teeb tsa saum toj no ntawm "test stand", nws nyuaj heev kom tau txais lub sijhawm kwv yees "tawm" ntawm kev cuam tshuam ntawm random thiab lwm yam ( thiab tej hauj lwm ntawd tsis tau teem tseg).

Cov txiaj ntsig kev sim

Thawj qhov kev sim yog yuav ua li cas lub sij hawm siv los sau cov phooj ywg cov npe hloov pauv. Qhov tshwm sim yog nyob rau hauv daim duab hauv qab no.
Cov yam ntxwv ntawm kev tsim cov qauv ntaub ntawv rau NoSQL
Kev xaiv 3-5, raws li qhov xav tau, qhia qhov yuav luag tas li "kev lag luam kev lag luam" lub sijhawm, uas tsis nyob ntawm kev loj hlob ntawm lub network loj thiab qhov sib txawv ntawm qhov kev ua tau zoo.
Option 2 kuj qhia tau hais tias tsis tu ncua, tab sis kev ua tau zoo me ntsis, yuav luag 2 npaug ntawm cov kev xaiv 3-5. Thiab qhov no tsis tuaj yeem tab sis zoo siab, vim nws cuam tshuam nrog txoj kev xav - hauv qhov version no tus naj npawb ntawm I / O kev ua haujlwm rau / los ntawm HBase yog 2 npaug ntau dua. Qhov no tuaj yeem ua pov thawj tsis ncaj qha tias peb lub rooj sib tw xeem, hauv paus ntsiab lus, muab qhov tseeb zoo.
Kev xaiv 1 kuj, raws li qhov xav tau, hloov mus ua qhov qeeb tshaj plaws thiab ua kom pom qhov nce ntxiv hauv lub sijhawm siv los ntxiv ib leeg rau qhov loj ntawm lub network.
Tam sim no cia peb saib cov txiaj ntsig ntawm qhov kev sim thib ob.
Cov yam ntxwv ntawm kev tsim cov qauv ntaub ntawv rau NoSQL
Kev xaiv 3-5 rov coj tus cwj pwm raws li qhov xav tau - lub sijhawm tas li, ywj pheej ntawm qhov loj ntawm lub network. Cov kev xaiv 1 thiab 2 qhia tau hais tias muaj kev nce ntxiv hauv lub sijhawm raws li qhov loj ntawm lub network nce thiab kev ua haujlwm zoo sib xws. Ntxiv mus, qhov kev xaiv 2 hloov mus ua qeeb qeeb me ntsis - pom meej vim yog qhov yuav tsum tau ua pov thawj thiab ua cov kab "suav" ntxiv, uas yuav pom ntau dua thaum n loj hlob. Tab sis kuv tseem yuav txwv tsis pub kos cov lus xaus, vim qhov tseeb ntawm qhov kev sib piv no kuj tsawg. Tsis tas li ntawd, cov piv txwv no (uas kev xaiv, 1 lossis 2, yog nrawm dua) hloov los ntawm kev khiav mus rau kev khiav (thaum tswj xyuas qhov xwm txheej ntawm kev vam khom thiab "mus caj dab thiab caj dab").

Zoo, daim duab kawg yog qhov tshwm sim ntawm kev tshem tawm kev sim.

Cov yam ntxwv ntawm kev tsim cov qauv ntaub ntawv rau NoSQL

Ntxiv dua thiab, tsis muaj surprises ntawm no. Kev xaiv 3-5 ua kev tshem tawm hauv lub sijhawm tas li.
Ntxiv mus, nthuav, cov kev xaiv 4 thiab 5, tsis zoo li yav dhau los scenarios, qhia pom me ntsis kev ua tau zoo dua li qhov kev xaiv 3. Thaj, cov kab deletion lag luam yog kim dua li cov haujlwm tshem tawm, uas feem ntau yog cov laj thawj.

Kev xaiv 1 thiab 2, raws li qhov xav tau, ua kom pom kev nce ntxiv hauv lub sijhawm. Nyob rau tib lub sijhawm, qhov kev xaiv 2 tsis tu ncua qeeb dua li qhov kev xaiv 1 - vim yog kev ua haujlwm I / O ntxiv rau "tswj" cov suav kab.

General xaus ntawm qhov kev sim:

  • Cov kev xaiv 3-5 ua kom pom kev ua tau zoo dua qub thaum lawv ua kom zoo dua ntawm HBase; Ntxiv mus, lawv qhov kev ua tau zoo sib txawv ntawm ib leeg los ntawm qhov tsis tu ncua thiab tsis nyob ntawm qhov loj ntawm lub network.
  • Qhov sib txawv ntawm cov kev xaiv 4 thiab 5 tsis tau sau tseg. Tab sis qhov no tsis txhais hais tias kev xaiv 5 yuav tsum tsis txhob siv. Nws zoo li qhov kev sim sim siv, suav nrog cov yam ntxwv ntawm kev ua haujlwm ntawm lub rooj ntev zaum, tsis tso cai rau kuaj pom.
  • Qhov xwm txheej ntawm qhov nce hauv lub sijhawm xav tau los ua "kev ua lag luam" nrog cov ntaub ntawv feem ntau lees paub qhov kev xam pom yav dhau los rau txhua qhov kev xaiv.

Epilogue

Cov kev sim ntxhib tau ua tiav yuav tsum tsis txhob raug coj los ua qhov tseeb. Muaj ntau ntau yam uas tsis tau muab coj los xav thiab cuam tshuam cov txiaj ntsig (cov kev hloov pauv no tshwj xeeb tshaj yog pom hauv cov duab nrog lub network me me). Piv txwv li, qhov ceev ntawm thrift, uas yog siv los ntawm happybase, lub ntim thiab txoj kev ntawm kev siv cov logic uas kuv tau sau nyob rau hauv Python (Kuv tsis tuaj yeem thov tias cov cai tau sau tau zoo thiab siv tau cov peev txheej ntawm txhua yam), tej zaum cov yam ntxwv ntawm HBase caching, keeb kwm kev ua haujlwm ntawm Windows 10 ntawm kuv lub laptop, thiab lwm yam. Feem ntau, peb tuaj yeem xav tias tag nrho cov kev suav theoretical tau sim ua kom pom tias lawv siv tau. Zoo, los yog tsawg kawg yog tsis muaj peev xwm refute lawv nrog xws li "kev tawm tsam taub hau".

Hauv kev xaus, cov lus pom zoo rau txhua tus uas nyuam qhuav pib tsim cov qauv ntaub ntawv hauv HBase: paub daws teeb meem los ntawm kev paub dhau los ua haujlwm nrog cov ntaub ntawv sib raug zoo thiab nco ntsoov "cov lus txib":

  • Thaum tsim, peb pib los ntawm kev ua hauj lwm thiab cov qauv ntawm cov ntaub ntawv manipulation, thiab tsis yog los ntawm tus qauv sau
  • Kev nkag tau zoo (tsis muaj lub rooj scan puv) - tsuas yog los ntawm tus yuam sij
  • Denormalization
  • Cov kab sib txawv tuaj yeem muaj cov kab sib txawv
  • Dynamic muaj pes tsawg leeg ntawm cov neeg hais lus

Tau qhov twg los: www.hab.com

Ntxiv ib saib