Pono nā mea hoʻomohala hou aku e ʻike i kēia e pili ana i nā waihona

Nānā. unuhi.: He loea akamai ʻo Jaana Dogan ma Google e hana nei i ka nānā ʻana i nā lawelawe hana o ka hui i kākau ʻia ma Go. I loko o kēia 'atikala, i loa'a ka mahalo nui i waena o ka 'ōlelo Pelekania, ua hō'ili'ili 'o ia i 17 mau kiko'ī kiko'ī ko'iko'i e pili ana i nā DBMS (a i kekahi manawa i pu'unaue 'ia ma ka laulā) i pono e no'ono'o no nā mea ho'omohala o nā noi nui/koi.

Pono nā mea hoʻomohala hou aku e ʻike i kēia e pili ana i nā waihona

ʻO ka hapa nui o nā ʻōnaehana kamepiula e mālama i ko lākou mokuʻāina a, no laila, pono ke ʻano o ka ʻōnaehana mālama ʻikepili. Ua hōʻiliʻili au i ka ʻike e pili ana i ka ʻikepili no ka manawa lōʻihi, ma ke ala e hana hewa ai i ka hoʻolālā i alakaʻi ʻia i ka nalowale a me ka pau ʻana o ka ʻikepili. I loko o nā ʻōnaehana e hana ana i nā puke nui o ka ʻike, aia nā ʻikepili i ka puʻuwai o ka ʻōnaehana ʻōnaehana a hana ma ke ʻano he kumu nui i ke koho ʻana i ka hopena maikaʻi loa. ʻOiai ʻo ka nānā pono ʻana i ka hana o ka waihona, ʻo nā pilikia a nā mea hoʻomohala noi e hoʻāʻo nei e manaʻo pinepine i ka piko o ka hau hau. Ma kēia pūʻulu ʻatikala, kaʻana wau i kekahi mau manaʻo e pono ai nā mea hoʻomohala ʻaʻole loea i kēia kahua.

  1. Laki ʻoe inā 99,999% o ka manawa ʻaʻole pilikia ka pūnaewele.
  2. ʻO ACID ke ʻano o nā mea like ʻole.
  3. Loaʻa i kēlā me kēia waihona kona mau hana ponoʻī no ka hōʻoia ʻana i ka kūlike a me ka kaʻawale.
  4. Hiki mai ka pale ʻana i ka maikaʻi i ka wā paʻakikī ke mālama i ka mea maʻamau.
  5. Aia kekahi anomalies ma waho o ka heluhelu lepo a me ka nalowale ʻikepili.
  6. ʻAʻole ʻae mau ka waihona a me ka mea hoʻohana i ke ʻano o ka hana.
  7. Hiki ke hoʻoneʻe ʻia ka sharding pae noi ma waho o ka noi.
  8. Hiki ke pilikia ka hoʻonui ʻana.
  9. Hiki ke hoʻohana ʻia ka ʻikepili stale a ʻaʻole pono e laka.
  10. He mea maʻamau ka hoʻololi ʻana i nā kumu manawa.
  11. Nui nā manaʻo o ka lohi.
  12. Pono e loiloi ʻia nā pono hana no kahi kālepa kikoʻī.
  13. Hiki ke pilikia nā hana i hoʻopaʻa ʻia.
  14. ʻAʻole pono e hoʻopaʻa ʻia nā hana i ke kūlana noi.
  15. Hiki i nā mea hoʻolālā nīnau ke haʻi nui iā ʻoe e pili ana i nā waihona.
  16. He paʻakikī ka neʻe ʻana ma ka pūnaewele, akā hiki.
  17. ʻO ka hoʻonui nui ʻana i ka waihona e komo i ka piʻi ʻana o ka unpredictability.

Makemake wau e hoʻomaikaʻi iā Emmanuel Odeke, Rein Henrichs a me nā mea ʻē aʻe no kā lākou manaʻo e pili ana i kahi mana mua o kēia ʻatikala.

Laki ʻoe inā 99,999% o ka manawa ʻaʻole pilikia ka pūnaewele.

Ke waiho nei ka nīnau e pili ana i ka hilinaʻi ʻana o nā ʻenehana pūnaewele hou a me ka pinepine o ka hāʻule ʻana o nā ʻōnaehana ma muli o nā hemahema o ka pūnaewele. He liʻiliʻi ka ʻike e pili ana i kēia pilikia a ʻo ka noiʻi pinepine ʻia e nā hui nui me nā ʻupena kūikawā, nā lako a me nā limahana.

Me ka loaʻa ʻana o 99,999% no Spanner (Google's globally distributed database), ʻōlelo ʻo Google ʻo ia wale nō. 7,6% pili nā pilikia i ka pūnaewele. I ka manawa like, kāhea ka hui i kāna pūnaewele kūikawā i ka "pou nui" o ka loaʻa kiʻekiʻe. Haʻawina Bailis a me Kingsbury, i alakaʻi ʻia i ka makahiki 2014, hoʻokūkū i kekahi o nā "manaʻo kuhihewa e pili ana i ka hoʻopili helu helu", i hoʻokumu ʻia e Peter Deutsch ma 1994. Hiki ke hilinaʻi maoli ka pūnaewele?

ʻO ka noiʻi piha ʻana ma waho o nā hui nunui, i alakaʻi ʻia no ka pūnaewele ākea, ʻaʻole i loaʻa. ʻAʻole lawa ka ʻikepili mai nā mea pāʻani nui e pili ana i ka pākēneka o nā pilikia o kā lākou mea kūʻai aku e pili ana i ka pūnaewele. Ua ʻike maikaʻi mākou i ka pau ʻana o ka pūnaewele pūnaewele o nā mea hoʻolako kapuaʻi nui e hiki ke hoʻopau i kahi puʻupuʻu holoʻokoʻa o ka Pūnaewele no kekahi mau hola ma muli wale nō o nā hanana kiʻekiʻe e pili ana i ka nui o nā poʻe a me nā hui. Hiki i ka pau ʻana o ka pūnaewele ke hoʻopilikia i nā hihia he nui, ʻoiai inā ʻaʻole ʻo ia mau hihia a pau i ka maka. ʻAʻole ʻike nā mea kūʻai aku o nā lawelawe kapuaʻi i kekahi mea e pili ana i nā kumu o nā pilikia. Inā he hemahema, aneane hiki ʻole ke hoʻohālikelike ʻia i kahi hewa pūnaewele ma ka ʻaoʻao o ka mea lawelawe. No lākou, he mau pahu ʻeleʻele nā ​​lawelawe ʻaoʻao ʻekolu. ʻAʻole hiki ke loiloi i ka hopena me ka ʻole o ka lawelawe lawelawe nui.

Hāʻawi ʻia i ka mea a ka poʻe pāʻani nui e hōʻike ai e pili ana i kā lākou ʻōnaehana, palekana ke ʻōlelo ʻoe ua laki ʻoe inā ʻike nā pilikia o ka pūnaewele no kahi hapa liʻiliʻi o nā pilikia downtime. Ke pilikia mau nei nā kamaʻilio pūnaewele mai nā mea maʻamau e like me ka hāʻule ʻana o ka hāmeʻa, nā loli topology, nā hoʻololi hoʻonohonoho hoʻokele, a me ka pau ʻana o ka mana. I kēia mau lā, ua kahaha wau i ka ʻike ʻana ua hoʻohui ʻia ka papa inoa o nā pilikia nahu manō (ʻae, lohe pono ʻoe).

ʻO ACID ke ʻano o nā mea like ʻole

ʻO ka acronym ACID ke kū nei no Atomicity, Consistency, Isolation, Reliability. Kuhi ʻia kēia mau waiwai o nā kālepa e hōʻoia i ko lākou kūpono i ka wā o ka hāʻule ʻana, nā hewa, nā hemahema o nā lako, etc. Me ka loaʻa ʻole o ACID a i ʻole nā ​​papahana like, paʻakikī i nā mea hoʻomohala noiʻi ke hoʻokaʻawale i waena o kā lākou kuleana a me ke kuleana o ka waihona. ʻO ka hapa nui o nā ʻikepili transactional relational e hoʻāʻo e hoʻokō i ka ACID, akā ʻo nā ala hou e like me NoSQL ua hoʻāla i nā ʻikepili he nui me ka ʻole o nā kālepa ACID no ka mea he pipiʻi ke hoʻokō.

I koʻu komo mua ʻana i ka ʻoihana, ua kamaʻilio kā mākou alakaʻi loea e pili ana i ke kūpono o ka manaʻo ACID. No ka pololei, ua manaʻo ʻia ʻo ACID he wehewehe koʻikoʻi ma mua o ke kūlana hoʻokō koʻikoʻi. I kēia lā, ʻike wau he mea maikaʻi loa ia no ka mea e hāpai ana i kahi ʻano kikoʻī o nā pilikia (a hōʻike i kahi ʻano o nā hopena hiki).

ʻAʻole pono nā DBMS a pau i ka ACID; Ma ka manawa like, ʻokoʻa ka hoʻokō ʻana o ka waihona e kākoʻo ana i ka ACID i ka hoʻonohonoho o nā koi. ʻO kekahi o nā kumu e paʻakikī ai ka hoʻokō ʻana o ka ACID ma muli o ka nui o nā kālepa e pono ai e hoʻokō i nā koi ACID. Hiki i nā mea hana ke hōʻike i kā lākou ʻikepili e like me ka ACID-compliant, akā ʻokoʻa ka wehewehe ʻana o nā hihia lihi, e like me ke ʻano o ka lawelawe ʻana i nā hanana "hiki ʻole". Ma ka liʻiliʻi loa, hiki i nā mea hoʻomohala ke loaʻa i kahi ʻike kiʻekiʻe o ka paʻakikī o nā hoʻokō kumu e loaʻa ai ka ʻike kūpono o kā lākou ʻano kūikawā a me nā kālepa hoʻolālā.

Ke hoʻomau nei ka hoʻopaʻapaʻa e pili ana i ka hoʻokō ʻana o MongoDB me nā koi ACID ma hope o ka hoʻokuʻu ʻana o ka mana 4. ʻAʻole kākoʻo ʻia ʻo MongoDB no ka manawa lōʻihi kālai lāʻau, ʻoiai ua hoʻopaʻa ʻia ka ʻikepili paʻamau i ka disk ma mua o hoʻokahi manawa i kēlā me kēia 60 kekona. E noʻonoʻo i kēia ʻano hiʻohiʻona: hoʻouna kahi palapala noi i ʻelua mau kākau (w1 a me w2). Mālama pono ʻo MongoDB i ka w1, akā ua nalowale ʻo w2 ma muli o ka hemahema o ka lako.

Pono nā mea hoʻomohala hou aku e ʻike i kēia e pili ana i nā waihona
Diagram e hōʻike ana i ke kūlana. Hāʻule ʻo MongoDB ma mua o hiki iā ia ke kākau i ka ʻikepili i ka disk

ʻO ka hoʻopaʻa ʻana i ka diski kahi hana pipiʻi. Ma ka pale ʻana i nā hana hoʻopaʻa pinepine, hoʻomaikaʻi nā mea hoʻomohala i ka hana hoʻopaʻa ʻana ma ka lilo o ka hilinaʻi. Kākoʻo ʻo MongoDB i kēia manawa i ka hoʻopaʻa inoa ʻana, akā hiki i nā palapala lepo ke hoʻopili i ka pono o ka ʻikepili no ka mea ua hopu ʻia nā lāʻau i kēlā me kēia 100ms ma ka paʻamau. ʻO ia hoʻi, hiki nō ke ʻano like no nā lāʻau a me nā loli i hōʻike ʻia i loko o lākou, ʻoiai ʻoi aku ka haʻahaʻa o ka pilikia.

Loaʻa i kēlā me kēia waihona kona ʻano kūlike a me ka hoʻokaʻawale ʻana

ʻO nā koi ACID, ʻo ke kūpaʻa a me ka hoʻokaʻawale ʻana i ka helu nui loa o nā hoʻokō like ʻole no ka mea ʻoi aku ka laulā o nā kālepa-offs. Pono e ʻōlelo ʻia ʻo ka kūlike a me ka hoʻokaʻawale ʻana he mau hana pipiʻi. Pono lākou i ka hoʻohui a hoʻonui i ka hoʻokūkū no ka paʻa ʻana o ka ʻikepili. Piʻi nui ka paʻakikī o ka pilikia i ka wā e pono ai ke kau ʻana i ka ʻikepili ma ke alo o nā kikowaena ʻikepili he nui (ʻoi loa inā aia lākou ma nā ʻāpana ʻāina like ʻole). He paʻakikī loa ka loaʻa ʻana o kahi pae kiʻekiʻe o ke kūlike, no ka mea e hōʻemi ana i ka loaʻa a hoʻonui i ka ʻāpana pūnaewele. No ka wehewehe maʻamau o kēia ʻano, ʻōlelo wau iā ʻoe e nānā CAP theorem. He mea kūpono hoʻi e hoʻomaopopo i ka hiki i nā noi ke mālama i nā mea liʻiliʻi o ka like ʻole, a hiki i nā mea polokalamu ke hoʻomaopopo pono i nā nuances o ka pilikia e hoʻokō pono ai i ka loiloi hou i loko o ka noi e hoʻoponopono i ka like ʻole me ka hilinaʻi nui ʻole i ka waihona e mālama ai.

Hāʻawi pinepine nā DBMS i nā pae like ʻole o ka kaʻawale. Hiki i nā mea hoʻomohala noi ke koho i ka mea kūpono loa ma muli o kā lākou makemake. ʻO ka hoʻokaʻawale haʻahaʻa e hiki ai ke hoʻonui i ka wikiwiki, akā hoʻonui i ka pilikia o kahi heihei data. ʻO ka insulation kiʻekiʻe e hōʻemi i kēia hiki, akā e hoʻolōʻihi i ka hana a hiki ke alakaʻi i ka hoʻokūkū, e alakaʻi ai i nā kaʻa i ke kumu e hoʻomaka ai nā hemahema.

Pono nā mea hoʻomohala hou aku e ʻike i kēia e pili ana i nā waihona
Nānā i nā hiʻohiʻona concurrency a me nā pilina ma waena o lākou

Hōʻike ka maʻamau SQL i ʻehā mau pae kaʻawale, ʻoiai ma ke kumumanaʻo a me ka hoʻomaʻamaʻa he nui aku. Jepson.io hāʻawi i kahi hiʻohiʻona maikaʻi o nā hiʻohiʻona concurrency i loaʻa. No ka laʻana, hōʻoiaʻiʻo ʻo Google Spanner i ka serializability o waho me ka hoʻonohonoho ʻana i ka uaki, a ʻoiai he papa kaʻawale ʻoi aku kēia, ʻaʻole ia i wehewehe ʻia i nā papa kaʻawale maʻamau.

Hōʻike ka maʻamau SQL i nā pae kaʻawale:

  • Serializable (ʻoi loa ke koʻikoʻi a me ke kumukūʻai): ʻO ka hoʻokō Serializable ka hopena like me kekahi hana hoʻokō sequential. ʻO ka hoʻokō sequential ʻo ia ka hoʻomaka ʻana o kēlā me kēia hana ma hope wale nō ma hope o ka pau ʻana o ka mea mua. Pono e hoʻomaopopo i ka pae Serializable Hoʻohana pinepine ʻia e like me ka mea i kapa ʻia ʻo snapshot isolation (no ka laʻana, ma Oracle) ma muli o nā ʻokoʻa o ka wehewehe ʻana, ʻoiai ʻaʻole i hōʻike ʻia ke kaʻawale snapshot ponoʻī i ka maʻamau SQL.
  • Heluhelu hou: Loaʻa nā moʻolelo i hoʻopaʻa ʻole ʻia i ka hana o kēia manawa i ka hana o kēia manawa, akā hoʻololi ʻia e nā hana ʻē aʻe (e like me nā lālani hou) ʻike ʻole ʻia.
  • Heluhelu kūpaʻa: ʻAʻole i loaʻa ka ʻikepili i hoʻopaʻa ʻole ʻia no nā kālepa. I kēia hihia, hiki i nā kālepa ke ʻike i ka ʻikepili i hoʻopaʻa ʻia, a hiki ke loaʻa ka heluhelu phantom. Inā hoʻokomo ke kālepa a hana i nā lālani hou, hiki ke ʻike i ke kālepa o kēia manawa ke nīnau ʻia.
  • Heluhelu ʻole ʻia (Limit strict and pipiʻi kiʻekiʻe): Ua ʻae ʻia nā heluhelu haumia, hiki i nā hana ke ʻike i nā loli paʻa ʻole i hana ʻia e nā hana ʻē aʻe. Ma ka hoʻomaʻamaʻa, pono paha kēia pae no nā kuhi koʻikoʻi, e like me nā nīnau COUNT(*) ma ka papaaina.

ilikai Serializable hōʻemi i ka pilikia o nā lāhui ʻikepili, ʻoiai ʻo ia ke kumu kūʻai nui loa e hoʻokō a hopena i ka ukana hoʻokūkū kiʻekiʻe loa ma ka ʻōnaehana. ʻOi aku ka maʻalahi o ka hoʻokō ʻana i nā pae kaʻawale ʻē aʻe, akā e hoʻonui i ka likelihood o nā lāhui data. ʻAe kekahi mau DBMS iā ʻoe e hoʻonohonoho i kahi pae kaʻawale maʻamau, ʻo nā mea ʻē aʻe he mau makemake ikaika a ʻaʻole kākoʻo ʻia nā pae āpau.

Hoʻolaha pinepine ʻia ke kākoʻo no nā pae kaʻawale i loko o kahi DBMS i hāʻawi ʻia, akā ʻo ka noʻonoʻo pono ʻana i kāna ʻano e hiki ke hōʻike i ka mea e hana maoli nei.

Pono nā mea hoʻomohala hou aku e ʻike i kēia e pili ana i nā waihona
Nānā i nā anomali concurrency ma nā pae kaʻawale like ʻole no nā DBMS like ʻole

ʻO Martin Kleppmann i kāna papahana hemo Hoʻohālikelike i nā pae kaʻawale like ʻole, kamaʻilio e pili ana i nā anomalies concurrency, a inā hiki i ka waihona ke hoʻopili i kahi pae kaʻawale. Hōʻike ka noiʻi a Kleppmann i ka ʻokoʻa o ka manaʻo o nā mea hoʻomohala waihona e pili ana i nā pae kaʻawale.

Hiki mai ka pale ʻana i ka maikaʻi i ka wā paʻakikī ke mālama i ka mea maʻamau.

Hiki ke uku nui ka pale ʻana, ʻaʻole wale no ka mea e hoʻonui ai i ka hoʻokūkū ma ka waihona, akā no ka mea pono i nā kikowaena noi e hoʻopili mau i ka waihona. Hiki i ka ʻāpana pūnaewele ke hoʻonui i nā kūlana laka kūʻokoʻa a alakaʻi i nā deadlocks paʻakikī ke ʻike a hoʻoholo. Inā kūpono ʻole ka laka kūʻokoʻa, kōkua ka laka maikaʻi.

Laka maikaʻi He ala ia i ka heluhelu ʻana i kahi kaula, e noʻonoʻo i kona mana, checksum, a i ʻole ka manawa o ka hoʻololi hope. ʻAe kēia iā ʻoe e hōʻoia ʻaʻohe hoʻololi o ka mana atomic ma mua o ka hoʻololi ʻana i kahi komo:

UPDATE products
SET name = 'Telegraph receiver', version = 2
WHERE id = 1 AND version = 1

I kēia hihia, hoʻonui i ka papaʻaina products ʻaʻole e hoʻokō ʻia inā hoʻololi ʻia kahi hana ʻē aʻe i kēia lālani. Inā ʻaʻohe hana ʻē aʻe i hana ʻia ma kēia lālani, e hoʻololi ʻia ka hoʻololi no ka lālani hoʻokahi a hiki iā mākou ke ʻōlelo ua kūleʻa ka mea hou.

Aia kekahi anomalies ma waho o ka heluhelu lepo a me ka nalowale ʻikepili

I ka wā e pili ana i ka paʻa ʻana o ka ʻikepili, ʻo ka manaʻo e pili ana i nā kūlana lāhui e hiki ke alakaʻi i ka heluhelu lepo a me ka nalowale o ka ʻikepili. Akā naʻe, ʻaʻole pau nā anomalies ʻikepili ma laila.

ʻO kekahi laʻana o ia anomali ka hoʻopaʻa ʻana i ka distortion (kākau skews). He paʻakikī ka ʻike ʻana i nā distortion no ka mea ʻaʻole i ʻimi pinepine ʻia. ʻAʻole lākou ma muli o ka heluhelu lepo a i ʻole ka nalowale ʻana o ka ʻikepili, akā no ka uhaki ʻana i nā koina kūpono i kau ʻia ma ka ʻikepili.

No ka laʻana, e noʻonoʻo kākou i kahi noi nānā e koi ana i kahi mea hoʻohana e kelepona i nā manawa āpau:

BEGIN tx1;                      BEGIN tx2;
SELECT COUNT(*)
FROM operators
WHERE oncall = true;
0                               SELECT COUNT(*)
                                FROM operators
                                WHERE oncall = TRUE;
                                0
UPDATE operators                UPDATE operators
SET oncall = TRUE               SET oncall = TRUE
WHERE userId = 4;               WHERE userId = 2;
COMMIT tx1;                     COMMIT tx2;

Ma kēia kūlana i luna, e hana ʻia kahi palaho moʻolelo inā hoʻokō pono nā hana ʻelua. ʻOiai ʻaʻohe palapala heluhelu a i ʻole ka nalowale ʻana o ka ʻikepili, ua hoʻohālikelike ʻia ka pono o ka ʻikepili: i kēia manawa ua manaʻo ʻia ʻelua mau kānaka ma ke kelepona i ka manawa like.

Hiki ke hoʻokaʻawale i ka Serializable, ka hoʻolālā hoʻolālā, a i ʻole nā ​​palena ʻikepili hiki ke kōkua i ka hoʻopau ʻana i ka palaho kākau. Pono nā mea hoʻomohala e ʻike i nā anomalies i ka wā o ka hoʻomohala ʻana e pale aku iā lākou i ka hana ʻana. I ka manawa like, paʻakikī loa ka nānā ʻana i nā distortions i ka waihona code. ʻOi loa i nā ʻōnaehana nui, ke kuleana nā hui hoʻomohala like ʻole no ka hoʻokō ʻana i nā hana e pili ana i nā papa like ʻole a ʻae ʻole i nā kikoʻī o ka loaʻa ʻana o ka ʻikepili.

ʻAʻole ʻae mau ka waihona a me ka mea hoʻohana i ka mea e hana ai

ʻO kekahi o nā hiʻohiʻona koʻikoʻi o ka ʻikepili ʻo ia ka hōʻoia o ke kauoha hoʻokō, akā ʻaʻole maopopo kēia kauoha ponoʻī i ka mea hoʻomohala polokalamu. Hoʻokō nā ʻikepili i nā hana ma ke kauoha i loaʻa iā lākou, ʻaʻole ma ke kauoha a nā mea papahana. He paʻakikī ke ʻano o ka hoʻonohonoho ʻana i nā hana, ʻoi aku ka nui o nā ʻōnaehana like ʻole.

I ka wā o ka hoʻomohala ʻana, ʻoi aku ka nui o ka hana ʻana me nā hale waihona puke ʻaʻole hoʻopaʻa ʻia, hiki i ke ʻano maikaʻi ʻole a me ka haʻahaʻa haʻahaʻa ke kumu e manaʻoʻiʻo ai nā mea hoʻohana e hoʻokō ʻia nā hana ma ke ʻano maʻamau, ʻoiai hiki iā lākou ke hōʻea i ka waihona ma kekahi kauoha.

I ka nānā mua ʻana, ma ka papahana ma lalo nei, ua kapa ʻia ʻo T1 a me T2 i ka sequentially, akā inā ʻaʻole pale ʻia kēia mau hana a hoʻihoʻi koke i ka hopena ma ke ʻano. 'ōlelo, a laila e hoʻoholo ʻia ke ʻano o nā kelepona e nā manawa i komo ai lākou i ka waihona:

result1 = T1() // he mau olelo hoopomaikai ka hopena maoli
hopena2 = T2()

Inā koi ʻia ka atomicity (ʻo ia hoʻi, pono e hoʻopau a hoʻopau ʻia paha nā hana a pau) a me nā mea e pili ana i ke kaʻina, a laila pono e hana ʻia nā hana T1 a me T2 i loko o kahi hana hoʻokahi.

Hiki ke hoʻoneʻe ʻia ka sharding pae noi ma waho o ka noi

ʻO Sharding kahi ʻano o ka hoʻokaʻawale ʻana i kahi waihona. Hiki i kekahi mau waihona ʻikepili ke hoʻokaʻawale i ka ʻikepili ma ke ākea, ʻaʻole hiki i nā mea ʻē aʻe, a ʻaʻole maikaʻi loa. Ke hiki i nā mea kākau ʻikepili/mea hoʻomohala ke wānana pololei i ke ʻano o ka loaʻa ʻana o ka ʻikepili, hiki iā lākou ke hana i nā ʻāpana ākea ma kahi o ka mea hoʻohana ma mua o ka hāʻawi ʻana i kēia hana i ka waihona. Kapa ʻia kēia kaʻina hana "appplication-level sharding" (ka hoʻopili ʻana i ka pae noiʻi).

ʻO ka mea pōʻino, hana pinepine kēia inoa i ka manaʻo kuhihewa e ola ana ka sharding i nā lawelawe noi. ʻO kaʻoiaʻiʻo, hiki ke hoʻokōʻia ma keʻano he papa kaʻawale i mua o ka waihona. Ma muli o ka ulu ʻana o ka ʻikepili a me ka hoʻololi ʻana o ka schema, hiki ke paʻakikī nā koi sharding. Hiki i kekahi mau hoʻolālā ke pōmaikaʻi mai ka hiki ke hoʻololi me ka ʻole e hoʻihoʻi hou i nā kikowaena noi.

Pono nā mea hoʻomohala hou aku e ʻike i kēia e pili ana i nā waihona
He laʻana o kahi hoʻolālā i hoʻokaʻawale ʻia nā kikowaena noi mai ka lawelawe sharding

ʻO ka neʻe ʻana i ka sharding i kahi lawelawe ʻokoʻa e hoʻonui i ka hiki ke hoʻohana i nā hoʻolālā sharding ʻokoʻa me ka ʻole o ka pono e hoʻihoʻi hou i nā noi. Vitess he laʻana o ia ʻōnaehana sharding ma ka pae noi. Hāʻawi ʻo Vitess i ka sharding ākea no MySQL a hiki i nā mea kūʻai aku ke hoʻopili iā ia ma o ka protocol MySQL. Hoʻokaʻawale ka ʻōnaehana i ka ʻikepili i nā node MySQL ʻē aʻe i ʻike ʻole kekahi i kekahi.

Hiki ke pilikia ka hoʻonui ʻana

ʻO AUTOINCREMENT kahi ala maʻamau e hana ai i nā kī mua. Nui nā hihia ke hoʻohana ʻia nā ʻikepili e like me nā mea hana ID, a aia ka waihona i nā papa i hoʻolālā ʻia e hana i nā mea hōʻike. Nui nā kumu no ka hana ʻana i nā kī nui me ka hoʻohana ʻana i ka hoʻonui ʻokoʻa ʻaʻole i kūpono:

  • I loko o kahi waihona i puʻunaue ʻia, he pilikia koʻikoʻi ka hoʻonui ʻana. No ka hana ʻana i ka ID, pono ka laka honua. Akā, hiki iā ʻoe ke hana i kahi UUID: ʻaʻole pono kēia i ka launa pū ʻana ma waena o nā nodes waihona. Hiki i ka hoʻonui ʻana me nā laka ke alakaʻi i ka paio a hōʻemi nui i ka hana ma nā mea hoʻokomo i nā kūlana i puʻunaue ʻia. Pono paha kekahi mau DBMS (no ka laʻana, MySQL) i ka hoʻonohonoho kūikawā a me ka nānā pono ʻana i ka hoʻonohonoho pono ʻana i ka haku-master replication. A he mea maʻalahi ke hana hewa i ka hoʻonohonoho ʻana, e alakaʻi i ka hoʻopaʻa ʻana i nā hemahema.
  • Aia kekahi mau waihona i nā algorithms e hoʻokaʻawale ana ma muli o nā kī nui. Hiki i nā ID like ʻole ke alakaʻi i nā wahi wela ʻike ʻole a me ka hoʻonui ʻana i ka ukana ma kekahi mau ʻāpana aʻo nā mea ʻē aʻe e noho ʻole.
  • ʻO ke kī mua ke ala wikiwiki loa e komo i kahi lālani ma kahi waihona. Me nā ala ʻoi aku ka maikaʻi e ʻike ai i nā moʻolelo, hiki i nā ID sequential ke hoʻohuli i ke kolamu koʻikoʻi ma nā papa i kahi kolamu pono ʻole i hoʻopiha ʻia me nā kumu waiwai ʻole. No laila, i nā manawa a pau e hiki ai, e ʻoluʻolu e koho i kahi kī kumu kūʻokoʻa a kūlohelohe (e laʻa i ka inoa inoa).

Ma mua o ka hoʻoholo ʻana i kahi ala, e noʻonoʻo i ka hopena o ka hoʻonui ʻana i nā ID a me nā UUID i ka kuhikuhi ʻana, ka ʻāpana, a me ka sharding.

Hiki ke hoʻohana ʻia ka ʻikepili stale a ʻaʻole pono e laka

Hoʻokō ka Multiversion Concurrency Control (MVCC) i nā koi kūlike i kūkākūkā pōkole ʻia ma luna. Hoʻohana kekahi mau waihona (e laʻa, Postgres, Spanner) i ka MVCC e "hānai" i nā hana me nā kiʻi paʻi-nā mana kahiko o ka waihona. Hiki ke hoʻopaʻa ʻia nā hana Snapshot e hōʻoia i ka kūlike. I ka heluhelu ʻana mai kahi kiʻi kiʻi kahiko, heluhelu ʻia ka ʻikepili kahiko.

Hiki ke hoʻohana ʻia ka heluhelu ʻana i ka ʻikepili maloʻo, no ka laʻana, i ka wā e hana ana i nā ʻikepili mai ka ʻikepili a i ʻole ke helu ʻana i nā koina aggregate.

ʻO ka pōmaikaʻi mua o ka hana ʻana me ka ʻikepili hoʻoilina, ʻo ka haʻahaʻa haʻahaʻa (ʻoi aku inā e puʻunaue ʻia ka waihona ma nā ʻāina ʻē aʻe). ʻO ka lua, ʻo nā hana heluhelu-wale nō ka laka ʻole. He pōmaikaʻi koʻikoʻi kēia no nā noi heluhelu nui, ʻoiai hiki iā lākou ke mālama i ka ʻikepili stale.

Pono nā mea hoʻomohala hou aku e ʻike i kēia e pili ana i nā waihona
Heluhelu ke kikowaena noi i ka ʻikepili mai ka replica kūloko he 5 kekona i hala, ʻoiai inā loaʻa ka mana hou loa ma kēlā ʻaoʻao o ka Moana Pākīpika.

Hoʻomaʻemaʻe aunoa nā DBMS i nā mana kahiko a, i kekahi mau hihia, ʻae iā ʻoe e hana i kēia ma ke noi. No ka laʻana, ʻae ʻo Postgres i nā mea hoʻohana e hana VACUUM ma ke noi, a hana 'akomi no hoi i kela manawa keia manawa. Holo ʻo Spanner i kahi ʻohi ʻōpala e hoʻopau i nā kiʻi paʻi ma mua o hoʻokahi hola.

Hiki ke hoʻololi ʻia nā kumu manawa a pau

ʻO ka mea huna maikaʻi loa i ka ʻepekema kamepiula ʻo ia ka wahaheʻe o nā API manawa āpau. ʻOiaʻiʻo, ʻaʻole ʻike kā mākou mīkini i ka manawa kūpono. Loaʻa i nā kamepiula nā kristal quartz e hoʻopuka i nā haʻalulu i hoʻohana ʻia e mālama i ka manawa. Akā naʻe, ʻaʻole i lawa ka pololei a aia paha ma mua / lag ma hope o ka manawa pololei. Hiki ke hoʻololi i ka 20 kekona i ka lā. No laila, pono e hoʻonohonoho ʻia ka manawa ma kā mākou kamepiula me ka pūnaewele hoʻokahi.

Hoʻohana ʻia nā kikowaena NTP no ka hoʻonohonoho ʻana, akā ʻo ke kaʻina hana hoʻonohonoho ponoʻī e pili ana i ka lohi o ka pūnaewele. ʻO ka hoʻonohonoho pū ʻana me kahi kikowaena NTP ma ka kikowaena data like e lawe i kekahi manawa. ʻIke ʻia ʻo ka hana ʻana me kahi kikowaena NTP lehulehu hiki ke alakaʻi i ka distortion ʻoi aku ka nui.

ʻOi aku ka maikaʻi o nā uaki Atomic a me kā lākou mau GPS no ka hoʻoholo ʻana i ka manawa o kēia manawa, akā he pipiʻi lākou a koi i ka hoʻonohonoho paʻakikī, no laila ʻaʻole hiki ke hoʻokomo ʻia ma kēlā me kēia kaʻa. Ma muli o kēia, hoʻohana nā kikowaena data i kahi ala tiered. Hōʻike nā uaki Atomic a/a i ʻole GPS i ka manawa pololei, a laila hoʻolaha ʻia i nā mīkini ʻē aʻe ma o nā kikowaena lua. ʻO ia ke ʻano o kēlā me kēia mīkini e ʻike i kahi offset mai ka manawa pololei.

Hoʻonui ʻia ke kūlana ma muli o ka loaʻa pinepine ʻana o nā noi a me nā ʻikepili ma nā mīkini like ʻole (inā ʻaʻole ma nā kikowaena data like ʻole). No laila, ʻokoʻa ka manawa ʻaʻole wale ma nā nodes DB i puʻunaue ʻia ma nā mīkini like ʻole. E ʻokoʻa nō hoʻi ma ka kikowaena noi.

Lawe ʻo Google TrueTime i kahi ala ʻokoʻa loa. Manaʻo ka hapa nui o ka holomua o Google ma kēia ʻaoʻao e ka hoʻololi banal i nā uaki atomic a me GPS, akā he ʻāpana wale nō kēia o ke kiʻi nui. Penei ka hana ana o TrueTime:

  • Hoʻohana ʻo TrueTime i ʻelua mau kumu like ʻole: GPS a me nā uaki atomika. Loaʻa i kēia mau wati i nā ʻano hana hāʻule ʻole. [e nānā i ka ʻaoʻao 5 no nā kikoʻī maanei - kokoke. unuhi.), no laila e hoʻonui ai kā lākou hoʻohana hui ʻana i ka hilinaʻi.
  • Loaʻa iā TrueTime kahi API maʻamau. Hoʻihoʻi ia i ka manawa ma ke ʻano he wā me ke ana hewa a me ka maopopo ʻole i kūkulu ʻia i loko. Aia ka manawa maoli ma waena o nā palena o luna a me lalo o ka wā. ʻO Spanner, ka waihona i hoʻolaha ʻia e Google, e kali wale a hiki i ka palekana ke ʻōlelo ʻia ʻaʻole i waho ka manawa o kēia manawa. Hoʻokomo kēia ʻano hana i kekahi latency i loko o ka ʻōnaehana, ʻoi aku ka nui inā kiʻekiʻe ka maopopo ʻole o nā haku, akā e hōʻoia i ka pololei ʻoiai ma kahi kūlana i hoʻolaha ʻia ma ka honua.

Pono nā mea hoʻomohala hou aku e ʻike i kēia e pili ana i nā waihona
Hoʻohana nā ʻāpana Spanner i ka TrueTime, kahi e hoʻihoʻi ai ʻo TT.now() i kahi wā, no laila e hiamoe wale ka Spanner a hiki i kahi e hiki ai iā ia ke hilinaʻi ua hala ka manawa i kēia manawa.

ʻO ka hōʻemi ʻana i ka pololei i ka hoʻoholo ʻana i ka manawa o kēia manawa ʻo ia ka piʻi ʻana o ka lōʻihi o nā hana Spanner a me ka emi ʻana o ka hana. ʻO kēia ke kumu he mea nui e mālama i ka pololei kiʻekiʻe loa ʻoiai ʻaʻole hiki ke loaʻa i kahi wati pololei loa.

Nui nā manaʻo o ka lohi

Inā nīnau ʻoe i ʻumi kaukani loea e pili ana i ke ʻano o ka lohi, e loaʻa paha iā ʻoe nā pane ʻokoʻa. I ka DBMS latency ua kapa pinepine ʻia ʻo "database latency" a he ʻokoʻa ia mai ka mea i ʻike ʻia e ka mea kūʻai aku. ʻO ka mea ʻoiaʻiʻo ke nānā nei ka mea kūʻai aku i ka huina o ka lohi o ka pūnaewele a me ka lohi o ka waihona. He mea koʻikoʻi ka hiki ke hoʻokaʻawale i ke ʻano o ka latency i ka wā e hoʻopau ai i nā pilikia ulu. Ke hōʻiliʻili a hōʻike i nā metric, e hoʻāʻo mau e makaʻala i nā ʻano ʻelua.

Pono e loiloi ʻia nā pono hana no kahi kālepa kikoʻī

I kekahi manawa ua kuhikuhi ʻia nā hiʻohiʻona hana o kahi DBMS a me kona mau palena ma ke ʻano o ka kākau/heluhelu throughput a me ka latency. Hāʻawi kēia i kahi hiʻohiʻona nui o nā ʻōnaehana ʻōnaehana koʻikoʻi, akā i ka loiloi ʻana i ka hana ʻana o kahi DBMS hou, ʻoi aku ka ʻoi aku ka piha o ka loiloi ʻana i nā hana koʻikoʻi (no kēlā me kēia nīnau a/a i ʻole kālepa). Nā laʻana:

  • Kākau i ka puka a me ka latency i ka wā e hoʻokomo ai i kahi lālani hou i ka papa X (me 50 miliona mau lālani) me nā kaohi i ʻōlelo ʻia a me ka pale lālani i nā papa pili.
  • Hoʻopaneʻe i ka hōʻike ʻana i nā hoaaloha o nā hoaaloha o kekahi mea hoʻohana inā he 500 ka nui o nā hoaaloha.
  • Hoʻopaneʻe i ka hoʻihoʻi ʻana i nā helu 100 kiʻekiʻe mai ka mōʻaukala o ka mea hoʻohana ke hahai ka mea hoʻohana i 500 mau mea hoʻohana ʻē aʻe me nā helu X i kēlā me kēia hola.

Hiki i ka loiloi a me ka hoʻokolohua ke komo i nā hihia koʻikoʻi a hiki i kou hilinaʻi ʻana e hoʻokō ka waihona i nā koi hana. Hoʻomaopopo pū kekahi lula o ka manamana lima i kēia haʻihaʻi i ka wā e ʻohi ai i nā metric latency a me ka hoʻoholo ʻana i nā SLO.

E makaʻala i ka cardinality kiʻekiʻe i ka wā e ʻohi ai i nā metric no kēlā me kēia hana. E hoʻohana i nā moʻolelo, ka hōʻiliʻili hanana, a i ʻole ka hoʻohele ʻia ʻana no ka loaʻa ʻana o ka ʻikepili debugging mana kiʻekiʻe. Ma ka ʻatikala "Makemake ʻoe e Debug Latency?» hiki iā ʻoe ke hoʻomaʻamaʻa iā ʻoe iho me nā ʻano hana hoʻopaneʻe hoʻopaneʻe.

Hiki ke pilikia nā hana i hoʻopaʻa ʻia

ʻAʻole kākoʻo kēlā me kēia DBMS i nā kālepa pūnana, akā inā hana lākou, hiki i ia mau hana ke hopena i nā hewa i manaʻo ʻole ʻia ʻaʻole maʻalahi ke ʻike (ʻo ia hoʻi, pono e ʻike ʻia aia kekahi ʻano anomaly).

Hiki iā ʻoe ke hōʻalo i ka hoʻohana ʻana i nā kālepa nested me ka hoʻohana ʻana i nā hale waihona puke mea kūʻai aku hiki ke ʻike a kāpae iā lākou. Inā ʻaʻole hiki ke haʻalele ʻia nā hana pūnana, e mālama pono i kā lākou hoʻokō ʻana e pale i nā kūlana i manaʻo ʻole ʻia kahi i hoʻopau ʻia ai nā hana i hoʻopau ʻia ma muli o nā pūnana.

Hiki i ka hoʻopili ʻana i nā hana i loko o nā papa like ʻole ke alakaʻi i nā hana pūnana i manaʻo ʻole ʻia, a mai kahi ʻike heluhelu code, hiki iā ia ke paʻakikī ke hoʻomaopopo i ka manaʻo o ka mea kākau. E nānā i kēia polokalamu:

with newTransaction():
   Accounts.create("609-543-222")
   with newTransaction():
       Accounts.create("775-988-322")
       throw Rollback();

He aha ka hopena o ke code ma luna? E hoʻihoʻi i nā hana ʻelua, a i ʻole ka mea i loko? He aha ka hopena inā hilinaʻi mākou i nā papa he nui o nā hale waihona puke e hoʻopili ai i ka hana ʻana o nā kālepa no mākou? Hiki iā mākou ke ʻike a hoʻomaikaʻi i kēlā mau hihia?

E noʻonoʻo i kahi papa ʻikepili me nā hana he nui (e.g. newAccount) ua hoʻokō ʻia i kāna mau hana ponoʻī. He aha ka hopena inā e holo ʻoe iā lākou ma ke ʻano he ʻāpana o ka loiloi ʻoihana kiʻekiʻe e holo ana i loko o kāna kālepa ponoʻī? He aha ke kaʻawale a me ke kūpaʻa i kēia hihia?

function newAccount(id string) {
  with newTransaction():
      Accounts.create(id)
}

Ma mua o ka ʻimi ʻana i nā pane i kēlā mau nīnau pau ʻole, ʻoi aku ka maikaʻi o ka pale ʻana i nā kālepa nested. Ma hope o nā mea a pau, hiki i kāu papa ʻikepili ke hana maʻalahi i nā hana kiʻekiʻe me ka ʻole o ka hana ʻana i kāna mau kālepa ponoʻī. Eia kekahi, hiki i ka loiloi ʻoihana ke hoʻomaka i kahi kālepa, hana i nā hana ma luna o ia mea, hana a hoʻopau paha i kahi kālepa.

function newAccount(id string) {
   Accounts.create(id)
}
// In main application:
with newTransaction():
   // Read some data from database for configuration.
   // Generate an ID from the ID service.
   Accounts.create(id)
   Uploads.create(id) // create upload queue for the user.

ʻAʻole pono e hoʻopaʻa ʻia nā hana i ke kūlana noi

I kekahi manawa he mea hoʻowalewale ia e hoʻohana i ka mokuʻāina noi i nā kālepa e hoʻololi i kekahi mau waiwai a i ʻole nā ​​​​pilikia nīnau tweak. ʻO ka nuance koʻikoʻi e noʻonoʻo ai ʻo ia ka laulā kūpono o ka noi. Hoʻomaka hou nā mea kūʻai aku i nā kālepa inā loaʻa nā pilikia pūnaewele. Inā pili ka hana i kahi moku'āina i hoʻololi ʻia e kekahi kaʻina hana ʻē aʻe, hiki iā ia ke koho i ka waiwai hewa ma muli o ka hiki o ka lāhui data. Pono e noʻonoʻo nā hana i ka pilikia o nā kūlana heihei data ma ka noi.

var seq int64
with newTransaction():
    newSeq := atomic.Increment(&seq)
    Entries.query(newSeq)
    // Other operations...

E hoʻonui ka hana i luna i ka helu kaʻina i kēlā me kēia manawa e hoʻokō ʻia, me ka nānā ʻole i ka hopena hope. Inā hāʻule ka hana ma muli o nā pilikia pūnaewele, e hoʻokō ʻia ke noi me kahi helu kaʻina ʻē aʻe ke hoʻāʻo hou ʻoe.

Hiki i nā mea hoʻolālā nīnau ke haʻi nui iā ʻoe e pili ana i kahi waihona

Hoʻoholo nā mea hoʻolālā nīnau pehea e hoʻokō ʻia ai kahi nīnau ma kahi waihona. Hoʻopili pū lākou i nā noi a hoʻonui iā lākou ma mua o ka hoʻouna ʻana iā lākou. Hiki i nā mea hoʻolālā ke hāʻawi wale i kekahi mau manaʻo hoʻohālikelike e pili ana i nā hōʻailona i kā lākou makemake. No ka laʻana, he aha ke ʻano hulina maikaʻi loa no ka nīnau ma hope?

SELECT * FROM articles where author = "rakyll" order by title;

Hiki ke kiʻi ʻia nā hopena ma nā ala ʻelua:

  • Kiʻi papaʻaina piha: Hiki iā ʻoe ke nānā i kēlā me kēia hoʻokomo i ka papaʻaina a hoʻihoʻi i nā ʻatikala me kahi inoa mea kākau like, a laila kauoha iā lākou.
  • ʻImi kuhikuhi: Hiki iā ʻoe ke hoʻohana i kahi papa kuhikuhi no ka ʻimi ʻana i nā ID pili, e kiʻi i kēlā mau lālani, a laila kauoha iā lākou.

ʻO ka hana a ka mea hoʻolālā nīnau e hoʻoholo i ka hoʻolālā ʻoi aku ka maikaʻi. Pono e noʻonoʻo i nā mea hoʻolālā nīnau he palena wale nō ka hiki ke wānana. Hiki i kēia ke alakaʻi i nā hoʻoholo maikaʻi ʻole. Hiki i nā DBA a i ʻole nā ​​mea hoʻomohala ke hoʻohana iā lākou e ʻike a hoʻoponopono maikaʻi i nā nīnau haʻahaʻa. Hiki i nā mana hou o ka DBMS ke hoʻonohonoho i nā mea hoʻolālā nīnau, a hiki ke kōkua ka ʻike pilikino i ka wā e hoʻonui ai i ka waihona inā alakaʻi ka mana hou i nā pilikia hana. Hiki i nā moʻolelo hulina lohi, nā hōʻike hoʻopuka latency, a i ʻole nā ​​helu manawa hoʻokō ke kōkua i ka ʻike ʻana i nā nīnau e pono ai ka loiloi.

ʻO kekahi mau metric i hōʻike ʻia e ka mea hoʻolālā nīnau e pili ana paha i ka walaʻau (ʻoi loa ke koho ʻana i ka latency a i ʻole ka manawa CPU). ʻO kahi hoʻohui maikaʻi i nā mea hoʻonohonoho he mau mea hana no ka huli ʻana a me ka nānā ʻana i ke ala hoʻokō. Hāʻawi lākou iā ʻoe e ʻike i kēlā mau pilikia (auwe, ʻaʻole nā ​​DBMS āpau e hāʻawi i ia mau mea hana).

Paʻakikī ka neʻe ʻana ma ka pūnaewele akā hiki

ʻO ka neʻe ʻana ma ka pūnaewele, ka neʻe ola, a i ʻole ka neʻe ʻana i ka manawa maoli, ʻo ia ka neʻe ʻana mai kahi waihona a i kekahi me ka ʻole o ka downtime a i ʻole ka palaho ʻikepili. ʻOi aku ka maʻalahi o ka neʻe ʻana inā loaʻa ka hoʻololi i loko o ka DBMS/engine like. ʻOi aku ka paʻakikī o ke kūlana inā pono e neʻe i kahi DBMS hou me nā ʻano hana like ʻole a me nā koi schema.

Loaʻa nā ʻano hoʻohālike hoʻoneʻe pūnaewele. Eia kekahi o lākou:

  • E ho'ā i ke komo pālua ma nā waihona ʻikepili ʻelua. ʻAʻole loaʻa nā ʻikepili a pau i ka waihona hou ma kēia pae, akā e ʻae wale i ka ʻikepili hou loa. Ke maopopo ʻoe i kēia, hiki iā ʻoe ke neʻe i ka pae aʻe.
  • E hoʻā i ka heluhelu ʻana mai nā ʻikepili ʻelua.
  • E hoʻonohonoho i ka ʻōnaehana i hana mua ʻia ka heluhelu a me ke kākau ʻana ma ka ʻikepili hou.
  • E kāpae i ke kākau ʻana i ka waihona kahiko me ka hoʻomau ʻana i ka heluhelu ʻana i ka ʻikepili mai ia mea. I kēia manawa, ʻaʻohe ʻikepili hou ka waihona hou. Pono e kope ia mai ka waihona kahiko.
  • Heluhelu wale ka waihona kahiko. E kope i ka ʻikepili i nalowale mai ka waihona kahiko i ka mea hou. Ma hope o ka pau ʻana o ka neʻe ʻana, e hoʻololi i nā ala i ka ʻikepili hou, a kāpae i ka mea kahiko a holoi iā ia mai ka ʻōnaehana.

No ka ʻike hou aku, paipai wau e hoʻopili 'ōlelo, e wehewehe ana i ka hoʻolālā neʻe ʻana o Stripe ma muli o kēia kükohu.

ʻO ka hoʻonui nui ʻana i ka waihona e komo i ka piʻi ʻana o ka unpredictability

ʻO ka ulu ʻana o ka waihona e alakaʻi i nā pilikia unpredictable e pili ana i kāna pālākiō. ʻOi aku ka nui o kā mākou ʻike e pili ana i ke ʻano o loko o kahi waihona, ʻoi aku ka maikaʻi o ka hiki iā mākou ke wānana pehea e piʻi ai. Eia naʻe, ʻaʻole hiki ke ʻike mua ʻia kekahi mau manawa.
I ka ulu ʻana o ke kumu, lilo nā manaʻo mua a me nā manaʻolana e pili ana i ka nui o ka ʻikepili a me nā koi bandwidth pūnaewele. ʻO kēia ka wā e kū mai ai ka nīnau no ka hoʻoponopono hou ʻana i ka hoʻolālā nui, ka hoʻomaikaʻi ʻana i ka hana nui, ka noʻonoʻo hou ʻana i ka hoʻolālā ʻana, a i ʻole ka neʻe ʻana i nā DBMS ʻē aʻe e pale aku i nā pilikia.

Mai noʻonoʻo ʻoe ʻo ka ʻike maikaʻi loa o ka hoʻolālā kūloko o ka waihona ʻikepili e kū nei ʻo ia wale nō ka mea e pono ai. ʻO nā unahi hou e lawe pū me lākou i nā mea hou i ʻike ʻole ʻia. ʻO nā wahi ʻeha hiki ʻole ke manaʻo ʻia, ka hāʻawi ʻana i ka ʻikepili like ʻole, ka bandwidth i manaʻo ʻole ʻia a me nā pilikia ʻoihana, ka piʻi mau ʻana o nā kaʻa a me nā ʻāpana pūnaewele hou e hoʻoikaika iā ʻoe e noʻonoʻo hou i kāu ʻaoʻao ʻikepili, ka hoʻohālike ʻikepili, ke ʻano hoʻolālā, a me ka nui o ka waihona.

...

I ka manawa aʻu i hoʻomaka ai e noʻonoʻo e pili ana i ka hoʻopuka ʻana i kēia ʻatikala, ua ʻoi aku ʻelima mau mea hou ma kaʻu papa inoa kumu. A laila hiki mai kahi helu nui manaʻo hou e pili ana i nā mea ʻē aʻe e hiki ke uhi ʻia. No laila, pili ka ʻatikala i nā pilikia liʻiliʻi loa e pono ai ka nānā nui. Akā naʻe, ʻaʻole kēia manaʻo ua pau ke kumuhana a ʻaʻole wau e hoʻi hou i ia mea i kaʻu mau mea e hiki mai ana a ʻaʻole wau e hoʻololi i ke kumuhana o kēia manawa.

PS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

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