ვორდპრესის მონაცემთა ბაზის საფუძვლები და ოპტიმიზაცია

blog

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

ვორდპრესის მონაცემთა ბაზას ასევე სჭირდება დროდადრო ოპტიმიზაცია. ამ სტატიაში განხილულია ეს თემა.

რა არის ვორდპრესის მონაცემთა ბაზა?

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

  1. ფიზიკური ფაილები (PHP, CSS, JS), რომლებიც განსაზღვრავენ კონფიგურაციას, გარეგნობას და რენდერირებას (rendering). თქვენ შეგიძლიათ ნახოთ და შეცვალოთ ისინი FTP კლიენტის გამოყენებით.
  2. მონაცემთა ბაზა (DB), რომელიც ინახავს კონტენტს, მომხმარებლის ინფორმაციას, ურთიერთობებს (relations) და სხვა მონაცემებს. თქვენ შეგიძლიათ გახსნათ და დაარედაქტიროთ იგი სხვადასხვა ხელსაწყოების გამოყენებით და ერთ-ერთი ყველაზე პოპულარულია phpMyAdmin.

ყოველთვის, როდესაც მომხმარებელი ხსნის ვებსაიტს, მყარდება კავშირი მონაცემთა ბაზასთან და იგზავნება მოთხოვნები. შემდეგ, ბრაუზერი ამუშავებს კონტენტს და მომხმარებელს შეუძლია ნახოს მოთხოვნილი ვებგვერდი. ასე რომ, ვერცერთი ვორდპრესის ვებსაიტი ვერ იარსებებს მონაცემთა ბაზის გარეშე. ის იყენებს ღია კოდის (open-source) DB მართვის სისტემას სახელწოდებით MySQL.

ვებსაიტის შექმნამდე უნდა შეიქმნას მონაცემთა ბაზა. ბევრი ჰოსტინგის პროვაიდერი, განსაკუთრებით მართული (managed) ჰოსტინგი, ამას ავტომატურად აკეთებს, როდესაც ჰოსტინგის პანელზე დააჭირეთ ღილაკს “Install WordPress”. მონაცემთა ბაზის სახელი, შესასვლელი ინფორმაცია და პაროლი შეგიძლიათ იხილოთ wp_config.php ფაილში; მათ გარეშე, DB-თან კავშირი არ იქნება.

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

WordPress database tables

  • wp_posts – ცენტრალური ცხრილი, რომელიც ინახავს პოსტის ყველა ტიპს (პოსტი, გვერდები, მენიუები, ვერსიები და ა.შ.). ასე რომ, ეს ცხრილი პასუხისმგებელია ვებსაიტის კონტენტის უმეტესობაზე.
  • wp_users – დარეგისტრირებული მომხმარებლების შესახებ ინფორმაციისთვის (ლოგინი, პაროლები, მეტსახელები და ა.შ.).
  • wp_comments – კომენტარებისთვის.
  • wp_postmeta – ინახავს პოსტების მეტამონაცემებს (მონაცემებს მეტა ველებიდან).
  • wp_usermeta – ინახავს მეტამონაცემებს მომხმარებლების შესახებ.
  • wp_commentmeta – ინახავს მეტამონაცემებს კომენტარების შესახებ.
  • wp_terms – ინახავს ტაქსონომიებს (კატეგორიების სახელები, ტეგები და ხელით შექმნილი ტაქსონომიები, მათი ID და ლინკები).
  • wp_termmeta – ინახავს ტერმინების მეტამონაცემებს.
  • wp_term_taxonomy – აღწერს ტაქსონომიებს და ფლობს ინფორმაციის ტერმინების სტრუქტურაზე.
  • wp_term_relationships – პასუხისმგებელია პოსტებსა და ტერმინებს შორის კავშირებზე.
  • wp_options – ინახავს გლობალური კონფიგურაციის ინფორმაციას, სხვადასხვა პრეფერენციებს, ვიჯეტებს და სხვა გლობალურ მონაცემებს.
  • wp_links – ინახავს ინფორმაციას ბმულების შესახებ მოძველებული Link-ის ფუნქციიდან (blogroll). ამიტომ ახლა, როგორც წესი, ცარიელი რჩება.

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

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

WordPress database structure

სასარგებლო ინფორმაცია მონაცემთა ბაზების გასააზრებლად

  • wp_term_relationship ცხრილი არ არის ახალი მონაცემების დასამატებლად. ის ასრულებს შემაერთებელ როლს პოსტებსა და ტაქსონომიებს შორის, რადგან მათ აქვთ მრავალი-მრავალთან ურთიერთობის ტიპი (როდესაც, მაგალითად, ერთი პოსტი შეიძლება მიეკუთვნებოდეს რამდენიმე კატეგორიას და კატეგორიას შეიძლება ჰქონდეს ბევრი პოსტი), ასე რომ, ამ ტიპის მედიუმი საჭიროა სათანადო წყვილების შესაქმნელად. მუშაობს შემდეგნაირად:
wp_term_relationsips connector between posts and taxonomies
wp_term_relationsips აკავშირებს პოსტებს ტაქსონომიებთან
  • მედია ფაილები არ ინახება მონაცემთა ბაზაში; მათი ნახვა შეგიძლიათ wp-content > uploads საქაღალდეში. მაგრამ ინფორმაცია მათ შესახებ და მათი მეტა ინფორმაცია ინახება DB-ში, ძირითადად wp_postmeta ცხრილში.
  • არსებობს ბევრი ფარული მეტა ველი, რომელიც არსებობს ყველა პოსტში. ისინი იწყებენ „_“-ით და არ უნდა მოხდეს მათი ხელით რედაქტირება. ასე რომ, თუ თქვენ ვერ ხედავთ მეტა ველებს თქვენს პოსტებში, ეს არ ნიშნავს რომ ისინი არ არსებობენ. ეს არ ეხება ხელით შექმნილი ველებს, რომლებსაც ამატებთ და გსურთ ხელით რედაქტირება და დამატებითი ინფორმაციის შენახვა – ისინი, რა თქმა უნდა, ხილული იქნება.

მონაცემთა ბაზის გასაღებები

DB ცხრილები დაკავშირებულია გასაღებების დახმარებით ურთიერთობის პრინციპის საფუძველზე. არსებობს ორი ძირითადი ტიპის გასაღებები, რომლებიც ხელს უწყობენ ამ კავშირების დამყარებას: პირველადი (primary) გასაღები და უცხო (foreign) გასაღები. (არსებობს უფრო მეტი ძირითადი ტიპი, მაგრამ ეს ორი საკმარისია იდეის გასაგებად). პირველადი გასაღები არის ჩანაწერი მონაცემთა ბაზაში უნიკალური, რომელიც გამოიყენება სხვა ცხრილში, როგორც მითითება (უცხო გასაღები). როგორც წესი, პირადობის მოწმობები თამაშობენ გასაღებების როლს.

მაგალითად, გადავხედოთ ორ ცხრილს: wp_users და wp_posts. პირველ ცხრილში დავინახავთ, რომ მომხმარებლის John აქვს ID=3. ეს არის პირველადი გასაღები.

Database primary key

ახლა მოდით გადავხედოთ wp_posts ცხრილს.  post_author სვეტში ვხედავთ 3-ს, რომელიც მიუთითებს მომხმარებლის ID=3-ზე (და ეს ნიშნავს, რომ ჯონი არის პოსტების ავტორი 9, 10 და 14 ნომრის ID-ებით). ეს სვეტი ასრულებს უცხო გასაღების როლს, რომელიც მიუთითებს სხვა ცხრილის მთავარ გასაღებზე.

Database foreign key

რატომ ეხება wp_posts ცხრილი wp_users ცხრილს და არა პირიქით?

იმის გამო, რომ wp_users-ს აქვს ერთი-ბევრთან კავშირი wp_post ცხრილთან – ერთ მომხმარებელს შეუძლია შექმნას ბევრი პოსტი, ხოლო ერთ პოსტს არ შეიძლება ჰყავდეს ბევრი ავტორი (მომხმარებელი).

შენიშვნა

არ დაგავიწყდეთ, რომ როდესაც ერთ პოსტს დაამატებთ, ის ქმნის ორ ჩანაწერს მონაცემთა ბაზაში: პოსტს და რევიზიას (post_type სვეტის მნიშვნელობა არის „revision“). ამიტომაც არის ბევრად მეტი IDs, ვიდრე საიტზე განთავსებული პოსტების საერთო რაოდენობა. ასე რომ, არ დაიბნეთ, როდესაც ხედავთ ორ ჩანაწერს იგივე ან მსგავსი შინაარსით. პოსტის ყოველი რედაქტირებისას კიდევ ერთი რევიზია დაემატება.

მაგრამ, თავის მხრივ, wp_posts-ს აქვს ერთ-ერთი კავშირი wp_postmeta ცხრილთან. თუ ავიღებთ, ვთქვათ, ID=10 პოსტს პირველი ცხრილიდან (პირველადი გასაღები) და გადავალთ wp_postmeta ცხრილში, მას ვიპოვით პოსტის ID სვეტში (უცხო გასაღები) და მეტამონაცემებს, რომელიც ამ პოსტს ეკუთვნის.

Database relations

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

რატომ უნდა მოხდეს ვორდპრესის მონაცემთა ბაზის ოპტიმიზაცია?

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

შენიშვნა

შექმენით თქვენი ვებსაიტის (კერძოდ მონაცემთა ბაზის) ბექაფი/სარეზერვო ასლი, სანამ მონაცემთა ბაზის ოპტიმიზაციას გააკეთებთ.

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

რევიზიები

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

post revisions

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

  • ვორდპრესში შენახული ვერსიების რაოდენობის შეზღუდვა;
  • ძველი ვერსიების წაშლა.

ვერსიების რაოდენობის შესაზღუდად, დაამატეთ ეს ხაზი wp-config.php ფაილში, რომელიც შეგიძლიათ იხილოთ ვებსაიტის root საქაღალდეში:

define( 'WP_POST_REVISIONS', 5 );

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

define( 'WP_POST_REVISIONS', false );

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

DELETE FROM wp_posts WHERE post_type = "revision"; 

სპამი და წაშლილი კომენტარები

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

წაშლილი პოსტები და მონახაზები

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

ამათ გარდა, არის წაშლილი პოსტები, რომლებიც შეიძლება სამუდამოდ წაიშალოს ხელით, ნაცვლად 30 დღის ლოდინისა, სანამ ვორდპრესი ავტომატურად წაშლის მათ. ასევე, შეგიძლიათ დაამატოთ ეს სტრიქონი wp-config.php ფაილში, რათა განისაზღვროს, რამდენად ხშირად გსურთ თქვენი სანაგვე ყუთის დაცლა (ჩემს მაგალითში „4“ არის დღეების რაოდენობა; თუ პოსტები დარჩება ურნაში და წაიშლება ამის შემდეგ) :

define('EMPTY_TRASH_DAYS', 4 );

Transients – გარდამავალი

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

Orphaned records

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

მონაცემთა ბაზის ოპტიმიზაცია და შეკეთება

არსებობს ორი ძირითადი მეთოდი თქვენი მონაცემთა ბაზის უკეთ მუშაობისთვის: ოპტიმიზაცია და შეკეთება. ეს შეიძლება გაკეთდეს შესრულების ოპტიმიზაციის პლაგინების (performance optimization plugins) გამოყენებით, შესაძლოა ხელით WP CLI ბრძანების ან SQL მოთხოვნის დაწერით

OPTIMIZE TABLE table_name;

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

როდის არის საჭირო ოპტიმიზაცია? aმის რამდენიმე მიზეზი შეიძლება იყოს:

  • მონაცემთა ბაზა არ მუშაობს გამართულად და მოთხოვნებს იმაზე მეტი დრო სჭირდება, ვიდრე საჭიროა ან საერთოდ არ მუშაობს;
  • მონაცემთა ბაზის ზომა გაცილებით დიდია, ვიდრე უნდა იყოს;
  • მონაცემთა ბაზის სხვა საეჭვო ქცევა (ეს ხშირად ხდება მიგრაციის შემდეგაც).

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

სინამდვილეში, ვორდპრესს აქვს მისთვის სპეციალური სკრიპტი. მაგრამ პირველ რიგში, თქვენ უნდა დაუშვათ მისი გამოყენება wp-config.php ფაილში, შემდეგი ხაზის დამატებით:

const WP_ALLOW_REPAIR = true;

ან

define( 'WP_ALLOW_REPAIR', true );

ამის შემდეგ გამოიყენეთ შემდეგი URL – https://your-website/wp-admin/maint/repair.php – და დაინახავთ ასეთ ეკრანს:

Database repair WordPress

შეჯამება

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

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

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

Free consultation ?

Have an idea or question ? We can assist you for free. Just leave your contact details below.