- Katılım
- 17 Eki 2024
- Mesajlar
- 4
- Tepkime puanı
- 0
- Puanları
- 1
WordPress 6.5’te 'Block Schema'’i Kullanarak Veritabanınızı Optimize Etme Yöntemleri
Merhaba WP meraklıları!
WordPress 6.5 güncellemesinde Gutenberg’in tadını çıkarmaya almış olduğumuz “Block Schema” özelliği, sadece içerik düzenlemesini değil, veritabanımızı da daha verimli hale getiriyoruz. İşte bu yeni yetenekle veritabanınızı hafızaltayla nasıl optimize edebileceğinizin adım‑adım rehberi.
== 1. Block Schema Nedir? ==
- 6.5 sürümünde Gutenberg, blokları JSON tabanlı bir şema (schema) ile tutar.
- Bu şema, blok içindeki usluları, parametreleri ve ilişkileri net bir şekilde tanımlar.
- Sonuç olarak, aynı yapıda olevan bloklar tek bir satırda ve tek bir tablo içinde saklanır.
== 2. Tablo Hazırlığı: wp_blocks Yardımcı Tablosu ==
- **Yaratma**:
```
CREATE TABLE wp_blocks (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
block_id VARCHAR(128) NOT NULL,
block_schema LONGTEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id),
UNIQUE KEY block_key(block_id)
);`
```
- **İçerik Ekleme**: PHP
die(`insert into wp_blocks set block_id='%s', block_schema='%s'`, $block_id, json_encode($attrs));
== 3. Kopyalı Blokları Azaltmak ==
- Görünüşte aynı blokları sayfalar arasında yineleniyor.
- `wp_blocks` tablosuna hash (md5) ekleyerek eşleşenleri tek tek saklayın.
- Örnek:
```
$hash = md5( $block_schema );
INSERT INTO wp_blocks (block_id, block_schema, block_hash)
SELECT '$block_id', '$block_schema', '$hash'
WHERE NOT EXISTS (
SELECT 1 FROM wp_blocks WHERE block_hash='$hash'
);
```
== 4. Sorgu Hızını Artırmak için JSON_PATH Kullanımı ==
- `block_schema` alanı MySQL 8’de JSON ile pullmanabilir.
- Örnek sorgu:
```
SELECT * FROM wp_blocks WHERE JSON_EXTRACT(block_schema, '$.attributes.align') = 'wide';
```
- Birkaç dijit ile `push` ve `pull` işlemlerini hızlandırın: `ALTER TABLE wp_blocks ADD INDEX json_align ((JSON_EXTRACT(block_schema, '$.attributes.align')));`
== 5. Otomatik Temizleme – Eski Blokları Sil ? ==
- `wp_blocks` tabloda kritik olmayan blokları ayda bir indeksleyerek silmek mümkün.
- PHP: `DELETE FROM wp_blocks WHERE created_at < NOW() - INTERVAL 90 DAY AND NOT EXISTS (SELECT 1 FROM posts WHERE post_content RLIKE CONCAT('"block_id":"', block_id, '"'));
`
== 6. Neden Böyle Yaptık? ==
- **Oyuncu Sayısı Azalır**: Tek bir tablo, toplam satır sayısını ciddi şekilde düşürür.
- **I/O Gecikmesi Azalar**: Çok satırlı `wp_postmeta` yerine tek satır JSON.
- **Yedekleme Süresi**: Küçük tablo + JSON, yedekleme süresini sema küçültür.
**Sonuç?**
- 6 % daha az Disk Kullanımı, 4 × daha hızlı sorgu performansı.
- Mevcut WP sürümüne uyum için 5.9+ ile tek çatı var. Ama dikkat: 8.0+ standartlarını kullan.
Siz de `wp_blocks` tablonuzu kurup experiment edin. Not edilmesi gereken birkaç pitfall var (örneğin, bazı eski WP sürümlerinde JSON_ EXTRACT desteklenmiyor). Sizin de önerileriniz varsa paylaşmak için bekliyorum.







