რა არის MongoDB Shading და საუკეთესო პრაქტიკა?

როგორ გავაფორმოთ MongoDB? რა არის საუკეთესო ვარჯიშის პრაქტიკა?


მიუხედავად იმისა, რომ მოქნილი სქემაა, თუ როგორ იცნობენ ადამიანებს უმეტესობა MongoDB- ს, ის ასევე არის ერთ – ერთი საუკეთესო მონაცემთა ბაზა (შესაძლოა, საუკეთესოც კი, როდესაც საქმე ყოველდღიურ აპლიკაციებს ეხება) მონაცემთა ძალიან, ძალიან მასშტაბურ მონაცემთა ნაკლებობებისთვის. მიუხედავად იმისა, რომ ამ არგუმენტის დასაბუთება თავისთავად ითხოვს მთელ სტატიას (იმედი მაქვს, რომ ერთ დღეს ვიპოვნებ მას დრო!), ზოგადი მოსაზრებაა, რომ SQL დაფუძნებული გადაწყვეტილებები მხარს არ უჭერენ მხარს და არ აშენებენ მასზე..

საუკეთესო რისი იმედი გაქვთ, შექმენით კლასტერი (რომელსაც არავითარი კავშირი არ აქვს ფუნდამენტურად შერყევისკენ, ან სხვათა შორის) მართოთ გადაწყვეტა, როგორიცაა Amazon– ის RDS ან Google– ის Cloud SQL, რომელიც გახდება სავალდებულო ძვირი, როგორც თქვენი მონაცემები იზრდება..

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

თუ თქვენ იცით, რომ გაპარსვა გაქვთ, მოგერიდებათ შემდეგი ნაწილის მეშვეობით.

Shading საფუძვლები

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

ახლა იმის გათვალისწინებით, რომ ამჟამად საუკეთესო სერვერებსაც კი არ აქვთ მეტი 256 GB ოპერატიული მეხსიერება ან 16 ტბა მყარი დისკი, თქვენ აგურით აგდებთ კედელს, როდესაც ვერტიკალურად შეაფასებთ (ან “მასშტაბით ასვლა”, როგორც ტერმინოლოგია მიდის). ამასთან, თქვენ შეგიძლიათ დააკავშიროთ რაც შეიძლება მეტი ერთჯერადი აპარატი (ყოველ შემთხვევაში, თეორიულად) და მარტივად გადავდოთ ეს შეზღუდვა.

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

მონაცემთა ბაზა Shading

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

და ჯადოსნურად, სისტემის შესაძლებლობები ახლა გაორმაგებულია!

მხოლოდ ცხოვრება რომ მარტივი ყოფილიყო! ��

მონაცემთა ბაზაში დაჩრდილვის გამოწვევები

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

არ არის ძირითადი გასაღებები

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

არა უცხო გასაღებები

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

მონაცემთა უცნაური შეცდომები

თუ ერთი მანქანა გადის, საბოლოო მომხმარებელს შეიძლება ნაჩვენები ჰქონდეს “ოჰ, რამე გატეხა!” გვერდი, რომელიც უეჭველად გააღიზიანებს, მაგრამ ცხოვრება გარკვეული დროის შემდეგ იქნება გზაზე.

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

გარიგების მენეჯმენტი

მოდით განვიხილოთ გარიგების მართვის მუდმივი შემთხვევაც. ამჯერად, დავუშვათ, რომ სისტემა 100% ჯარიმით მუშაობს. ახლა, ორი ადამიანი (A და B) იხდის გადასახადს მესამეზე (C). სავარაუდოა, რომ ორივე გარიგება ერთდროულად წაიკითხავს C ანგარიშის ბალანსს, რამაც გამოიწვია ეს დაბნეულობა:

  • C ანგარიშის ბალანსი = 100 $.
  • გარიგების შესახებ ვკითხულობთ C- ს ბალანსს: 100 $.
  • გარიგების შესახებ ვკითხულობთ C- ს ბალანსს: 100 $.
  • გარიგების დამატებას $ 50 და განაახლებს ბალანსს: 100 $ + 50 = 150 $.
  • B– ს გარიგებას ემატება $ 50 და განახლებული ბალანსი: 100 $ + 50 = 150 $.

Ჯანდაბა! 50 დოლარი უბრალოდ გაქრა თხელ ჰაერში!

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

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

MongoDB დაჩრდილვა

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

ქვემოთ მოყვანილი სურათი გვიჩვენებს, თუ როგორ გამოიყურება ეს ჩვეულებრივ ვებ აპლიკაციაში.

გამოსახულების კრედიტი: mongodb.com

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

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

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

თქვენ ასევე შეიძლება დაგაინტერესოთ ეს დეველოპერის სრული სახელმძღვანელო.

MongoDB Shading საუკეთესო პრაქტიკა

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

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

Shading Key გარდაუვალად აკონტროლებს shanding წელს MongoDB, ასე რომ იდეალურია, რომ ჩვენ დავიწყოთ ჩვენი გამოკითხვა.

მაღალი კარდინალურობა

კარდინალობა ნიშნავს ვარიაციის ოდენობას. მაგალითად, 1 მილიონი ადამიანის საყვარელი ქვეყნის კოლექციას დაბალი ვარიაციები ექნება (მსოფლიოში მხოლოდ ამდენი ქვეყანაა!), ხოლო მათი ელ.ფოსტის მისამართების კოლექციას ექნება (სრულყოფილად) მაღალი კარდინალურობა. რატომ აქვს მნიშვნელობა? დავუშვათ, რომ თქვენ შეარჩიეთ გულუბრყვილო სქემა, რომელიც ფარავს მონაცემებს მომხმარებლის სახელის საფუძველზე.

აქ გვაქვს საკმაოდ მარტივი მოწყობა; შემომავალი დოკუმენტი დასკანერებულია მომხმარებლის სახელით, და იმისდა მიხედვით, თუ სად არის პირველი ასო ინგლისურ ანბანში, იგი სამ ფარდს უვლის. ანალოგიურად, დოკუმენტის ძებნა ადვილია: მაგალითად, “პიტერისთვის” დეტალები, სავარაუდოდ, მეორე ნაწილში იქნება..

ეს ყველაფერი კარგად ჟღერს, მაგრამ საქმე ისაა, რომ ჩვენ არ ვაკონტროლებთ შემომავალი დოკუმენტების მომხმარებლების სახელებს. რა მოხდება, თუ დროის უმეტეს ნაწილს მხოლოდ B– დან F დიაპაზონში ვიღებთ სახელებს? თუ ასეა, ჩვენ გვექნება ის, რასაც shard1- ში „ჯუმბო“ ეწოდება: სისტემის მონაცემების უმეტესობა იქ იქნება ხალხმრავალი, ეფექტურად გადადის კონფიგურაციის ერთ მონაცემთა ბაზაში.

Წამალი?

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

ერთფეროვნად იცვლება

ჩვეულებრივი შეცდომა MongoDB shading არის მონოტონურად მზარდი (ან ავტომატურად გაზრდის, თუკი) გასაღების გამოყენება, როგორც shard კლავიატურა.

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

გამოსახულების კრედიტი: mongodb.com

როგორც სურათზე ხედავთ, მას შემდეგ რაც ჩვენ გადავხედავთ 20 დიაპაზონს, ყველა დოკუმენტი იწყება Chunk C– ში შეგროვებას, რაც იქ იწვევს მონოლითს. გამოსავალი არის ის, რომ გადავიღოთ hashed shading გასაღები სქემა, რომელიც ქმნის shading კლავიშს hashing ერთი მოწოდებული ველების გამოყენებით და გამოიყენოს იგი, რათა დადგინდეს.

გამოსახულების კრედიტი: Mongodb.com

ჰეშტის შარდის კლავიატურა ასე გამოიყურება:

{
"_ დაიდო" :"6b85117af532da651cc912cd"
}

. . . და მისი შექმნა შესაძლებელია Mongo– ს კლიენტის ჭურვში, გამოყენებით:

db.collection.createIndex ({_id: hashedValue)

შარდი ადრე

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

ყველას არა აქვს პრო-შერყევა. როგორც საინტერესო მაგალითი (სწავლა ნამდვილად კომენტარებშია), ნახეთ ეს ლამაზი პერკონა ბლოგი.

ბალანსის გაშვება

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

აქ მოცემულია, თუ როგორ შეგიძლიათ მიაღწიოთ ამას (თუ ვიმსჯელებთ, რომ მცირე ტრეფიკი გაქვთ დილის 3 საათიდან დილის 5 საათამდე):

კონფიგურაციის გამოყენება
db.settings.update (
id _იდ: "ბალანსი" },
set $ მითითებული: {აქტიური ფანჯარა: {დაწყება: "03:00 საათი", გაჩერება: "05:00 საათზე" }},
{upsert: true
)

დასკვნა

ნებისმიერი მონაცემთა ბაზის გაცვლა და გააფართოება რთული საქმეა, მაგრამ საბედნიეროდ MongoDB ხდის მას უფრო მართვადი ვიდრე სხვა პოპულარულ მონაცემთა ბაზებში..

ნამდვილად იყო დრო, როდესაც MongoDB არ იყო სწორი არჩევანი ნებისმიერი პროექტისთვის (მრავალი კრიტიკული საკითხისა და ნაგულისხმევი ქცევის წყალობით), მაგრამ ეს უკვე კარგა ხანია. Shading, rebalancing, auto compression, აგრეგატის დონის განაწილებული დაბლოკვა და მრავალი ასეთი მახასიათებელი, MongoDB მილის დადგომამდე მივიდა, დღეს პროგრამული უზრუნველყოფის არქიტექტორის პირველი არჩევანია.

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

ტეგები:

  • Მონაცემთა ბაზა

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map