რა არის ქეში?

ნებისმიერი წყაროდან მონაცემების მოთხოვნისას, ყოველთვის არის გარკვეული შეფერხება. ვებ სერვერებზე პინგი იზომება მილიწამებში, მეხსიერებაზე წვდომის დრო შეიძლება ჰქონდეს შეყოვნება მიკროწამებში, ხოლო RAM-ის შეყოვნება იზომება CPU საათის ციკლებში. რა თქმა უნდა, ასეთი სიჩქარები წარმოუდგენელი იქნებოდა მხოლოდ რამდენიმე ათეული წლის წინ, მაგრამ დღესდღეობით, ისინი არასოდეს არიან საკმარისად სწრაფი. წვდომის სიჩქარე რეგულარულად არის შეფერხების გარკვეული ფორმა შესრულებაში. ამის მოგვარების ერთ-ერთი გზა არის ქეშირება.

ქეშირება არის რესურსის დროებითი ასლის შენახვის პროცესი ისე, რომ მასზე წვდომა უფრო სწრაფად იყოს შესაძლებელი, ვიდრე ჩვეულებრივ. დანერგვის უზარმაზარი ასორტიმენტია როგორც პროგრამულ, ისე აპარატურაში. ქეშებს შეუძლიათ იმოქმედონ როგორც წაკითხული ქეში, ჩაწერის ქეში ან ორივე.

წაიკითხეთ ქეშები

წაკითხულ ქეშში მონაცემები, რომლებიც ადრე იყო მოთხოვნილი, ინახება ქეშში უფრო სწრაფი წვდომისთვის. ზოგიერთ სცენარში, ქეში შეიძლება წინასწარ დატვირთული იყოს მონაცემებით, რაც საშუალებას მისცემს პირველი მოთხოვნის მიღებას ქეშიდან და არა მხოლოდ შემდგომი მოთხოვნებით.

წაკითხული ქეში, რომელსაც ყველაზე მეტად იცნობთ, არის ბრაუზერის ქეში. აქ ბრაუზერი ინახავს მოთხოვნილი რესურსების ლოკალურ ასლს. ეს ნიშნავს, რომ თუ და როდესაც ვებგვერდი ხელახლა იტვირთება ან იტვირთება მსგავსი გვერდი, რომელიც იყენებს იმავე შინაარსის დიდ ნაწილს, ამ კონტენტის სერვისი შეიძლება მოხდეს ქეშიდან და არა ვებ სერვერიდან. ეს არა მხოლოდ იმას ნიშნავს, რომ ვებგვერდი უფრო სწრაფად იტვირთება, არამედ ამცირებს დატვირთვას ვებზე სერვერზე და ამცირებს მომხმარებლის მიერ საჭირო მონაცემების ჩამოტვირთვას, რაც შეიძლება მნიშვნელოვანი იყოს მეტრზე კავშირები.

თავად ოპერატიული მეხსიერება ასევე მოქმედებს როგორც წაკითხული ქეში მყარ დისკზე არსებული მონაცემებისთვის. ამ შემთხვევაში, გაშვებული პროგრამის მონაცემები წინასწარ იტვირთება RAM-ში, რათა პროცესორმა უფრო სწრაფად შეძლოს მასზე წვდომა. ოპერატიული მეხსიერებიდან მონაცემები შემდგომში ინახება CPU-ს ქეშში, თუმცა ამის პროცესი გაცილებით რთულია, რადგან CPU-ის ქეში იზომება მეგაბაიტებში და არა გიგაბაიტებში.

ჩაწერეთ ქეშები

ჩაწერის ქეში არის ქეში, რომელსაც შეუძლია აღიქვას ნელი მოწყობილობაზე ჩაწერილი მონაცემები. ამის საერთო მაგალითი იქნება SLC ქეში თანამედროვე SSD-ებში. ეს ქეში არ იძლევა მონაცემთა უფრო სწრაფად წაკითხვის საშუალებას, თუმცა, ჩაწერა ბევრად უფრო სწრაფია, ვიდრე TLC ან QLC ფლეშში ჩაწერა, რომელიც აყალიბებს დანარჩენ SSD-ს. SLC ქეშს შეუძლია შთანთქას მაღალი სიჩქარით ჩაწერის ოპერაციები და შემდეგ გადატვირთავს ამ მონაცემებს, როგორც კი ეს შესაძლებელია, TLC ფლეშში, რომელიც გვთავაზობს შენახვის ბევრად უკეთეს სიმკვრივეს, მაგრამ ასევე გაცილებით ნელია ჩაწერა. ფლეშ მეხსიერების ამ გზით გამოყენება ოპტიმიზირებს მას როგორც ჩაწერის სწრაფ სიჩქარეზე, ასევე შენახვის მაღალი სიმკვრივისთვის.

ჰიბრიდული ქეშები

ქეშის დამუშავების მრავალი გზა არსებობს, რაც მათ საშუალებას აძლევს იმოქმედონ როგორც წაკითხვის, ასევე ჩაწერის ქეში. თითოეული ეს მეთოდი განსხვავებულად ამუშავებს ჩაწერის ოპერაციებს და აქვს დადებითი და უარყოფითი მხარეები. სამი ვარიანტია ჩაწერა, ჩაწერა და უკან ჩაწერა. ჩაწერის გარშემო ქეში მთლიანად გამოტოვებს ქეშს წერისას, ჩაწერის ქეში წერს ქეშში, მაგრამ ოპერაციას მხოლოდ მაშინ თვლის დასრულებულად, როდესაც ის ჩაწერილია საცავში. ჩაწერის ქეში წერს ქეშს და შემდეგ თვლის ოპერაციას დასრულებულად, ეყრდნობა ქეშს, რომ გადაიტანოს იგი საცავში, თუ ეს საჭიროა.

ირგვლივ ჩაწერა შეიძლება სასარგებლო იყოს, თუ თქვენ ელოდებით ჩაწერების დიდ მოცულობას, რადგან ეს ამცირებს ქეშის შეფერხებას. თუმცა, ეს ნიშნავს, რომ ოპერაცია, რომელიც შემდეგ წაიკითხავს რომელიმე ამ დაწერილ მონაცემს, პირველად გამოტოვებს მინიმუმ ერთი ქეში. ჩაწერის მეშვეობით ქეში დაუყოვნებლივ ჩაწერის ოპერაციების ქეშირება, რაც ნიშნავს, რომ შედეგის მიღება შესაძლებელია ქეშიდან პირველად მოთხოვნისთანავე. დასრულებულად რომ ჩაითვალოს, ჩაწერის ოპერაციას ასევე სჭირდება მონაცემების ჩაწერა დისკზე, რაც ამატებს შეყოვნებას. ჩაწერის ქეშს აქვს იგივე სარგებელი, რაც ჩაწერის მეშვეობით, რაც საშუალებას აძლევს წერილობითი მონაცემების დაუყოვნებლივ მიწოდებას ქეშიდან. ის არ მოითხოვს ჩაწერის ოპერაციებს დისკზე ჩასაწერად, რათა ჩაითვალოს დასრულებულად. ეს ამცირებს ჩაწერის შეყოვნებას, მაგრამ თან ახლავს მონაცემთა დაკარგვის რისკს, თუ ქეში არასტაბილურია და ის არ დაასრულებს მონაცემთა საცავში ჩაწერას, სანამ ენერგია არ დაიკარგება.

როგორ ამოიღოთ მონაცემები ქეშიდან?

ნებისმიერი ქეშის ერთ-ერთი შემზღუდველი ფაქტორი არის ტევადობა. დიდი ქეშის ძიებას დიდი დრო სჭირდება, რაც პირველ რიგში უარყოფს ქეშის გამოყენების უპირატესობის დიდ ნაწილს. მეხსიერების ტექნოლოგიები, რომლებიც გამოიყენება ქეშირებისთვის, ასევე უფრო ძვირია, ვიდრე მეხსიერება, საიდანაც ქეშირდებიან. თუ ეს ასე არ იყო, სავარაუდოა, რომ მეხსიერების ეს დონე შეცვლიდა მეხსიერების ტექნოლოგიებს მუშაობის გასაუმჯობესებლად. ორივე ეს ფაქტორი ნიშნავს, რომ ქეში, როგორც წესი, შედარებით მცირეა, განსაკუთრებით მაშინ, როდესაც შევადარებთ შესანახ საშუალებას, საიდანაც ისინი ქეშირებენ. RAM-ს აქვს ნაკლები ტევადობა, ვიდრე მეხსიერება, ხოლო CPU-ის ქეშს აქვს ნაკლები სიმძლავრე ვიდრე RAM. SLC ქეშს აქვს ნაკლები ტევადობა, ვიდრე TLC მეხსიერება.

ეს ყველაფერი ნიშნავს, რომ ხშირად საჭიროა ქეშიდან მონაცემების ციკლი, რათა განთავისუფლდეს სივრცე ახალი მონაცემებისთვის, რომლებიც უნდა იყოს შესანახი. ამასთან დაკავშირებით არსებობს სხვადასხვა მიდგომის სპექტრი. „ნაკლებად ხშირად გამოყენებული“, ურჩევნია გამოაგდეს ქეში ჩანაწერები, რომლებსაც აქვთ წვდომის ყველაზე დაბალი რაოდენობა. ეს შეიძლება სასარგებლო იყოს იმის პროგნოზირებისთვის, თუ რომელი ჩანაწერები ექნება ყველაზე ნაკლებ გავლენას მომავალ ქეშის გამოტოვებაზე, მაგრამ ასევე ჩაითვლება ძალიან ცოტა ხნის წინ დამატებული ჩანაწერები, როგორც წვდომის დაბალი რაოდენობა, რამაც შეიძლება გამოიწვიოს ქეში ჩაქრობა.

„სულ ცოტა ხნის წინ გამოყენებული“ ამჯობინებს ქეშის ჩანაწერების გამოდევნას, რომლებიც დიდი ხანია არ იყო გამოყენებული. ეს ვარაუდობს, რომ ისინი ამჟამად არ გამოიყენება, მაგრამ არ ითვალისწინებს, იყო თუ არა ისინი დიდი ხნის წინ გამოყენებული. „ყველაზე ცოტა ხნის წინ გამოყენებული“ ურჩევნია ბოლო დროს გამოყენებული ქეში ჩანაწერების გამოდევნა, იმ ვარაუდით, რომ ისინი გამოყენებულია და აღარ იქნება საჭირო მათი გამოყენება. საუკეთესო მიდგომა, ზოგადად, სამივეს კომბინაციაა, რაც ინფორმირებულია გამოყენების სტატისტიკით.

მოძველებული ინფორმაცია და უსაფრთხოების რისკები

ქეშების მთავარი რისკი ის არის, რომ მათში შემავალი ინფორმაცია შეიძლება მოძველდეს. ქეში ჩანაწერი ჩაითვლება მოძველებულად, როდესაც ორიგინალური მონაცემები განახლებულია და ქეშის ჩანაწერი მოძველებულია. მნიშვნელოვანია რეგულარულად დაადასტუროთ, რომ მოწოდებული ცოცხალი ასლი კვლავ ემთხვევა ქეშებულ ასლს.

კონკრეტულად ვებსაიტებზე, ასევე ძალზე მნიშვნელოვანია იმის დადგენა, თუ რა მონაცემების შენახვა შეიძლება და არა. მაგალითად, ძალიან კარგია დიდი უცვლელი JavaScript ფაილის ქეშირება. ეს იხსნის მომხმარებელს მისი ყოველ ჯერზე ჩამოტვირთვისგან და შეუძლია ისარგებლოს სხვა მომხმარებლებისთვის, რომლებსაც ემსახურება იგივე ქეში. თუმცა, თქვენ არ შეგიძლიათ სესიის სპეციფიკური მონაცემების ქეშირება. წარმოიდგინეთ, რა მოხდებოდა, თუ თქვენ დაათვალიერეთ შეტყობინებების აპი, როცა შესული ხართ, როგორც თქვენ, და აღმოაჩენთ, რომ მოგემსახურებათ სხვა მომხმარებლის შეტყობინებების ქეშირებული ვერსია. საბედნიეროდ, ვებ სერვერებს შეუძლიათ განსაზღვრონ, თუ რომელი რესურსების ქეშირებაა შესაძლებელი და არა და ეს საკითხები ზოგადად კარგად არის ცნობილი, ასე რომ, მსგავსი პრობლემები ცოტაა.

დასკვნა

ქეში არის მეხსიერების ნაწილი, რომელსაც შეუძლია შეინახოს ცოტა ხნის წინ გამოყენებული მონაცემები შენახვის მეთოდით, რომლის წვდომა უფრო სწრაფია, ვიდრე ჩვეულებრივი მონაცემთა ხელმისაწვდომობის პროცესის ხელახლა დასრულება. ქეში, როგორც წესი, შეზღუდულია ტევადობით, რაც ნიშნავს, რომ მას სჭირდება ჩანაწერების გამოდევნა, როგორც კი ის სავსეა. ქეშები, როგორც წესი, გამჭვირვალეა მომხმარებლისთვის, რაც იმას ნიშნავს, რომ შეყოვნება არის ერთადერთი მითითება იმისა, რომ შედეგი ქეშის მეშვეობით იქნა მიწოდებული.