Hacker News

Tabaka tatu za Cache kati ya Chagua na Diski

Tabaka tatu za Cache kati ya Chagua na Diski Ugunduzi huu unajikita katika tatu, ukichunguza umuhimu wake na athari zinazowezekana. Dhana za Msingi Zimefunikwa Maudhui haya yanachunguza: Kanuni za msingi na nadharia Mazoezi...

9 min read Via frn.sh

Mewayz Team

Editorial Team

Hacker News

Programu yako inapotuma taarifa ya CHAGUA, swali hilo karibu kamwe haligusi diski inayozunguka au hata hifadhi ghafi ya flash — hupitia safu tatu tofauti za akiba ambazo huamua kimya kama jibu lako litafika kwa sekunde ndogo au milisekunde. Kuelewa tabaka hizi ni tofauti kati ya jukwaa la biashara linalofanya kazi kwa urahisi na lile linalofungamana na mzigo wa ulimwengu halisi.

Ni Nini Kinatokea Punde Swala TEULE Linapoacha Maombi Yako?

Pindi ombi lako linapotuma hoja ya CHAGUA, inaingia kwenye njia faafu ambayo wasanidi wengi huwa hawaichunguzi. Injini ya hifadhidata hukatiza ombi kabla ya I/O yoyote kutokea, ikichanganua SQL katika mpango wa utekelezaji wa ndani na kushauriana mara moja na safu yake ya kwanza ya utetezi: akiba ya matokeo ya hoja. Ikiwa hoja inayofanana yenye vigezo vinavyofanana ilitekelezwa hivi majuzi, injini inaweza kurejesha matokeo yaliyohifadhiwa bila kugusa ukurasa mmoja wa data. Hii wakati mwingine huitwa kache ya hoja au akiba ya matokeo, na kwenye mizigo ya kazi iliyosomwa sana, yenye maandishi madogo - kama vile dashibodi za uchanganuzi na moduli za kuripoti - inaweza kuondoa idadi kubwa ya usomaji wa diski kabisa.

Ufahamu muhimu hapa ni kwamba akiba ya hoja ni nyeti sana kwa mabadiliko ya data. INGIZA, USASISHA, au FUTA dhidi ya jedwali la msingi hubatilisha matokeo muhimu yaliyohifadhiwa. Hii ndiyo sababu mifumo ya uandishi nzito mara nyingi huzima akiba ya hoja kabisa na badala yake hutegemea safu za kina zaidi.

Dimbwi la Buffer Ni Nini na Kwa Nini Ni Muhimu Zaidi Kuliko Unavyofikiri?

Safu ya pili ya akiba — na bila shaka ndiyo muhimu zaidi katika mifumo ya uzalishaji — ni dimbwi la akiba (linaloitwa bafa iliyoshirikiwa katika PostgreSQL, bwawa la bafa la InnoDB katika MySQL). Hili ni eneo la RAM ambalo injini ya hifadhidata hutumia kuweka kurasa za data zilizofikiwa hivi majuzi. Wakati swali haliwezi kutumwa kutoka kwa akiba ya matokeo, injini hukagua ikiwa kurasa za data zinazohitajika tayari ziko kwenye hifadhi kabla ya kutoa diski yoyote iliyosomwa.

Dimbwi la akiba linafanya kazi kwa kanuni ya eneo la muda na anga: data iliyofikiwa hivi majuzi ina uwezekano wa kufikiwa tena, na data iliyohifadhiwa karibu na data iliyofikiwa ina uwezekano wa kufikiwa hivi karibuni. Wasimamizi wa hifadhidata hurekebisha ukubwa wa bwawa la hifadhi kama mojawapo ya maamuzi ya usanidi wa kiwango cha juu zaidi wanachofanya. Dimbwi la akiba ambalo ni dogo sana husababisha uondoaji wa ukurasa mara kwa mara, na hivyo kuzalisha jambo linaloitwa thrashing, ambapo mfumo hutumia muda mwingi kudhibiti makosa ya akiba kuliko kutekeleza hoja.

Maarifa Muhimu: Katika mizigo mingi ya OLTP, hifadhi ya ukubwa mzuri inamaanisha 95–99% ya data yote inayosomwa inatolewa kutoka RAM. Seti inayofanya kazi - sehemu ndogo ya data yako ambayo hoja huguswa mara kwa mara - mara nyingi ni ndogo sana kuliko saizi ya hifadhidata jumla. Kuweka ukubwa wa hifadhi yako ili kutoshea seti yako ya kazi, si mkusanyiko wako wote wa data, ni hatua moja ya juu zaidi ya kurekebisha unayoweza kuchukua.

Je, Akiba ya Mfumo wa Uendeshaji Hujazaje Pengo Kati ya RAM na Diski?

Hata kidimbwi cha akiba cha hifadhidata kinapokosa, swali bado halijalengwa kwa diski ya kweli kusomwa. Mfumo wa uendeshaji hudumisha akiba ya ukurasa (pia huitwa kache ya mfumo wa faili), eneo la RAM inayodhibitiwa na kernel ambayo buffers husoma na kuandika ili kuzuia vifaa. Injini ya hifadhidata inapoomba ukurasa ambao haupo kwenye hifadhi yake, kiini cha OS hukagua akiba ya ukurasa wake kabla ya kutoa amri halisi ya I/O kwa kidhibiti cha hifadhi.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Safu hii ya tatu haionekani kwa wasanidi programu lakini ni muhimu sana kwenye mifumo ambapo hifadhi ya hifadhidata haijatolewa. Akiba ya ukurasa wa Mfumo wa Uendeshaji inashirikiwa katika michakato yote, kwa hivyo inashindana na seva yako ya programu, seva ya wavuti, na programu nyingine yoyote inayoendeshwa kwenye seva pangishi sawa. Kwenye seva za hifadhidata zilizojitolea, ushindani huu ni mdogo, na kache ya OS hutoa bafa ya maana ya nafasi ya pili. Kwenye seva pangishi zinazoshirikiwa au kontena zilizo na vikomo vya kumbukumbu ngumu, akiba ya Mfumo wa Uendeshaji mara nyingi ni ndogo sana kusaidia.

Je, ni Safu Gani ya Akiba Inawajibika kwa Utendaji Bora Inashinda Katika Mazoezi?

Katika mifumo ya uzalishaji ya ulimwengu halisi, hifadhi ya akiba hutawala matokeo ya utendakazi kwa ukingo mpana. Hii ndiyo sababu kila safu huchangia tofauti katika matukio ya utumiaji:

  • Akiba ya matokeo ya swali: Manufaa ya juu zaidi kwenye mkusanyiko wa data uliosomwa sana, haswa tuli — hoja za kuripoti, dashibodi zilizoakibishwa, sehemu za mwisho za maudhui ya umma. Haifai kwenye jedwali zenye maandishi mazito.
  • Dimbwi la hifadhidata: Farasi wa kazi kwa wote. Kila seva ya hifadhidata ya uzalishaji inapaswa kupangwa hapa kwanza. Hushughulikia mifumo ya ufikiaji nasibu na mfuatano kwa ufanisi.
  • Akiba ya ukurasa wa OS: Hutoa wavu usalama wakati bwawa la bafa limepunguzwa ukubwa. Pia husaidia kwa kiasi kikubwa wakati wa uchanganuzi mfuatano wa jedwali kubwa ambazo zingeondoa kurasa moto kutoka kwa bwawa la bafa.
  • Kashe ya kidhibiti cha hifadhi (safu ya maunzi): Safu ya nne, ambayo mara nyingi hupuuzwa — SSD za NVMe na vidhibiti vya RAID hudumisha akiba ya uandishi wa ubaoni kwa kutumia betri au capacitor. Hii hulinda uthabiti bila kuacha maandishi kwa gharama ya kutochelewa kwa fsync.
  • Akiba ya safu ya programu (Redis, Memcached): Hukaa juu ya hifadhidata kabisa, ikihifadhi matokeo ya maswali yaliyosasishwa au vitu vilivyokokotwa ili kuzuia kugonga hifadhidata hata kidogo - bora kwa majukwaa ya SaaS ya wapangaji wengi yanayohudumia maelfu ya watumiaji wanaotumia wakati mmoja.

Je, Mifumo ya Kisasa ya Biashara Inawezaje Kuboresha Usanifu wa Akiba kwa Kuegemea Katika Mizani?

Kwa biashara zinazotumia vipengele vingi vya utendaji - CRM, usimamizi wa mradi, biashara ya mtandaoni, takwimu - usanifu wa akiba huamua moja kwa moja uitikiaji wa jukwaa kadri timu zinavyokua. Mifumo iliyojengwa juu ya mkakati wa akiba iliyopangwa vizuri inaweza kuhudumia makumi ya maelfu ya watumiaji wanaotumia wakati mmoja bila gharama sawia ya miundombinu. Jambo kuu ni kubuni mifumo ya ufikiaji wa data ambayo inaheshimu mipaka ya akiba: kuweka data motomoto ndogo na mifumo ya ufikiaji inayoweza kutabirika, kutumia nakala za kusoma ili kusambaza mzigo wa hifadhi ya akiba, na kuweka akiba ya safu ya programu kama vile Redis mbele ya hifadhidata kwa ncha zinazotoa data sawa kwa watumiaji wengi kwa wakati mmoja.

Mewayz imeundwa kwa kuzingatia falsafa hii haswa. Pamoja na moduli 207 zilizounganishwa za biashara zinazotumia zaidi ya watumiaji 138,000, safu ya data ya jukwaa imeundwa ili idadi kubwa ya usomaji itolewe kutoka kwa akiba - kuweka muda wa majibu haraka na gharama za miundombinu kutabirika iwe unatumia mpango wa kuanzia wa $19/mwezi au kiwango cha kitaaluma cha $49/mwezi.

Maswali Yanayoulizwa Sana

Je, kulemaza akiba ya hoja kunaboresha utendakazi wa hifadhidata kila wakati?

Sio kila mara, lakini kwa kazi nyingi sana hufanya hivyo kwa kawaida. Akiba ya hoja inahitaji bubu ya kimataifa ili kudumisha uthabiti, ambayo inakuwa kizuizi chini ya upatanifu wa juu. MySQL 8.0 iliondoa kashe ya hoja kabisa kwa sababu hii. PostgreSQL haijawahi kutekeleza kashe ya hoja iliyojengewa ndani, ikitegemea hifadhi ya bafa na uwekaji akiba wa safu ya programu. Ikiwa uwiano wako wa kusoma-kuandika ni wa juu na hoja zako zinajirudia rudia, akiba ya hoja inaweza kuleta faida halisi - la sivyo, wekeza juhudi hizo za kurekebisha kwenye bwawa la bafa.

Nitajuaje kama bwawa langu la bafa lina ukubwa ipasavyo?

Fuatilia uwiano wa kugonga kwa bwawa lako la bafa: asilimia ya maombi ya ukurasa yanayotolewa kutoka kwa mkusanyiko dhidi ya yale yanayohitaji diski kusomwa. Uwiano wa hit chini ya 95% kwenye mzigo wa kazi wa OLTP ni ishara ya kuongeza ukubwa wa bwawa. Katika MySQL, uliza ONYESHA HALI YA INNODB YA INNODB na uangalie kiwango cha kugonga kwa bwawa la bafa. Katika PostgreSQL, mwonekano wa pg_statio_user_tables hufichua vizuizi vingi vilivyosomwa kutoka kwa diski dhidi ya zinazotolewa kutoka kwa bwawa la bafa. Lenga kuweka seti yako yote inayofanya kazi - sio mkusanyiko wako kamili wa data - ukikaa katika RAM.

Je, kuna uhusiano gani kati ya tabaka za akiba na uaminifu wa wapangaji wengi wa SaaS?

Katika SaaS ya wapangaji wengi, safu za akiba huzuia matatizo ya "majirani yenye kelele" ambapo mzigo mzito wa mpangaji mmoja hushusha utendakazi kwa wapangaji wengine wote. Uakibishaji wa programu zinazofahamu mpangaji kwa ubatilifu unaotegemea TTL huweka data motomoto kwa kila mpangaji katika Redis, na hivyo kupunguza kwa kiasi kikubwa shinikizo la hifadhi ya akiba kutoka kwa akaunti kubwa. Ukusanyaji wa muunganisho wa kiwango cha hifadhidata pamoja na kidimbwi cha bafa joto huhakikisha kuwa shughuli za kupasuka kutoka kwa akaunti yoyote moja haziondoi kurasa zilizoshirikiwa kutoka kwa akiba na kusababisha kuongezeka kwa muda wa kusubiri kwenye jukwaa.


Safu za akiba si dondoo za hifadhidata - ndizo msingi wa usanifu unaotenganisha majukwaa ambayo hukaa haraka kwa kiwango na yale yanayohitaji uzimaji moto wa kila mara wa miundombinu. Iwapo unaunda au unaendesha biashara ambayo inahitaji mfumo ambao tayari umeboreshwa kwa ajili ya hali hizi halisi, gundua Mewayz katika app.mewayz.com — Moduli 207, jukwaa moja linalounganishwa, lililoundwa ili kufanya kazi kwa njia ya kuaminika kutoka kwa mtumiaji wako wa kwanza hadi mia elfu.