- Kullanım
- Tek bir veri dosyası ve aynı anda tek bir yazıcısı olan uygulamalar ve araçlar
- Ayarladığımız
journal_mode=WAL- Yedekler
- Dosyanın çevrimiçi bir kopyası; kullanımdaki bir dosyanın kopyası asla değil
Veritabanları
Bir sitenin hızlı ya da yavaş olduğu yer: veritabanı.
Uygulamanızın arkasındaki veritabanını kuruyor, ayarlıyor, çoğaltıyor ve yedekliyoruz; yedekleri de geri yükleyerek kanıtlıyoruz.
Tek bir şema olarak çizilmiş yedi motor
Her kutu, kurduğumuz, ayarladığımız ve yedeklediğimiz bir veritabanıdır. Çizgiler, işlettiğimiz sistemlerde birlikte nasıl çalıştıklarını gösterir - çoğu uygulama bunlardan bir tanesine değil, iki ya da üçüne ihtiyaç duyar.
- Kullanım
- Mağazalar, WordPress ve çoğu PHP uygulaması
- Ayarladığımız
innodb_buffer_pool_size- Yedekler
- Tam yedekler ve ikili günlükler, herhangi bir ana kadar
- Kullanım
- Önbellek, oturumlar, kuyruklar ve sayaçlar
- Ayarladığımız
maxmemory-policy- Yedekler
- Anlık görüntüler ve append-only dosya
- Kullanım
- Muhasebe, ERP, raporlar ve karmaşık sorgular
- Ayarladığımız
shared_buffers · work_mem- Yedekler
- Temel yedekler ve arşivlenmiş WAL, herhangi bir ana kadar
- Kullanım
- MySQL ile aynı işler, ayrıca Galera kümeleri
- Ayarladığımız
innodb_buffer_pool_size- Yedekler
- mariabackup ve ikili günlükler, herhangi bir ana kadar
- Kullanım
- Ürünler ve makaleler arasında arama, filtreler, günlükler
- Ayarladığımız
JVM heap · shards- Yedekler
- Anlık görüntüler; indeks ana veritabanından yeniden oluşturulabilir
- Kullanım
- Yapısı sürekli değişen kayıtlar: olaylar, kataloglar, içerik
- Ayarladığımız
wiredTiger cacheSizeGB- Yedekler
- Belirli bir an için oplog ile bir replica set
- 1Bir uygulama tek dosyaya sığmaz olduğunda bir veritabanı sunucusuna taşınır.
- 2MariaDB, MySQL'in bir çatalı olarak başladı; çoğu uygulama ikisi arasında değişiklik olmadan geçer.
- 3Redis önde durur: tekrarlanan yanıtlar ve oturumlar bellekte kalır.
- 4PostgreSQL uygulamalarının önünde aynı önbellek.
- 5Arama indeksi ana veritabanından beslenir, asla tersi değil.
- 6PostgreSQL'in JSONB özelliği, MongoDB gerekmeden önce birçok belge işini karşılar.
Hangi iş için hangi veritabanı
Kararı genellikle uygulama verir ve biz ona uyarız. Seçimin açık olduğu yerde şöyle seçeriz.
| İş | İlk tercihimiz | Bu da olur | Neden |
|---|---|---|---|
| Bir mağaza, bir WordPress sitesi veya bir PHP uygulaması | MySQL · MariaDB | PostgreSQL | Uygulamanın üzerinde geliştirilip test edildiği ve en geniş desteğe sahip olan. |
| Yoğun birleştirmeli muhasebe, ERP ve raporlar | PostgreSQL | MySQL 8 | Katı işlemler, pencere fonksiyonları ve karmaşık sorgular için yapılmış bir planlayıcı. |
| Önbellek, oturumlar, kuyruklar ve hız sınırları | Redis | Memcached | Bellekten yanıtlar. Orada yalnızca kaybolursa yeniden oluşturulabilecek olanı tutun. |
| Ürünler veya makaleler arasında arama | OpenSearch · Elasticsearch | MySQL · PostgreSQL full-text | Bir LIKE sorgusunun veremeyeceği alaka, yazım hataları, filtreler ve fasetler. Küçük bir katalog için veritabanının kendi tam metin araması yeterlidir. |
| Bir mobil uygulama, bir masaüstü aracı veya küçük bir iç hizmet | SQLite | —Başka seçenek yok | Çalıştırılacak sunucu yok: tek bir dosya, güvenli şekilde kopyalanarak yedeklenir. |
| Yapısı sürekli değişen olaylar, günlükler veya kayıtlar | MongoDB | PostgreSQL JSONB | Esnek belgeler; birleştirme ve işlem de gerektiğinde PostgreSQL. |
| Tek sunucuya sığmayan okumalar | MySQL · MariaDB · PostgreSQL replicas | —Başka seçenek yok | Okumalar replikalara dağılır, yazmalar tek bir birincilde kalır. |
Bulunan ve düzeltilen tek bir yavaş sorgu
Yavaş sayfaların çoğunun arkasında tek bir sorgu vardır. Yavaş sorgu günlüğü onu adıyla gösterir, EXPLAIN neden yavaş olduğunu gösterir ve çoğu zaman tek bir indeks çözümün tamamıdır.
SELECT id, total, created_at
FROM orders
WHERE customer_id = 4821
ORDER BY created_at DESC
LIMIT 20;
Önce
- type
- ALL
- key
- NULL
- Extra
- Using where; Using filesort
Tablonun her satırını okur, sonra bulduğunu sıralar.
Çözüm: tek bir indeks
ALTER TABLE orders
ADD INDEX idx_customer_created (customer_id, created_at);
Sonra
- type
- ref
- key
- idx_customer_created
- Extra
- Backward index scan
Yalnızca bu müşterinin satırlarını, zaten sıralı olarak okur.
Bir yedek, geri yüklendiğinde sayılır
Tek başına gece alınan bir kopya o günü kaybettirir. Değişiklik günlüğü de saklandığında veritabanını bir hatadan önceki saniyeye geri getirebiliriz.
00:00
Buraya kadar geri yüklendi14:31:59
WHERE olmadan bir DELETE14:32:00
- Son tam yedeği geri yükleyin
Ayrı bir sunucuda; böylece biz çalışırken canlı veritabanı olduğu gibi kalır.
- Günlüğü hatadan önceki ana kadar yeniden oynatın
MySQL ve MariaDB için ikili günlükler, PostgreSQL için arşivlenmiş WAL, MongoDB için oplog.
- Kontrol edin, sonra veriyi geri getirin
Ya kaybolan satırlar geri kopyalanır ya da geri yüklenen kopya devralır - karar sizindir ve fark önünüzdedir.
Belirli bir ana geri dönüş motora bağlıdır:
- MySQL · MariaDB · PostgreSQL · MongoDBgünlüğün kapsadığı herhangi bir saniyeye
- Redisappend-only dosyadaki son yazmaya kadar
- SQLitedosyanın son kopyasına kadar
- OpenSearch · Elasticsearchson anlık görüntüye kadar, sonra kaynaktan yeniden oluşturulur
Geri yükleme testleri sizinle kararlaştırdığımız bakımın parçasıdır: ayrı bir sunucuya, belirli bir takvimle, her sonuç kayda geçirilerek. Kimsenin geri yüklemediği bir yedek bir umuttur, yedek değil.
İşin geri kalanı
Bir veritabanının kurulduğu günden yükseltildiği güne kadar ihtiyaç duydukları ve her adımın dokunduğu ayarlar.
-
Kurulum ve boyutlandırma
Uygulamanızın desteklediği sürüm, üreticinin kendi deposundan. Başka bir şey ayarlanmadan önce bellek veritabanı, uygulama ve sistem arasında paylaştırılır.
innodb_buffer_pool_size · shared_buffers · maxmemory · -Xmx -
İndeksler ve yavaş sorgular
Yavaş sorgu günlüğü okunur, en kötü sorgular açıklanır ve indeksler gerekçesi kaydedilerek eklenir ya da kaldırılır.
slow_query_log · pg_stat_statements · EXPLAIN ANALYZE -
Replikasyon
Birinciyi izleyen ikinci bir kopya; okumaları dağıtmak ve birincil sunucu arızalandığında devralmak için.
GTID · Galera · streaming replication · replica set -
Güvenlik
Yalnızca özel ağda dinleme, her uygulama için yalnızca ihtiyaç duyduğu yetkilere sahip bir kullanıcı ve trafiğin sunucudan çıktığı her yerde şifreli bağlantılar.
bind-address · TLS · GRANT · SCRAM · ACL -
İzleme
Bağlantılar, replikasyon gecikmesi, disk alanı ve yavaş sorgular; bir sınıra ulaşıldıktan sonra değil, önce uyarı ile.
max_connections · Seconds_Behind_Source · pg_stat_replication -
Yükseltmeler
Önce bir kopya üzerinde prova edilir, replikalar birincilden önce yükseltilir ve başlamadan önce geri dönüş yolu yazılır.
pg_upgrade · mariadb-upgrade · rolling restart

Veritabanınızın ne yaptığını bize anlatın
Hangi motor, ne büyüklükte, nerede çalışıyor ve sizi ne endişelendiriyor. Önce bakarız, sonra bir görüşmenin ardından kurulum ya da bakım için teklif veririz.