რა არის UUID სინამდვილეში
UUID, შემოკლებით Universally Unique Identifier (უნივერსალურად უნიკალური იდენტიფიკატორი), არის 128-ბიტიანი მნიშვნელობა, რომელიც რაღაცის მარკირებას ახდენს ვინმესთან ნებართვის თხოვნის გარეშე. შესაძლოა ის GUID-ის, ანუ Globally Unique Identifier-ის სახელითაც შეხვდეთ — ეს უბრალოდ სახელია, რომელიც Microsoft-მა იმავე იდეას Windows-სა და .NET-ის სამყაროში მისცა. ეს ორი ტერმინი თითქმის ყველა შემთხვევაში, რომელსაც მნიშვნელობა აქვს, ერთსა და იმავე 128-ბიტიან რიცხვს აღწერს, ასე რომ, როცა კოლეგა GUID-ს ამბობს და თქვენ UUID-ს, თითქმის ყოველთვის ერთსა და იმავე რამეზე საუბრობთ.
ეს 128 ბიტი ჩვეულებრივ იწერება 32 თექვსმეტობითი ციფრით, ხუთ ჯგუფად გაყოფილი დეფისებით, 8-4-4-4-12 ნიმუშით. ტიპური მნიშვნელობა ასე გამოიყურება: 123e4567-e89b-12d3-a456-426614174000. დეფისებს საკუთარი მნიშვნელობა არ გააჩნიათ; ისინი უბრალოდ არსებობს იმისთვის, რომ ადამიანმა მნიშვნელობა წაკითხვისას ადგილი არ დაკარგოს. ყოველი სიმბოლო თექვსმეტობითი ციფრია 0-დან f-მდე, და სწორედ ამიტომ UUID უფრო მკვრივად გამოიყურება, ვიდრე ჩვეულებრივი რიცხვი, თუმცა ზედაპირქვეშ ის უბრალოდ ერთი ძალიან დიდი მთელი რიცხვია.

ვერსიები და რატომ იმარჯვებს v4
სტანდარტი განსაზღვრავს რამდენიმე ვერსიას, და ისინი განსხვავდებიან იმით, თუ როგორ ივსება ბიტები. ვერსია 1 დროზეა დაფუძნებული: ის ერთმანეთში ატარებს მიმდინარე დროის შტამპსა და მანქანის ქსელური MAC მისამართს. ეს v1 მნიშვნელობებს შექმნის დროის მიხედვით დახარისხებადს ხდის, თუმცა ასევე ავლენს ინფორმაციას იმის შესახებ, სად და დაახლოებით როდის შეიქმნა ისინი, რაც ყოველთვის სასურველი არ არის. ვერსიები 3 და 5 სახელზეა დაფუძნებული — ისინი ჰეშავენ სახელთა სივრცესა და სახელს ერთად, ასე რომ ერთი და იგივე შესატანი მონაცემი ყოველთვის ერთსა და იმავე იდენტიფიკატორს იძლევა.
ვერსია 4 სულ სხვა გზას ირჩევს. ის თითქმის სუფთა შემთხვევითობაა. 128 ბიტიდან ექვსი ვერსიისა და ვარიანტის მარკირებისთვისაა დაცული, დარჩენილი 122 ბიტი შემთხვევითი მონაცემით ივსება. არ არსებობს არც დროის შტამპი, არც MAC მისამართი, არც სახელთა სივრცე — მხოლოდ ხმაური. სწორედ ამიტომ, გენერატორების უმეტესობა, მათ შორის ეს ერთიც, ნაგულისხმევად v4-ს გენერირებს. ის არაფერს ავლენს მოწყობილობის ან შექმნის მომენტის შესახებ, და მხარეებს შორის კოორდინაცია არ სჭირდება. ამ გვერდის ხელსაწყო მთლიანად თქვენს ბრაუზერში მუშაობს, ასე რომ შემთხვევითი მნიშვნელობები თქვენს მოწყობილობას არასდროს ტოვებს.
რამდენად ნაკლებადაა ალბათური დამთხვევა
გონივრული შეშფოთება ისაა, რომ ორი შემთხვევითი UUID ერთ დღეს იდენტური შეიძლება იყოს. 122 შემთხვევითი ბიტით, შესაძლო v4 მნიშვნელობების სივრცე არის 2-ის ხარისხი 122, რაც დაახლოებით 5.3-ს მოსდევს 36 ნული. ადამიანურ ენაზე რომ ვთქვათ, საჭირო იქნებოდა მილიარდობით UUID-ის გენერირება ყოველ წამში, ათწლეულების განმავლობაში, სანამ ერთი დამთხვევის შანსი რაიმე გასაზომ დონემდე ავიდოდა. თავად სტანდარტი ამ დამთხვევის შანსს ისე აღწერს, როგორც ნულთან ისეთი ახლოსაა, რომ უმნიშვნელოდ ჩაითვალოს. პრაქტიკაში გუნდები v4-ს უნიკალურად თვლიან და გზას აგრძელებენ, და მართალნიც არიან.

სად მიმართავენ დეველოპერები მათ
რადგან უნიკალურობას ცენტრალური ორგანო არ სჭირდება, UUID-ები ბრწყინდებიან იქ, სადაც კოორდინაცია ძვირი ან შეუძლებელია. ისინი ბუნებრივად ჯდებიან მონაცემთა ბაზის პირველადი გასაღებების როლში, განსაკუთრებით მაშინ, როცა რამდენიმე სერვისი თითოეული სტრიქონს ატანს, და საერთო მთვლელისთვის შემდეგი ნომრის კითხვის დროს პაუზა არ შეიძლება. განაწილებულ სისტემებში, ორ კვანძს პლანეტის საპირისპირო მხარეს ერთდროულად შეუძლიათ იდენტიფიკატორების მოჭრა, ერთმანეთთან დაპირისპირების გარეშე. ისინი ასევე API-ის იდემპოტენტურობის გასაღებებზეც მუშაობენ, სადაც კლიენტი UUID-ს ითხოვისას ითხოვს, რომ სერვერს შეეძლოს დუბლიკატის უსაფრთხოდ იგნორირება, თუ ქსელი მოთხოვნას მეორედ ცდის. სესიის ტოკენები, ფაილების სახელები, მოვლენების ID-ები და შეტყობინებების გასაღებები ყველა იმავე თვისებას ეყრდნობა.
UUID ავტოზრდადი ID-ების წინააღმდეგ
კლასიკური ალტერნატივა ავტოზრდადი მთელი რიცხვია: 1, 2, 3 და ასე შემდეგ. თანმიმდევრული ID-ები კომპაქტურია, ბუნებრივად ლაგდება და ადვილად იკითხება, მაგრამ ნამდვილი ნაკლოვანებებიც აქვთ. ისინი ავლენენ, რამდენი ჩანაწერი არსებობს, და უცხო პირებს საშუალებას აძლევენ, მიახლოებული მნიშვნელობები გამოიცნონ, და ისინი აიძულებენ ყოველ ჩასმას ერთი მთვლელის გავლას, რაც ბოთლის ყელად იქცევა, როცა მონაცემთა ბაზას ანაწილებთ ან მონაცემებს ბევრი წყაროდან აერთიანებთ. UUID-ები ამ პრობლემებს წყვეტს, საშუალებას აძლევს ნებისმიერ მხარეს დამოუკიდებლად შექმნას გასაღები და არაფერს ავლენს მოცულობასა თუ თანმიმდევრობაზე. საფასურია ზომა და ინდექსებში ოდნავ ნაკლები ლოკალურობა. სისტემებისთვის, რომლებიც ჰორიზონტალურად იზრდება, ან რომლებმაც შიდა სტრუქტურა უნდა დამალონ, ეს გაცვლა ჩვეულებრივ ღირს. შეგიძლიათ გამოიკვლიოთ ეს და მსგავსი ხელსაწყოები ჩვენს ყველა გენერატორის კოლექციაში, ან დაათვალიეროთ დეველოპერული ხელსაწყოების უფრო ფართო ნაკრები დაკავშირებული ინსტრუმენტებისთვის.
ხშირად დასმული კითხვები
ერთი და იგივეა GUID და UUID?
ყოველდღიური მიზნებისთვის — დიახ. GUID არის Microsoft-ის სახელი იმავე 128-ბიტიანი იდენტიფიკატორისთვის. ერთადერთი ნამდვილი განსხვავება ბაიტების თანმიმდევრობაშია, ნედლ ორობით ფორმატში, ზოგიერთ Windows სისტემაზე; სტრიქონურ ფორმატში ისინი იდენტური და ურთიერთშეცვლადია.
UUID-ის რომელ ვერსიას აგენერირებს ეს ხელსაწყო?
ის აგენერირებს მეოთხე ვერსიას, შემთხვევით ვარიანტს. მისი 128 ბიტიდან 122 შემთხვევითი მონაცემით ივსება, რაც თითოეულ მნიშვნელობას გამეორების ძალიან დაბალ ალბათობას ანიჭებს და ნიშნავს, რომ მასში დროის შტამპი ან მოწყობილობის ინფორმაცია არ ატარებს.
შეიძლება ორი UUID ოდესმე ერთნაირი გამოვიდეს?
თეორიულად, ალბათობა ზუსტად ნული არ არის, მაგრამ დაახლოებით 5.3 გამრავლებული 10-ის 36-ე ხარისხზე შესაძლო v4 მნიშვნელობით, ის იმდენად მცირეა, რომ უმნიშვნელოდ ითვლება. საჭირო იქნებოდა ასტრონომიული რაოდენობის მათი გენერირება, სანამ დამთხვევა სავარაუდო გახდებოდა.
რატომ გამოვიყენოთ UUID ავტოზრდადი რიცხვის ნაცვლად?
UUID-ების შექმნა ნებისმიერ სერვისს დამოუკიდებლად შეუძლია, საერთო მთვლელის გარეშე, ისინი არ ავლენენ ჩანაწერების რაოდენობას ან თანმიმდევრობას, და ბევრი წყაროდან მონაცემების გაერთიანებას უმტკივნეულოდ ხდიან. ავტოზრდადი ID-ები უფრო პატარაა, მაგრამ ბოთლის ყელად იქცევა და ინფორმაციას ავლენს მასშტაბზე.
სერვერზე გენერირდება UUID-ები?
არა. ეს ხელსაწყო მთლიანად თქვენს ბრაუზერში მუშაობს, ასე რომ შემთხვევითი მნიშვნელობები ლოკალურად იქმნება და არსად იგზავნება. ეს მას უსაფრთხოს ხდის გასაღებებისა და ტოკენებისთვის, რომელთა კონფიდენციალურობის შენარჩუნებასაც აპირებთ.
რას ნიშნავს დეფისის ნიმუში?
8-4-4-4-12 დაჯგუფება უბრალოდ წაკითხვადობის კონვენციაა. დეფისებს მონაცემი არ ატარებთ; ისინი 32 თექვსმეტობით ციფრს ფრაგმენტებად ყოფენ, რათა ადამიანებმა უფრო ადვილად შეძლონ მნიშვნელობების გადახედვა და შედარება.
