Zrozumienie, w jaki sposób WordPress korzysta z MySQL

Opublikowany: 2014-09-30

Ogólnie rzecz biorąc, WordPressa można podzielić na dwa segmenty:

  • logika i szablony, które generują wygląd witryny WordPress
  • baza danych MySQL, która przechowuje całą zawartość i zasila to wszystko

Ale czym jest MySQL?

MySQL jest niesamowicie potężny, ale baza danych, która obsługuje WordPressa, jest również lekka i solidna. Jedną z najlepszych części potężnego systemu CMS, takiego jak WordPress, jest to, że obsługuje on całe zarządzanie bazą danych dla użytkownika i oddziela je od użytkownika końcowego. Użytkownicy WordPressa, a nawet projektanci, nie muszą być dokładnie zaznajomieni z działaniem bazy danych. Jeśli jednak chcesz naprawdę zrozumieć, jak działa WordPress, ten post jest dla Ciebie.

Najpierw porozmawiajmy o tym, czym jest MySQL. W szczególności MySQL to system zarządzania relacyjnymi bazami danych, w skrócie RDBMS. RDBMS to kontener przeznaczony do obsługi i uruchamiania języka Structured Query Language (SQL). SQL jest tym, co napędza bazę danych — kontroluje strukturę i formę bazy danych, a także rejestruje wstawienia, usunięcia, modyfikacje itd., które są wykonywane w tej bazie danych.

Jak działa MySQL?

To wszystko jest jednak trochę techniczne, więc cofnijmy się o krok i zastanówmy się, jak wyglądałaby baza danych SQL.

SQL jest zorganizowany w tabele informacji. Ogólnie rzecz biorąc, pomyśl o tabeli jako arkuszu kalkulacyjnym w programie Excel. Wiersze i kolumny przechowują informacje zgodnie z ustaloną strukturą. Jednak w przeciwieństwie do arkusza kalkulacyjnego Excel, kolumny (nazywane kluczami lub czasami polami ) bazy danych SQL są z góry zdefiniowane i skategoryzowane.

Zdefiniowana struktura lub kolumny tabel w WordPressie są ustalane z góry — nie zmienią się wraz z rozwojem witryny, chyba że zmieni je specjalnie wtyczka lub aktualizacja rdzenia. Kolumna jest nie tylko definiowana z góry, ale także przed umieszczeniem w niej rekordów. Typy takie jak liczby (INT dla liczb całkowitych), pola słów (TEXT lub VARCHAR dla pól tekstowych) i inne (DATETIME dla daty i czasu) są wstępnie ustawione w bazie danych. Jeśli WordPress (lub haker) spróbuje dodać dane do bazy danych, które nie pasują do określonego wzorca, baza danych nie zaakceptuje danych.

Kolejną ogromną cechę baz danych SQL można znaleźć w akronimie RDBMS: funkcja relacyjna.

Tabele SQL, a nawet określone klucze w tabeli mają możliwość powiązania z innymi tabelami i kluczami. Pozwala to użytkownikom budować bazy danych, które są ze sobą ściśle powiązane, co oznacza lepszą organizację i większą wydajność.

Załóżmy, że chcesz zbudować bazę danych tweetów do późniejszego przejrzenia. Możesz stworzyć tabelę zawierającą informacje o konkretnych tweetach, które zapisałeś, na przykład treść tweeta, liczbę ulubionych i tak dalej. Chciałbyś również zapisać dane osoby, która to napisała — jak się nazywa, ilu ma obserwujących, i takie rzeczy.

Korzystając z relacyjnych baz danych, możesz utworzyć tabelę tweetów zawierającą wszystkie dane dotyczące konkretnych tweetów, a następnie możesz utworzyć tabelę użytkownika zawierającą wszystkie informacje o osobie, która wysłała dany tweet. Następnie możesz powiązać klucze w dwóch tabelach, aby baza danych (a tym samym Ty) wiedziała, który użytkownik jest powiązany z którym tweetem.

WordPress wykorzystuje tabele relacyjne do powiązania wielu danych. Na przykład tabela wp_posts zawiera wszystkie istotne dane o pojedynczym poście w WordPressie. Tabela wp_comments zawiera każdy komentarz pozostawiony w poście WordPress, ale wp_posts i wp_comments to dwie różne tabele w tej samej bazie danych. WordPress buduje relację między niektórymi kluczami w tabeli wp_comments a tabelą wp_posts, dzięki czemu WordPress może dowiedzieć się, który komentarz należy do którego wpisu na blogu.

Ta struktura bazy danych i tabel jest budowana w bazie danych MySQL podczas początkowej konfiguracji WordPressa. Stamtąd WordPress po prostu manipuluje wartościami lub wierszami w każdej tabeli, aby Twoja witryna działała.

Na przykład podczas tworzenia nowego użytkownika wiersz zawierający wszystkie dane dotyczące użytkownika (takie jak nazwa użytkownika, hasło i poziom uprawnień) jest wstawiany do tabeli wp_users. Kiedy użytkownik się loguje, WordPress uzyskuje dostęp do bazy danych i porównuje informacje podane na ekranie logowania z bazą danych. Jeśli się nie zgadzają, logowanie jest odrzucane.

Jak MySQL wykorzystuje buforowanie

WP bez buforowania

WordPress i MySQL bez buforowania.

Ta sama koncepcja dotyczy postów: kiedy piszesz i zapisujesz nowy post, WordPress zapisuje go jako wiersz w bazie danych wp_posts. Należy zauważyć, że jest to również odwrotne: gdy osoba przeglądająca witrynę uzyskuje dostęp do strony z jej treścią, WordPress musi uzyskać dostęp do bazy danych, pobrać dane z tabel, a następnie wyrenderować je na swoim ekranie. W przypadku kilku odwiedzających normalny serwer poradzi sobie z tym obciążeniem. Ale jeśli wiele osób prosi o treści ze strony internetowej, WordPress i baza danych nie będą w stanie nadążyć za wszystkimi żądaniami i strona może się zwinąć. Dlatego tak ważne jest korzystanie z silnika buforującego lub wtyczki.

Aby ponownie uzyskać nieco techniczny charakter, ważne jest zrozumienie kosztów obliczeniowych. W tym przypadku koszt nie oznacza wydawania pieniędzy ani kupowania rzeczy. Oznacza to ocenę kilku różnych czynników, które są ważne dla szybkości przetwarzania, takich jak czas, dostępna pamięć i liczba operacji dyskowych, które należy wykonać.

MySQL przechowuje wszystkie te informacje w bazie danych na dysku twardym komputera, na którym są przechowywane. To naprawdę świetny system, ponieważ jest odporny na awarie, ma dużo miejsca do przechowywania i nie niszczy pamięci komputera, na którym działa. W porównaniu z bazą danych, taką jak Redis, która przechowuje wszystko w pamięci RAM komputera, na którym jest uruchomiony, MySQL oferuje dużą stabilność i eliminuje obawy związane z utratą danych.

Jednak stabilność MySQL ma swój koszt: szybkość. Ciągły dostęp do tych samych kluczy w bazie danych przez WordPressa należy uznać za „drogi”. Dostęp do bazy danych, wykonanie operacji dyskowej, przywrócenie danych, a następnie ich renderowanie kosztuje dużo.
Buforowanie WP

WordPress i MySQL z buforowaniem. Uwaga: serwery WWW, MySQL i buforowania są zazwyczaj uruchamiane jednocześnie na tym samym serwerze. Ten diagram oddziela je w celach ilustracyjnych.

Buforowanie to świetne rozwiązanie tego problemu. Zajmuje ten ostatecznie wyrenderowany kod HTML i utrzymuje go przez krótki czas, może około 30 sekund. Jeśli ktoś zażąda tej samej strony, silnik buforujący wyświetli mu już wyrenderowaną stronę, pomijając cały proces interakcji z bazą danych. Dlatego tak ważne jest, aby zainstalować wtyczki do buforowania WordPress lub skorzystać z usługi hostingu zarządzanego, która obsługuje buforowanie podczas tworzenia stron internetowych. Jeśli post trafi na przykład na pierwszą stronę Reddit, Twoja witryna zwinie się pod presją całego nowego ruchu bez zainstalowanego buforowania.

Jedenaście tabel MySQL WordPress

WP3.8-ERD

Domyślne tabele MySQL WordPress 3.8. Zdjęcie dzięki uprzejmości WordPress Codex, na licencji GPL

Teraz, gdy rozumiemy, jak faktycznie działają niektóre z tych baz danych i tabel, porozmawiajmy o jedenastu konkretnych tabelach, które WordPress tworzy i używa domyślnie:

  • wp_commentmeta – Wszelkie metadane związane z komentarzami, takie jak klucze i wartości, są przechowywane w tej bazie danych. Nie przechowuje metadanych, takich jak autor i data przesłania, ale raczej różne dane, z których od czasu do czasu korzysta WordPress. Te dane są czasami opcjonalne lub nie są używane. Odnosi się bezpośrednio do wp_comments.

  • wp_comments – Ta tabela zawiera wszystkie komentarze do postów i stron WordPress, a także wszystkie powiązane dane, takie jak autor, jego adres e-mail, data przesłania i post, w którym pozostawiono komentarz.

  • wp_links – Ta baza danych jest używana do przechowywania danych linków w postach WordPress, ale została wycofana od kilku wersji WordPressa temu. Chociaż nadal tam jest, wątpliwe jest, czy zobaczysz ten używany.

  • wp_options – Wszystkie opcje, które zostały ustawione w panelu ustawień, są przechowywane w tej bazie danych.

  • wp_postmeta – Podobnie jak wp_commentmeta, wp_postmeta zawiera opcjonalne dane o postach. O ile nie ma konkretnego przypadku użycia, ten prawdopodobnie nie będzie intensywnie używany.

  • wp_posts – wp_posts zawiera wszystkie dane o postach i powiązane z nimi dane. Ta tabela jest bardzo intensywnie używana i zawiera całą zawartość witryny.

  • wp_terms – Ta tabela przechowuje zawartość, taką jak tagi i kategorie, według których posty są klasyfikowane.

  • wp_term_relationships – Ta tabela jest odpowiedzialna za utrzymywanie relacji między postami i powiązanymi z nimi kategoriami i tagami. Tutaj również ustanowiono relację MySQL: tabela jest w rzeczywistości połączona zarówno z postami, jak i terminami za pośrednictwem tabeli wp_term_taxonomy.

  • wp_term_taxonomy – Obsługuje śledzenie, jakie rodzaje taksonomii są powiązane z postami. Łączy się z powrotem do wp_terms oraz wp_term_relationships i tylko rejestruje skojarzenia z kategoriami, tagami i tak dalej.

  • wp_usermeta - Kolejna metatabela, wp_usermeta obsługuje wszelkie opcjonalne metadane związane z wp_users.

  • wp_users – wp_users zawiera wszystkie dane dotyczące użytkowników WordPress, w tym informacje takie jak nazwy użytkowników, uprawnienia administratora i zaszyfrowane hasła.

MySQL może początkowo wydawać się onieśmielający, ale dzięki WordPressowi tabele są ułożone w sposób, który nie tylko ma sens, ale także promuje szybkość i wydajność. Następnym razem, gdy będziesz pracować nad witryną WordPress, zastanów się nad strukturą bazy danych MySQL obsługującej witrynę. Dokładne zrozumienie bazy danych witryny może sprawić, że witryna jest bezpieczna, solidna i niezwykle wydajna.