WordPress'in MySQL'i nasıl kullandığını anlama

Yayınlanan: 2014-09-30

Genel olarak konuşursak, WordPress iki bölüme ayrılabilir:

  • bir WordPress sitesinin görünümünü ve hissini oluşturan mantık ve şablonlar
  • tüm içeriği depolayan ve hepsine güç sağlayan MySQL veritabanı

Ama MySQL nedir?

MySQL inanılmaz derecede güçlüdür, ancak WordPress'i destekleyen stok veritabanı da hafif ve sağlamdır. WordPress gibi güçlü bir CMS'nin en iyi parçalarından biri, kullanıcı için tüm veritabanı yönetimini ele alması ve onu son kullanıcıdan soyutlamasıdır. WordPress kullanıcıları ve hatta tasarımcılar, veritabanının nasıl çalıştığını yakından tanımak zorunda değildir. Ancak, WordPress'in nasıl çalıştığını gerçekten anlamakla ilgileniyorsanız, bu yazı tam size göre.

Öncelikle MySQL'in ne olduğundan bahsedelim. Spesifik olarak MySQL, ilişkisel bir veritabanı yönetim sistemi veya kısaca RDBMS'dir. RDBMS, Structured Query Language (SQL) işlemek ve çalıştırmak için tasarlanmış bir kapsayıcıdır. SQL, bir veritabanına güç veren şeydir - veritabanının yapısını ve biçimini kontrol eder ve ayrıca o veritabanında gerçekleştirilen eklemeleri, silmeleri, değişiklikleri vb. kaydeder.

MySQL nasıl çalışır?

Bunların hepsi biraz teknik olsa da, bir adım geriye gidelim ve bir SQL veritabanının nasıl görüneceğini düşünelim.

SQL, bilgi tabloları halinde düzenlenmiştir. Genel olarak, bir tabloyu Excel'de bir elektronik tablo olarak düşünün. Satırlar ve sütunlar, bilgileri önceden belirlenmiş bir yapıya göre depolar. Ancak, bir Excel elektronik tablosundan farklı olarak, bir SQL veritabanının sütunları ( anahtarlar veya bazen alanlar olarak adlandırılır) önceden tanımlanır ve önceden kategorilere ayrılır.

WordPress'teki tabloların tanımlı yapısı veya sütunları önceden ayarlanır - bir eklenti veya çekirdek güncelleme bunları özellikle değiştirmedikçe site büyüdükçe değişmezler. Bir sütun yalnızca önceden tanımlanmaz, türü de kayıtlar içine konmadan önce tanımlanır. Sayılar (tamsayılar için INT) sözcük kutuları, (metin alanları için TEXT veya VARCHAR) ve diğerleri (tarih ve saat için DATETIME) gibi türler veritabanında önceden ayarlanmıştır. WordPress (veya bir bilgisayar korsanı), veritabanına önceden belirtilen kalıpla eşleşmeyen verileri eklemeye çalışırsa, veritabanı verileri kabul etmeyecektir.

SQL veritabanlarının bir başka büyük özelliği de RDBMS kısaltmasında bulunur: ilişkisel özellik.

SQL tabloları ve hatta bir tablodaki belirli anahtarlar, diğer tablolar ve anahtarlarla ilişki kurma yeteneğine sahiptir. Bu, kullanıcıların birbirleriyle sıkı bir şekilde ilişkili veritabanları oluşturmasına olanak tanır, bu da daha iyi organizasyon ve daha fazla verimlilik anlamına gelir.

Diyelim ki daha sonra bakmak için bir tweet veritabanı oluşturmak istiyorsunuz. Tweet'in içeriği, kaç tane favorisi olduğu gibi kaydettiğiniz belirli tweet'ler hakkında bilgileri içeren bir tablo oluşturabilirsiniz. Ayrıca bunu tweetleyen kişiyle ilgili verileri de kaydetmek istersiniz - adı ne, kaç takipçisi var, bunun gibi şeyler.

İlişkisel veritabanlarını kullanarak, belirli tweet'lerle ilgili tüm verileri içeren bir tweet tablosu oluşturabilir ve ardından söz konusu tweet'i gönderen kişi hakkındaki tüm bilgileri içeren bir kullanıcı tablosu oluşturabilirsiniz. Daha sonra iki tablodaki anahtarları ilişkilendirebilirsiniz, böylece veritabanı (ve dolayısıyla siz) hangi kullanıcının hangi tweet ile ilişkili olduğunu bilir.

WordPress, birçok veriyi ilişkilendirmek için ilişkisel tabloları kullanır. Örneğin, wp_posts tablosu, WordPress'teki tek bir gönderiyle ilgili tüm verileri içerir. wp_comments tablosu, herkesin bir WordPress gönderisine yaptığı her yorumu içerir, ancak wp_posts ve wp_comments aynı veritabanındaki iki farklı tablodur. WordPress, wp_comments tablosundaki belirli anahtarlar ile wp_posts tablosu arasında bir ilişki kurar, böylece WordPress hangi yorumun hangi blog gönderisine ait olduğunu bulabilir.

Bu veritabanı ve tablo yapısı, WordPress'i ilk kurduğunuzda bir MySQL veritabanı içinde oluşturulur. Oradan, WordPress sitenizin çalışmasını sağlamak için her tablodaki değerleri veya satırları değiştirir.

Örneğin, yeni bir kullanıcı oluşturduğunuzda, kullanıcı hakkındaki tüm verileri (kullanıcı adı, şifre ve izin düzeyi gibi) içeren bir satır wp_users tablosuna eklenir. Bir kullanıcı oturum açtığında, WordPress veritabanına erişir ve oturum açma ekranında sağlanan bilgileri veritabanına karşı kontrol eder. Eşleşmezlerse, giriş reddedilir.

MySQL önbelleğe almayı nasıl kullanır?

WP Önbelleğe Alma Yok

Önbelleğe almadan WordPress ve MySQL.

Aynı kavram gönderiler için de geçerlidir: Yeni bir gönderi yazıp kaydettiğinizde, WordPress bunu wp_posts veritabanında bir satır olarak kaydeder. Bunun tersinin de doğru olduğunu unutmamak önemlidir: Bir web sitesini görüntüleyen bir kişi, içeriği olan bir sayfaya eriştiğinde, WordPress'in veritabanına erişmesi, verileri tablolardan alması ve ardından kendi ekranında oluşturması gerekir. Birkaç ziyaretçi için normal bir sunucu bu yükü gayet iyi kaldırabilir. Ancak çok sayıda insan web sitesinden içerik talep ediyorsa, WordPress ve veritabanı tüm istekleri karşılayamaz ve site kapanabilir. Bu yüzden bir önbelleğe alma motoru veya eklentisi kullanmak çok önemlidir.

Biraz daha teknik olmak için, hesaplama maliyetini anlamak önemlidir. Bu durumda maliyet, para harcamak veya bir şeyler satın almak anlamına gelmez. Zaman, kullanılabilir bellek ve gerçekleştirilmesi gereken disk işlemlerinin sayısı gibi bilgi işlem hızı için önemli olan birkaç farklı faktörün değerlendirilmesi anlamına gelir.

MySQL, tüm bu bilgileri, depolandığı bilgisayarın sabit diskindeki bir veritabanında saklar. Bu gerçekten harika bir sistem çünkü arızaya karşı dayanıklı, çok fazla depolama alanına sahip ve üzerinde çalıştığı bilgisayarın belleğini yok etmiyor. Her şeyi çalıştığı bilgisayarın RAM'inde depolayan Redis gibi bir veritabanıyla karşılaştırıldığında, MySQL çok fazla kararlılık sunar ve veri kaybı endişesini ortadan kaldırır.

Ancak MySQL'in kararlılığının bir maliyeti vardır: hız. WordPress'in bir veritabanındaki aynı anahtarlara sürekli olarak erişmesini sağlamak “pahalı” olarak görülmelidir. Veritabanına erişmek, bir disk işlemi gerçekleştirmek, bu verileri geri getirmek ve sonra işlemek çok maliyetlidir.
WP Önbelleğe Alma

Önbelleğe alma ile WordPress ve MySQL. Not: web, MySQL ve önbelleğe alma sunucuları genellikle aynı sunucuda aynı anda çalıştırılır. Bu diyagram, örnekleme amacıyla onları ayırır.

Önbelleğe alma, bu sorun için harika bir çözümdür. Bu son işlenmiş HTML'yi alır ve kısa bir süre, belki 30 saniye kadar tutar. Birisi aynı sayfayı isterse, önbelleğe alma motoru, veritabanıyla etkileşim sürecinin tamamını atlayarak önceden oluşturulmuş sayfayı onlara sunar. Bu nedenle, WordPress önbelleğe alma eklentileri yüklemek veya web siteleri oluştururken sizin için önbelleğe almayı yöneten bir yönetilen barındırma hizmeti kullanmak çok önemlidir. Örneğin, Reddit'in ön sayfasında bir gönderi biterse, siteniz önbellek yüklenmeden tüm yeni trafiğin baskısı altında katlanır.

WordPress'in on bir MySQL tablosu

WP3.8-ERD

WordPress 3.8 varsayılan MySQL tabloları. GPL kapsamında lisanslı WordPress Codex'in izniyle

Artık bu veritabanlarından ve tablolardan bazılarının gerçekte nasıl çalıştığını anladığımıza göre, WordPress'in varsayılan olarak oluşturduğu ve kullandığı on bir belirli tablodan bahsedelim:

  • wp_commentmeta – Anahtarlar ve değerler gibi yorumlarla ilişkili tüm meta veriler bu veritabanında depolanır. Yazar ve gönderildiği tarih gibi meta verileri tutmaz, bunun yerine WordPress'in ara sıra kullandığı çeşitli verileri tutar. Bu veriler bazen isteğe bağlıdır veya kullanılmaz. Doğrudan wp_comments ile ilgilidir.

  • wp_comments – Bu tablo, WordPress gönderilerinde ve sayfalarında yapılan tüm yorumları ve ayrıca yazar, e-posta adresi, gönderildiği tarih ve yorumun bırakıldığı gönderi gibi tüm ilişkili verileri içerir.

  • wp_links – Bu veritabanı, WordPress gönderilerindeki bağlantı verilerini içermek için kullanılır, ancak birkaç WordPress sürümünden itibaren kullanımdan kaldırılmıştır. Hala orada olmasına rağmen, bunun kullanıldığını göreceğiniz şüpheli.

  • wp_options – Ayarlar panelinde ayarlanan tüm seçenekler bu veritabanında saklanır.

  • wp_postmeta – wp_commentmeta gibi, wp_postmeta da gönderiler hakkında isteğe bağlı verileri içerir. Belirli bir kullanım durumu olmadıkça, bunun yoğun bir şekilde kullanılması olası değildir.

  • wp_posts – wp_posts, gönderiler ve bunlarla ilişkili veriler hakkındaki tüm verileri içerir. Bu tablo çok yoğun bir şekilde kullanılır ve bir sitenin tüm içeriğini içerir.

  • wp_terms – Bu tablo, gönderilerin sınıflandırıldığı etiketler ve kategoriler gibi içeriği saklar.

  • wp_term_relationships – Bu tablo, gönderiler ve bunlarla ilişkili kategoriler ve etiketler arasındaki ilişkileri korumaktan sorumludur. Burada da kurulmuş bir MySQL ilişkisi var: tablo aslında wp_term_taxonomy tablosu aracılığıyla hem gönderilere hem de terimlere bağlı.

  • wp_term_taxonomy – Bu, gönderilerle ne tür taksonomilerin ilişkilendirildiğini takip eder. wp_terms'in yanı sıra wp_term_relationships'e geri bağlanır ve yalnızca kategoriler, etiketler vb. ile olan ilişkileri kaydeder.

  • wp_usermeta – Başka bir meta tablo olan wp_usermeta, wp_users ile ilişkili isteğe bağlı meta verileri işler.

  • wp_users – wp_users, kullanıcı adları, yönetici hakları ve şifreli parolalar gibi bilgiler de dahil olmak üzere WordPress kullanıcılarıyla ilgili tüm verileri içerir.

MySQL ilk başta korkutucu görünebilir, ancak WordPress ile tablolar yalnızca çok anlamlı olmakla kalmayıp aynı zamanda hız ve verimliliği de artıracak şekilde düzenlenir. Bir dahaki sefere bir WordPress sitesinde çalışırken, siteye güç sağlayan MySQL veritabanının yapısını düşünün. Sitenin veritabanının kapsamlı bir şekilde anlaşılması, sitenizin güvenli, kaya gibi sağlam ve son derece verimli olduğundan emin olabilir.