Nā hiʻohiʻona o ka hoʻolālā ʻana i kahi kumu hoʻohālike no NoSQL

Hōʻike

Nā hiʻohiʻona o ka hoʻolālā ʻana i kahi kumu hoʻohālike no NoSQL "Pono ʻoe e holo wikiwiki e like me kou hiki ke noho ma kahi,
a no ka hele ʻana i kahi, pono ʻoe e holo ma ka liʻiliʻi ʻelua ʻoi aku ka wikiwiki!"
(c) ʻO Alice i ka ʻĀina Kamahaʻo

I kekahi manawa aku nei, ua noi ʻia au e haʻi ʻōlelo nā kānaka kālailai ʻO kā mākou hui ma ke kumuhana o ka hoʻolālā ʻana i nā hiʻohiʻona ʻikepili, no ka mea e noho ana ma nā papahana no ka manawa lōʻihi (i kekahi manawa no kekahi mau makahiki) nalowale mākou i nā mea e hana nei a puni mākou i ka honua o nā ʻenehana IT. I kā mākou hui (ʻo ia wale nō ka hopena) ʻaʻole hoʻohana nā papahana he nui i nā ʻikepili NoSQL (ma ka liʻiliʻi loa i kēia manawa), no laila i kaʻu aʻo ʻana ua hoʻokaʻawale wau iā lākou me ka hoʻohana ʻana i ka hiʻohiʻona o HBase a hoʻāʻo e hoʻonohonoho i ka hōʻike ʻana o nā mea i kēlā ka poe i hoohana ole ia lakou ua hana. Ma keʻano kūikawā, ua hōʻike wau i kekahi o nā hiʻohiʻona o ka hoʻolālā hoʻohālike data me ka hoʻohana ʻana i kahi laʻana aʻu i heluhelu ai i kekahi mau makahiki i hala i ka ʻatikala "Introduction to HB ase Schema Design" na Amandeep Khurana. I ka nānā ʻana i nā laʻana, ua hoʻohālikelike au i kekahi mau koho no ka hoʻoponopono ʻana i ka pilikia like i mea e hoʻopuka maikaʻi ai i nā manaʻo nui i ka lehulehu.

I kēia mau lā, "no ka hana ʻole," ua nīnau au iaʻu iho i ka nīnau (ʻo ka hopena pule lōʻihi o Mei i ka quarantine e kūpono loa i kēia), pehea ka nui o nā helu theoretical e pili ana i ka hoʻomaʻamaʻa? ʻOiaʻiʻo, ʻo ia ka mea i hānau ʻia ai ka manaʻo no kēia ʻatikala. ʻAʻole paha e aʻo ka mea hoʻomohala i hana pū me NoSQL no kekahi mau lā mai ia mea (a no laila hiki ke hoʻokuʻu koke i ka hapalua o ka ʻatikala). Akā no ka nā kānaka kālailaiNo ka poʻe i hana like ʻole me NoSQL, manaʻo wau he mea pono ia no ka loaʻa ʻana o ka ʻike kumu o nā hiʻohiʻona o ka hoʻolālā ʻana i nā hiʻohiʻona ʻikepili no HBase.

Ka laʻana kālailai

I koʻu manaʻo, ma mua o kou hoʻomaka ʻana i ka hoʻohana ʻana i nā ʻikepili NoSQL, pono ʻoe e noʻonoʻo pono a kaupaona i nā pono a me nā pōʻino. Hiki ke hoʻopau pinepine ʻia ka pilikia me ka hoʻohana ʻana i nā DBMS pili kuʻuna. No laila, ʻoi aku ka maikaʻi o ka hoʻohana ʻole ʻana iā NoSQL me nā kumu koʻikoʻi. Inā ua hoʻoholo naʻe ʻoe e hoʻohana i kahi waihona NoSQL, a laila pono ʻoe e noʻonoʻo he ʻokoʻa ka hoʻolālā ʻana ma aneʻi. He mea maʻamau paha kekahi o lākou no ka poʻe i hana mua i nā DBMS pili (e like me kaʻu mau ʻike). No laila, i ka honua "pili", hoʻomaka maʻamau mākou ma ka hoʻohālikelike ʻana i ka domain pilikia, a laila wale nō, inā pono, denormalize ke kumu hoʻohālike. Ma NoSQL mākou pono e noʻonoʻo koke i nā hiʻohiʻona i manaʻo ʻia no ka hana ʻana me ka ʻikepili a hoʻopau mua i ka ʻikepili. Eia kekahi, aia kekahi mau ʻokoʻa ʻē aʻe, e kūkākūkā ʻia ma lalo nei.

E noʻonoʻo kākou i kēia pilikia "synthetic", kahi e hoʻomau ai mākou i ka hana:

Pono e hoʻolālā i kahi hale mālama no ka papa inoa o nā hoaaloha o nā mea hoʻohana o kekahi ʻoihana pūnaewele abstract. No ka maʻalahi, e manaʻo mākou ua kuhikuhi ʻia kā mākou pili āpau (e like me Instagram, ʻaʻole Linkedin). Pono ka hale e hiki iā ʻoe ke hana maikaʻi:

  • E pane i ka nīnau inā heluhelu ka mea hoʻohana A i ka mea hoʻohana B (ke kumu heluhelu)
  • E ʻae i ka hoʻohui ʻana/ka wehe ʻana i nā pilina inā loaʻa ke kau inoa ʻana/ka hoʻopaʻa inoa ʻole ʻana o ka mea hoʻohana A mai ka mea hoʻohana B (ka hoʻololi hoʻololi ʻikepili)

ʻOiaʻiʻo, nui nā koho no ka hoʻoponopono ʻana i ka pilikia. I loko o kahi waihona pilina maʻamau, e hana wale mākou i kahi papa o nā pilina (i hōʻike ʻia inā, no ka laʻana, pono mākou e mālama i kahi pūʻulu mea hoʻohana: ʻohana, hana, a me nā mea ʻē aʻe, e pili ana i kēia "hoa") ʻO ka wikiwiki hiki ke hoʻohui i nā indexes/partitioning. E like paha me kēia ka papaʻaina hope:

hoʻohana_id
hoa_id

ʻO Vasya
Petya

ʻO Vasya
ʻO Olya

ma keia hope aku, no ka akaka a me ka hoomaopopo ana, e hoike au i na inoa ma kahi o na ID

I ka hihia o HBase, ʻike mākou:

  • 'imi pono 'ole i ka hopena i ka piha papa'aina scan hiki ma ke kī wale nō
    • ʻoiaʻiʻo, ʻo ia ke kumu he manaʻo maikaʻi ʻole ke kākau ʻana i nā nīnau SQL i kamaʻāina i nā mea he nui; ʻenehana, ʻoiaʻiʻo, hiki iā ʻoe ke hoʻouna i kahi nīnau SQL me Joins a me nā loiloi ʻē aʻe iā HBase mai ka Impala like, akā pehea ka maikaʻi ...

No laila, koi ʻia mākou e hoʻohana i ka ID mea hoʻohana ma ke ʻano he kī. A koʻu manaʻo mua ma ke kumuhana "ma hea a pehea e mālama ai i nā ID o nā hoaaloha?" he manaʻo paha e mālama i nā kolamu. ʻO kēia koho ʻoi loa a "naive" e like me kēia (e kāhea mākou Koho 1 (paʻamau)no ka ʻike hou aku):

RowKey
ʻ .lelo

ʻO Vasya
1: Petya
2: Olya
3: Dasha

Petya
1: Masha
2: Vasya

Maʻaneʻi, pili kēlā me kēia laina i hoʻokahi mea hoʻohana pūnaewele. He mau inoa nā kolamu: 1, 2, ... - e like me ka helu o nā hoaaloha, a mālama ʻia nā ID o nā hoaaloha ma nā kolamu. Pono e hoʻomaopopo he helu ʻokoʻa nā kolamu i kēlā me kēia lālani. Ma ka la'ana ma ke ki'i ma luna, ho'okahi lalani he 'ekolu kolamu (1, 2 a me 3), a 'o ka lua he 'elua wale nō (1 a me 2) - ma 'ane'i mākou i ho'ohana i 'elua mau waiwai HBase i loa'a 'ole i ka 'ikepili pili.

  • ka hiki ke hoʻololi i ke ʻano o nā kolamu (hoʻohui i kahi hoaaloha -> hoʻohui i kahi kolamu, wehe i kahi hoaaloha -> holoi i kahi kolamu)
  • hiki i nā lālani like ʻole ke haku ʻia nā kolamu

E nānā i kā mākou hoʻolālā no ka hoʻokō ʻana i nā koi o ka hana:

  • Heluhelu ʻikepili: i mea e hoʻomaopopo ai inā ua kākau inoa ʻo Vasya iā Olya, pono mākou e unuhi ka laina holoʻokoʻa e ke kī RowKey = "Vasya" a hoʻokaʻawale i nā koina kolamu a hiki i ka "hui" iā Olya i loko o lākou. A i ʻole e hoʻololi i nā waiwai o nā kolamu āpau, "ʻaʻole e hui" iā Olya a hoʻihoʻi i ka pane False;
  • Hoʻoponopono ʻikepili: hoʻohui i kahi hoaaloha: no ka hana like pono no hoi e unuhi ka laina holoʻokoʻa me ka hoʻohana ʻana i ke kī RowKey = "Vasya" e helu i ka huina o kāna mau hoaaloha. Pono mākou i kēia helu helu o nā hoaaloha e hoʻoholo i ka helu o ke kolamu e pono ai mākou e kākau i ka ID o ka hoaaloha hou.
  • Ke hoʻololi nei i ka ʻikepili: holoi i kahi hoaaloha:
    • Pono e unuhi ka laina holoʻokoʻa ma ke kī ʻo RowKey = "Vasya" a hoʻokaʻawale i nā kolamu i mea e ʻike ai i kahi i hoʻopaʻa ʻia ai ka hoaaloha e holoi ʻia;
    • A laila, ma hope o ka holoi ʻana i kahi hoaaloha, pono mākou e "hoʻololi" i nā ʻikepili a pau i hoʻokahi kolamu i ʻole e loaʻa nā "gaps" i kā lākou helu.

E noʻonoʻo kākou i ka hopena o kēia mau algorithms, e pono ai mākou e hoʻokō ma ka ʻaoʻao "conditional application", me ka hoʻohana ʻana. ʻO-hōʻailona. E hōʻike i ka nui o kā mākou ʻupena kaiapili hypothetical e like me n. A laila, ʻo ka helu nui loa o nā hoaaloha i loaʻa i kahi mea hoʻohana (n-1). Hiki iā mākou ke haʻalele i kēia (-1) no kā mākou kumu, ʻoiai i loko o ka hoʻohana ʻana i nā hōʻailona O he mea nui ʻole ia.

  • Heluhelu ʻikepili: pono e unuhi i ka laina holoʻokoʻa a hoʻololi i kona mau kolamu a pau i ka palena. ʻO ia hoʻi, ʻo ka manaʻo kiʻekiʻe o nā kumukūʻai ma kahi o O(n)
  • Hoʻoponopono ʻikepili: hoʻohui i kahi hoaaloha: no ka hoʻoholo ʻana i ka helu o nā hoaaloha, pono ʻoe e hoʻololi i nā kolamu āpau o ka lālani, a laila hoʻokomo i kahi kolamu hou => O(n)
  • Ke hoʻololi nei i ka ʻikepili: holoi i kahi hoaaloha:
    • E like me ka hoʻohui ʻana - pono ʻoe e hele i nā kolamu āpau i ka palena => O(n)
    • Ma hope o ka wehe ʻana i nā kolamu, pono mākou e "neʻe" iā lākou. Inā hoʻokō ʻoe i kēia "head-on", a laila ma ka palena e pono ai ʻoe i nā hana (n-1). Eia naʻe a ma ka ʻāpana hana e hoʻohana mākou i kahi ala ʻē aʻe, kahi e hoʻokō ai i kahi "pseudo-shift" no kahi helu paʻa o nā hana - ʻo ia hoʻi, e hoʻopau ʻia ka manawa mau ma luna o ia mea, me ka ʻole o n. Hiki ke mālama ʻole ʻia kēia manawa mau (O(2) e hoʻohālikelike ʻia me O(n). Hōʻike ʻia ke ala ma ke kiʻi ma lalo nei: kope wale mākou i ka ʻikepili mai ke kolamu "hope" i ka mea a mākou e makemake ai e holoi i ka ʻikepili, a laila holoi i ke kolamu hope:
      Nā hiʻohiʻona o ka hoʻolālā ʻana i kahi kumu hoʻohālike no NoSQL

I ka huina, i nā hiʻohiʻona a pau ua loaʻa iā mākou kahi paʻakikī helu asymptotic o O(n).
Ua ʻike paha ʻoe ua aneane mau mākou e heluhelu i ka lālani holoʻokoʻa mai ka waihona, a i ʻelua mau hihia mai ʻekolu, e hele wale i nā kolamu āpau a helu i ka huina o nā hoaaloha. No laila, ma ke ʻano he hoʻāʻo ʻana i ka optimization, hiki iā ʻoe ke hoʻohui i kahi kolamu "helu", kahi e mālama ai i ka nui o nā hoaaloha o kēlā me kēia mea hoʻohana pūnaewele. I kēia hihia, ʻaʻole hiki iā mākou ke heluhelu i ka lālani holoʻokoʻa e helu i ka heluna o nā hoaaloha, akā heluhelu i hoʻokahi kolamu "helu". ʻO ka mea nui ʻaʻole e poina e hoʻonui i ka "helu" i ka wā e hoʻoponopono ai i ka ʻikepili. ʻO kēlā. hoʻomaikaʻi mākou Koho 2 (helu):

RowKey
ʻ .lelo

ʻO Vasya
1: Petya
2: Olya
3: Dasha
helu: 3

Petya
1: Masha
2: Vasya

helu: 2

Hoʻohālikelike i ka koho mua:

  • Heluhelu ʻikepili: e loaʻa kahi pane i ka nīnau "Heluhelu ʻo Vasya iā Olya?" ʻaʻohe mea i loli => O(n)
  • Hoʻoponopono ʻikepili: hoʻohui i kahi hoaaloha: Ua maʻalahi mākou i ka hoʻokomo ʻana o kahi hoaaloha hou, ʻoiai ʻaʻole pono mākou e heluhelu i ka laina holoʻokoʻa a hoʻololi i kāna mau kolamu, akā hiki ke loaʻa ka waiwai o ke kolamu "helu", etc. e hoʻoholo koke i ka helu kolamu e hoʻokomo ai i hoa hou. Ke alakaʻi nei kēia i ka hōʻemi ʻana i ka paʻakikī helu helu iā O (1)
  • Ke hoʻololi nei i ka ʻikepili: holoi i kahi hoaaloha: I ka holoi ʻana i kahi hoaaloha, hiki iā mākou ke hoʻohana i kēia kolamu e hōʻemi i ka helu o nā hana I/O ke "hoʻololi" i ka ʻikepili i hoʻokahi cell i ka hema. Akā ʻo ka pono e hoʻololi i nā kolamu e ʻike i ka mea e pono e holoi ʻia e mau nō, no laila => ​​O(n)
  • Ma ka ʻaoʻao ʻē aʻe, i kēia manawa i ka wā e hoʻonui ai i ka ʻikepili pono mākou e hoʻonui i ka kolamu "helu" i kēlā me kēia manawa, akā pono kēia i ka manawa mau, hiki ke haʻalele ʻia i loko o ka hoʻolālā o nā hōʻailona O.

Ma keʻano laulā, ʻoi aku ka maikaʻi o ka koho 2, akā ua like ia me ka "evolution ma kahi o ka hoʻololi." No ka hana ʻana i kahi "kipi" pono mākou Koho 3 (coli).
E hoʻohuli i nā mea a pau "i lalo": e koho mākou inoa kolamu ID mea hoʻohana! ʻO ka mea e kākau ʻia i loko o ke kolamu ponoʻī ʻaʻole ia he mea nui iā mākou, e waiho i ka helu 1 (ma ka laulā, hiki ke mālama ʻia nā mea pono ma laila, no ka laʻana, ka hui "ʻohana / hoaaloha / etc."). Hiki paha i kēia ala ke kāhāhā i ka "leo" i mākaukau ʻole ʻaʻohe ʻike mua i ka hana ʻana me nā ʻikepili NoSQL, akā ʻo kēia ala e hiki ai iā ʻoe ke hoʻohana i ka hiki o HBase i kēia hana i ʻoi aku ka maikaʻi.

RowKey
ʻ .lelo

ʻO Vasya
Petya: 1
ʻOlia: 1
Dasha: 1

Petya
Maika: 1
Vasya: 1

Maʻaneʻi e loaʻa iā mākou kekahi mau pono i ka manawa hoʻokahi. No ka hoʻomaopopo ʻana iā lākou, e kālele kāua i ka hoʻolālā hou a koho i ka paʻakikī o ka helu helu:

  • Heluhelu ʻikepili: no ka pane ʻana i ka nīnau inā ua kākau inoa ʻo Vasya iā Olya, ua lawa ka heluhelu ʻana i hoʻokahi kolamu "Olya": inā aia ma laila, a laila ʻoiaʻiʻo ka pane, inā ʻaʻole - False => O(1)
  • Hoʻoponopono ʻikepili: hoʻohui i kahi hoaaloha: Hoʻohui i kahi hoaaloha: hoʻohui wale i kahi kolamu hou "ID ID" => O(1)
  • Ke hoʻololi nei i ka ʻikepili: holoi i kahi hoaaloha: wehe wale i ke kolamu Friend ID => O(1)

E like me kāu e ʻike ai, ʻo kahi pōmaikaʻi nui o kēia ʻano hoʻopaʻa ʻana, ʻo ia i nā hiʻohiʻona āpau a mākou e pono ai, ke hana nei mākou me hoʻokahi kolamu, e pale ana i ka heluhelu ʻana i ka lālani holoʻokoʻa mai ka waihona a me ka helu ʻana i nā kolamu āpau o kēia lālani. Hiki iā mākou ke kū ma laila, akā...

Hiki iā ʻoe ke kānalua a hele i kahi ʻoi aku ma ke ala o ka hoʻomaikaʻi ʻana i ka hana a me ka hōʻemi ʻana i nā hana I/O ke komo i ka waihona. He aha inā mākou e mālama pono i ka ʻike pili pili i ke kī lālani ponoʻī? ʻO ia hoʻi, e hana i ke kī composite e like me userID.friendID? I kēia hihia, ʻaʻole pono mākou e heluhelu i nā kolamu o ka laina (Koho 4(laina)):

RowKey
ʻ .lelo

Vasya.Petya
Petya: 1

Vasya.Olya
ʻOlia: 1

ʻO Vasya.Dasha
Dasha: 1

Petya.Masha
Maika: 1

Petya.Vasya
Vasya: 1

ʻIke loa, ʻo ka loiloi o nā hiʻohiʻona hoʻopunipuni ʻikepili āpau i loko o ia ʻano, e like me ka mana o mua, ʻo ia ʻo O(1). ʻO ka ʻokoʻa me ka koho 3 aia wale nō i ka pono o nā hana I/O ma ka waihona.

ʻAe, ka "kakaka" hope loa. He mea maʻalahi ke ʻike ma ke koho 4, he ʻano lōʻihi ka lōʻihi o ke kī lālani, hiki ke hoʻopilikia i ka hana (eia mākou e hoʻomanaʻo nei e mālama ʻo HBase i ka ʻikepili ma ke ʻano he hoʻonohonoho o nā bytes a hoʻonohonoho ʻia nā lālani i nā papa ma ke kī). Eia kekahi, loaʻa iā mākou kahi mea hoʻokaʻawale e pono ai ke mālama ʻia i kekahi mau hiʻohiʻona. No ka hoʻopau ʻana i kēia mana, hiki iā ʻoe ke hoʻohana i nā hashes mai ka userID a me friendID, a no ka lōʻihi mau o nā hashes ʻelua, hiki iā ʻoe ke hoʻohui wale iā lākou, me ka ʻole o kahi mea hoʻokaʻawale. A laila e like me kēia ka ʻikepili ma ka papa (Koho 5(hash)):

RowKey
ʻ .lelo

dc084ef00e94aef49be885f9b01f51c01918fa783851db0dc1f72f83d33a5994
Petya: 1

dc084ef00e94aef49be885f9b01f51c0f06b7714b5ba522c3cf51328b66fe28a
ʻOlia: 1

dc084ef00e94aef49be885f9b01f51c00d2c2e5d69df6b238754f650d56c896a
Dasha: 1

1918fa783851db0dc1f72f83d33a59949ee3309645bd2c0775899fca14f311e1
Maika: 1

1918fa783851db0dc1f72f83d33a5994dc084ef00e94aef49be885f9b01f51c0
Vasya: 1

ʻIke loa, ʻo ka paʻakikī algorithmic o ka hana ʻana me ia ʻano i loko o nā hiʻohiʻona a mākou e noʻonoʻo nei e like me ke koho 4 - ʻo ia hoʻi, O (1).
I ka huina, e hōʻuluʻulu mākou i kā mākou mau manaʻo pili i ka paʻakikī o ka helu helu ma ka papa hoʻokahi:

Hoʻohui hoa
Ke nānā nei i kahi hoaaloha
Ka wehe ʻana i kahi hoaaloha

Koho 1 (paʻamau)
ʻO (n)
ʻO (n)
ʻO (n)

Koho 2 (helu)
ʻO (1)
ʻO (n)
ʻO (n)

Koho 3 (koluma)
ʻO (1)
ʻO (1)
ʻO (1)

Вариант 4 (row)
ʻO (1)
ʻO (1)
ʻO (1)

Koho 5 (hash)
ʻO (1)
ʻO (1)
ʻO (1)

E like me kāu e ʻike ai, ʻoi aku ka maikaʻi o nā koho 3-5 a me ka manaʻo e hōʻoia i ka hoʻokō ʻana i nā hiʻohiʻona manipulation data pono i ka manawa mau. Ma nā kūlana o kā mākou hana, ʻaʻohe koi kikoʻī e kiʻi i kahi papa inoa o nā hoaaloha a pau o ka mea hoʻohana, akā i nā hana papahana maoli, he mea maikaʻi ia iā mākou, ma ke ʻano he loiloi maikaʻi, e "manaʻo" e ala mai ia hana a "hohola i kahi mauʻu." No laila, aia koʻu mau ʻoluʻolu ma ka ʻaoʻao o ke koho 3. Akā, ʻoi aku paha ma kahi papahana maoli ua hiki ke hoʻoholo ʻia kēia noi ma nā ʻano ʻē aʻe, no laila, me ka ʻike ʻole o ka pilikia holoʻokoʻa, ʻoi aku ka maikaʻi o ka hana ʻole. nā hopena hope loa.

Hoʻomākaukau i ka hoʻokolohua

Makemake au e ho'āʻo i nā manaʻo hoʻopaʻapaʻa i luna ma ka hoʻomaʻamaʻa - ʻo ia ka pahuhopu o ka manaʻo i ala mai i ka hopena pule lōʻihi. No ka hana ʻana i kēia, pono e loiloi i ka wikiwiki o ka hana o kā mākou "conditional application" i nā hiʻohiʻona i wehewehe ʻia no ka hoʻohana ʻana i ka waihona, a me ka hoʻonui ʻana i kēia manawa me ka hoʻonui nui ʻana o ka ʻoihana pūnaewele (n). ʻO ka mea i makemake ʻia e mākou a e ana mākou i ka wā o ka hoʻokolohua, ʻo ia ka manawa i hoʻohana ʻia e ka "conditional application" e hana i hoʻokahi "hana ʻoihana". Ma ka "ʻoihana pāʻoihana" ʻo mākou kekahi o kēia mau mea:

  • Hoʻohui i hoʻokahi hoa hou
  • Ke nānā nei inā he hoaaloha ʻo Mea hoʻohana A no ka mea hoʻohana B
  • Ka wehe ʻana i hoʻokahi hoa

No laila, me ka noʻonoʻo ʻana i nā koi i hōʻike ʻia ma ka ʻōlelo mua, ʻike ʻia ke ʻano hōʻoia penei:

  • Hoʻopaʻa ʻikepili. Hoʻopuka wale i kahi pūnaewele mua o ka nui n. No ka hoʻokokoke ʻana i ka "honua maoli", ʻo ka helu o nā hoaaloha i loaʻa i kēlā me kēia mea hoʻohana he ʻano hoʻololi like ʻole. E ana i ka manawa e kākau ai kā mākou "conditional application" i nā ʻikepili i hana ʻia i HBase. A laila e puʻunaue i ka manawa hopena me ka huina o nā hoa i hoʻohui ʻia - ʻo ia ke ala e loaʻa ai ka manawa maʻamau no hoʻokahi "hana ʻoihana"
  • Heluhelu ʻikepili. No kēlā me kēia mea hoʻohana, e hana i kahi papa inoa o nā "ʻano pilikino" e pono ai ʻoe e loaʻa kahi pane inā ua kau inoa ka mea hoʻohana iā lākou a ʻaʻole paha. ʻO ka lōʻihi o ka papa inoa = e like me ka helu o nā hoaaloha o ka mea hoʻohana, a no ka hapalua o nā hoaaloha i nānā ʻia ʻo ka pane ʻo "ʻAe", a no ka hapa ʻē aʻe - "ʻAʻole". Hana ʻia ka nānā ʻana ma ke ʻano o nā pane "ʻAe" a me "ʻAʻole" (ʻo ia hoʻi, i kēlā me kēia hihia kekona e hele mākou i nā kolamu āpau o ka laina no nā koho 1 a me 2). Hoʻokaʻawale ʻia ka nui o ka manawa screening e ka helu o nā hoaaloha i hoʻāʻo ʻia no ka loaʻa ʻana o ka manawa screening maʻamau i kēlā me kēia kumuhana.
  • Ke holoi nei i ka ʻikepili. Wehe i nā hoaaloha a pau mai ka mea hoʻohana. Eia kekahi, ʻo ke kauoha holoi ʻana he maʻamau (ʻo ia hoʻi, "shuffle" mākou i ka papa inoa mua i hoʻohana ʻia e hoʻopaʻa i ka ʻikepili). Hoʻokaʻawale ʻia ka nui o ka manawa hōʻoia e ka helu o nā hoaaloha i hoʻoneʻe ʻia no ka loaʻa ʻana o ka manawa awelika no kēlā me kēia helu.

Pono e holo nā hiʻohiʻona no kēlā me kēia o nā koho hoʻohālike data 5 a no nā ʻano nui like ʻole o ka ʻoihana pūnaewele e ʻike i ka loli ʻana o ka manawa i kona ulu ʻana. I loko o hoʻokahi n, nā pilina ma ka pūnaewele a me ka papa inoa o nā mea hoʻohana e nānā pono, ʻoiaʻiʻo, e like me nā koho 5 āpau.
No ka hoʻomaopopo maikaʻi ʻana, aia ma lalo kahi laʻana o ka ʻikepili i hana ʻia no n= 5. ʻO ka "generator" i kākau ʻia e hana i ʻekolu mau puke wehewehe ID ma ke ʻano he puka.

  • ʻo ka mea mua no ka hoʻokomo
  • ʻo ka lua no ka nānā ʻana
  • ʻekolu - no ka holoi ʻana

{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 друзей

E like me kāu e ʻike ai, ʻo nā ID āpau i ʻoi aku ma mua o 10 i loko o ka puke wehewehe ʻōlelo no ka nānā ʻana, ʻo ia ka mea e hāʻawi i ka pane False. Hoʻokomo ʻia, nānā a holoi ʻana i nā "hoaaloha" e hana pololei ʻia ma ke kaʻina i kuhikuhi ʻia ma ka puke wehewehe.

Ua hana ʻia ka hoʻokolohua ma kahi kamepiula e holo ana Windows 10, kahi e holo ai ʻo HBase i hoʻokahi pahu Docker, a ʻo Python me Jupyter Notebook e holo ana i kekahi. Ua hoʻokaʻawale ʻia ʻo Docker i 2 cores CPU a me 2 GB o RAM. ʻO nā loina āpau, e like me ka emulation o ka "conditional application" a me ka "piping" no ka hana ʻana i ka ʻikepili hōʻike a me ke ana ʻana i ka manawa, ua kākau ʻia ma Python. Ua hoʻohana ʻia ka waihona e hana pū me HBase kahua hauʻoli, e helu i nā hashes (MD5) no ke koho 5 - hashlib

Ma ka noʻonoʻo ʻana i ka mana helu o kekahi pona, ua koho ʻia kahi hoʻomaka no n = 10, 30, ... 170 – ʻoi aku ka maikaʻi o ka manawa hana o ka pōʻai hoʻāʻo holoʻokoʻa (nā hiʻohiʻona āpau no nā koho āpau no nā n) a ʻoi aku ka maikaʻi a kūpono paha i ka pāʻina kī hoʻokahi (ma ka awelika 15 mau minuke).

Eia ka mea pono e hana i ka olelo, ma keia hoao ana, aole makou e loiloi mua i na helu hana pono. ʻAʻole paha pololei ka hoʻohālikelike pili o nā koho ʻelua. I kēia manawa, makemake mākou i ke ʻano o ka hoʻololi ʻana i ka manawa ma muli o ka n, mai ka noʻonoʻo ʻana i ka hoʻonohonoho ma luna o ka "kū hoʻāʻo", he paʻakikī loa ka loaʻa ʻana o ka manawa "hoʻomaʻemaʻe" i ka mana o nā mea āpau a me nā mea ʻē aʻe ( a ʻaʻole i hoʻonohonoho ʻia kēlā hana).

Ka hopena hoʻokolohua

ʻO ka hoʻāʻo mua ka hoʻololi ʻana o ka manawa i hoʻopiha ʻia i ka papa inoa o nā hoaaloha. Aia ka hopena ma ka pakuhi ma lalo nei.
Nā hiʻohiʻona o ka hoʻolālā ʻana i kahi kumu hoʻohālike no NoSQL
ʻO nā koho 3-5, e like me ka mea i manaʻo ʻia, e hōʻike ana i kahi manawa "ʻoihana kālepa" kokoke mau, ʻaʻole i hilinaʻi i ka ulu ʻana o ka nui o ka pūnaewele a me kahi ʻokoʻa ʻike ʻole i ka hana.
Hōʻike ka koho 2 i ka hana mau, akā ʻoi aku ka maikaʻi o ka hana, kokoke i 2 mau manawa e pili ana i nā koho 3-5. A ʻaʻole hiki ke hauʻoli kēia, no ka mea e pili ana ia me ke kumumanaʻo - ma kēia mana ka helu o nā hana I/O i/mai HBase ʻoi aku ka nui o 2 mau manawa. Hiki i kēia ke lilo i mea hōʻike pololei ʻole e hāʻawi i kā mākou papa hoʻāʻo, ma ke kumu, hāʻawi i ka pololei maikaʻi.
ʻO ke koho 1 hoʻi, e like me ka mea i manaʻo ʻia, ʻoi aku ka lohi a hōʻike i ka hoʻonui laina o ka manawa i hoʻohana ʻia ma ka hoʻohui ʻana i kekahi i ka nui o ka pūnaewele.
E nānā kākou i nā hopena o ka hoʻāʻo ʻelua.
Nā hiʻohiʻona o ka hoʻolālā ʻana i kahi kumu hoʻohālike no NoSQL
Hana hou nā koho 3-5 e like me ka mea i manaʻo ʻia - ka manawa mau, kūʻokoʻa i ka nui o ka pūnaewele. Hōʻike nā koho 1 a me 2 i ka hoʻonui laina i ka manawa i ka piʻi ʻana o ka nui o ka pūnaewele a me ka hana like. Eia kekahi, ʻoi aku ka liʻiliʻi o ka koho 2 - ʻike ʻia ma muli o ka pono e hoʻoponopono a hoʻoponopono i ke kolamu "helu" hou aʻe, e ʻike ʻia i ka ulu ʻana o n. Akā ʻaʻole wau e huki i nā hopena, no ka mea he haʻahaʻa loa ka pololei o kēia hoʻohālikelike. Eia kekahi, ua hoʻololi kēia mau lakio (ʻo ia ka koho, 1 a i ʻole 2, ʻoi aku ka wikiwiki) mai ka holo ʻana i ka holo (me ka mālama ʻana i ke ʻano o ka hilinaʻi a "hele ka ʻāʻī a me ka ʻāʻī").

ʻAe, ʻo ka pakuhi hope ka hopena o ka hoʻāʻo ʻana.

Nā hiʻohiʻona o ka hoʻolālā ʻana i kahi kumu hoʻohālike no NoSQL

Eia hou, ʻaʻohe mea kupanaha ma ʻaneʻi. Hana nā koho 3-5 i ka wehe ʻana i ka manawa mau.
Eia kekahi, hoihoi, nā koho 4 a me 5, ʻaʻole e like me nā hiʻohiʻona mua, hōʻike i ka hana ʻoi aku ka maikaʻi ma mua o ke koho 3. ʻIke ʻia, ʻoi aku ka pipiʻi o ka hana holoi ʻana ma mua o ka hana holoi kolamu, ʻo ia ka mea maʻamau.

ʻO nā koho 1 a me 2, e like me ka mea i manaʻo ʻia, hōʻike i ka hoʻonui laina o ka manawa. Ma ka manawa like, ʻoi aku ka lohi o ka koho 2 ma mua o ke koho 1 - ma muli o ka hana I/O hou e "mālama" i ke kolamu helu.

Nā hopena maʻamau o ka hoʻokolohua:

  • Hōʻike nā koho 3-5 i ka ʻoi aku ka maikaʻi i ka wā e hoʻohana ai lākou i ka HBase; Eia kekahi, ʻokoʻa kā lākou hana e pili ana i kekahi i kekahi e ka mea mau a ʻaʻole hilinaʻi i ka nui o ka pūnaewele.
  • ʻAʻole i kākau ʻia ka ʻokoʻa ma waena o nā koho 4 a me 5. Akā ʻaʻole kēia manaʻo ʻaʻole pono e hoʻohana ʻia ke koho 5. Malia paha ʻo ke ʻano hoʻokolohua i hoʻohana ʻia, me ka noʻonoʻo ʻana i nā hiʻohiʻona hana o ka papa hoʻāʻo, ʻaʻole i ʻae ʻia e ʻike ʻia.
  • ʻO ke ʻano o ka hoʻonui ʻana i ka manawa i koi ʻia e hana i nā "hana ʻoihana" me ka ʻikepili maʻamau i hōʻoia ʻia i nā helu theoretical i loaʻa mua no nā koho āpau.

Epilogue

ʻAʻole pono e lawe ʻia nā hoʻokolohua koʻikoʻi ma ke ʻano he ʻoiaʻiʻo maoli. Nui nā kumu i noʻonoʻo ʻole ʻia a hoʻololi i nā hopena (ʻike ʻia kēia mau fluctuations i nā kiʻi me kahi liʻiliʻi pūnaewele). No ka laʻana, ʻo ka wikiwiki o ka mālama kālā, i hoʻohana ʻia e ka happybase, ka nui a me ke ʻano o ka hoʻokō ʻana i ka loiloi aʻu i kākau ai ma Python (ʻaʻole hiki iaʻu ke ʻōlelo ua kākau maikaʻi ʻia ke code a hoʻohana maikaʻi ʻia i nā hiki o nā mea āpau). nā hiʻohiʻona o ka caching HBase, ka hana hope o Windows 10 ma kaʻu kamepiula, etc. Ma keʻano laulā, hiki iā mākou ke manaʻo ua hōʻike ʻia nā helu theoretical āpau i ko lākou kūpono. ʻAe, a ma ka liʻiliʻi paha ʻaʻole hiki ke hōʻole iā lākou me kahi "hoʻouka poʻo".

I ka hopena, ʻōlelo manaʻo no ka poʻe a pau e hoʻomaka ana e hoʻolālā i nā hiʻohiʻona ʻikepili ma HBase: abstract mai ka ʻike mua e hana ana me nā ʻikepili pili a hoʻomanaʻo i nā "kauoha":

  • I ka hoʻolālā ʻana, hoʻomaka mākou mai ka hana a me nā ʻano o ka manipulation data, ʻaʻole mai ke kumu hoʻohālike
  • Loaʻa kūpono (me ka nānā ʻole ʻana i ka papaʻaina piha) - ma ke kī wale nō
  • Denormalization
  • Hiki i nā lālani like ʻole ke loaʻa nā kolamu like ʻole
  • ʻO ka haku mele ʻana o nā mea haʻiʻōlelo

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka