
ჯულია ევანსი Django-ის საიტის უკან SQLite-ის მუშაობაზე წერს
ის აღწერს, როგორ გადაარჩინა ANALYZE-მა ხუთ წამს რომ ანდომებდა ძიების მოთხოვნა, რატომ ამარცხებს სტრიქონების გასუფთავება პროცესებს და როგორ აკეთებს სარეზერვო ასლებს restic-ითა და Litestream-ით.
დეველოპერმა ჯულია ევანსმა გამოაქვეყნა დაკვირვებები Django-ს საიტის უკან SQLite-ის მუშაობაზე — ეს უკვე მეოთხე ვებპროექტია, რომელშიც ის ჩაშენებულ ბაზას იყენებს. მისი თქმით, რჩევა, რომ მცირე საიტისთვის SQLite პროდაქშენშიც სავსებით ვარგისია, სწორია, თუმცა გამოცდილებამ აჩვენა ის, რასაც ბლოგპოსტები ხშირად გამოტოვებენ: SQLite მაინც ბაზაა, ბაზები კი რთული სისტემებია და მათი ექსპლუატაცია ცალკე უნარია.
ANALYZE და ხუთწამიანი მოთხოვნა
პირველი მოულოდნელობა იყო FTS5-ის სრულტექსტური ძიების მოთხოვნა 4000-სტრიქონიან ცხრილზე, რომელიც ხუთ წამს ანდომებდა. ANALYZE-ის გაშვებამ დრო დაუყოვნებლივ დაახლოებით 0.05 წამამდე შეამცირა. ANALYZE აგროვებს სტატისტიკას, რომელსაც მოთხოვნების დამგეგმავი უკეთესი გეგმის ასარჩევად იყენებს; ევანსი აღნიშნავს, რომ ჯერ კიდევ არ იცის, კონკრეტულად რა იყო არასწორი პირვანდელ გეგმაში და შემთხვევით კვადრატულ სირთულეს ეჭვობს. SQLite-ს ვებპროექტებში 2022 წლიდან იყენებს და ANALYZE-ის არსებობა მხოლოდ ახლახან გაიგო.
სტრიქონების გასუფთავება უფრო რთულია, ვიდრე ჩანს
არასასურველი სტრიქონების ჯგუფური წაშლა — მაგალითად, django-tasks-db-ის მიერ დატოვებული დასრულებული ამოცანები — არაერთხელ შეუქმნია პრობლემა. როცა გასუფთავების ბრძანება ხუთ წამზე მეტხანს გრძელდება, სხვა პროცესი ბაზაში ჩაწერას ცდილობს, ხუთწამიან ლიმიტს აჭარბებს, ითიშება და თან ვირტუალურ მანქანასაც თიშავს. ამჟამინდელი გამოსავალი მცირე ჯგუფებად გასუფთავებაა, რომ არც ერთი მოთხოვნა არ გასცდეს ლიმიტს. ევანსის თქმით, ამ შემთხვევამ უკეთ აუხსნა, თუ რატომ შეიძლება დასჭირდეს ადამიანს Postgres-ის მსგავსი ბაზა, სადაც ერთდროულად რამდენიმე მწერალი მუშაობს; მომავალში, შესაძლოა, გასუფთავებისთვის დაგეგმილი ტექნიკური შეჩერება აირჩიოს.
სარეზერვო ასლები: restic და Litestream
მიმდინარე რუტინა ბაზას VACUUM INTO-თი ამოიღებს, აკუმშავს და restic-ით S3-ზე აგზავნის — ჯერ საცავის განბლოკვით, რადგან მოკლული სარეზერვო პროცესი საკეტს ტოვებს, შემდეგ კი ძველი სნეპშოტების გასუფთავებით. ცოტა ხნის წინ Litestream-ის ტესტვაც დაიწყო ინკრემენტული რეპლიკაციისთვის, 400-საათიანი შენახვის ფანჯრით, ნაწილობრივ იმიტომ, რომ restic-ის გაშვებები ზოგჯერ მეხსიერების უკმარისობით იკვდებოდა. ასლებს მონიტორინგის სისტემა აკონტროლებს, რომელიც სიგნალის შეწყვეტაზე რეაგირებს, თუმცა ავტორი აღიარებს, რომ აღდგენა ჯერ არ გამოუცდია.
წარმადობაზე ევანსი განზრახ მშვიდადაა: მოთხოვნებს Django ORM-ით წერს და ნელი გეგმებისთვის თვალს არ ადევნებს, ბაზა კი დაახლოებით 10 000 სტრიქონს ინახავს და, მისი მოლოდინით, პატარად დარჩება. როცა ცხრილებს ერთად ყოფნა არ სჭირდება, რამდენიმე ფაილად არიგებს — ეს მიდგომა გამოიყენა Mess with DNS-ზეც, რომელიც SQLite-ზე 2022 წლიდან, უკვე ოთხი წელია მუშაობს.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.