- Untuk
- Aplikasi dan alat dengan satu file data dan satu penulis dalam satu waktu
- Kami setel
journal_mode=WAL- Cadangan
- Salinan online dari file, tidak pernah salinan file yang sedang dipakai
Database
Di mana situs menjadi cepat atau lambat: di database-nya.
Kami memasang, menyetel, mereplikasi, dan mencadangkan database di balik aplikasi Anda, dan kami membuktikan cadangannya dengan memulihkannya.
Tujuh mesin, digambar sebagai satu skema
Setiap kotak adalah database yang kami pasang, setel, dan cadangkan. Garis-garisnya menunjukkan cara mereka bekerja sama dalam sistem yang kami jalankan - sebagian besar aplikasi membutuhkan dua atau tiga, bukan satu.
- Untuk
- Toko, WordPress, dan sebagian besar aplikasi PHP
- Kami setel
innodb_buffer_pool_size- Cadangan
- Cadangan penuh ditambah binary log, ke titik waktu mana pun
- Untuk
- Cache, sesi, antrean, dan penghitung
- Kami setel
maxmemory-policy- Cadangan
- Snapshot dan file append-only
- Untuk
- Akuntansi, ERP, laporan, dan query kompleks
- Kami setel
shared_buffers · work_mem- Cadangan
- Cadangan dasar ditambah WAL yang diarsipkan, ke titik waktu mana pun
- Untuk
- Pekerjaan yang sama dengan MySQL, ditambah cluster Galera
- Kami setel
innodb_buffer_pool_size- Cadangan
- mariabackup ditambah binary log, ke titik waktu mana pun
- Untuk
- Pencarian di seluruh produk dan artikel, filter, log
- Kami setel
JVM heap · shards- Cadangan
- Snapshot; indeks dapat dibangun ulang dari database utama
- Untuk
- Data yang bentuknya terus berubah: event, katalog, konten
- Kami setel
wiredTiger cacheSizeGB- Cadangan
- Replica set, dengan oplog untuk titik waktu tertentu
- 1Ketika aplikasi sudah terlalu besar untuk satu file, ia pindah ke server database.
- 2MariaDB berawal sebagai fork dari MySQL; sebagian besar aplikasi bisa berpindah di antara keduanya tanpa perubahan.
- 3Redis berada di depan: jawaban berulang dan sesi tetap di memori.
- 4Cache yang sama di depan aplikasi PostgreSQL.
- 5Indeks pencarian diisi dari database utama, tidak pernah sebaliknya.
- 6JSONB di PostgreSQL menangani banyak pekerjaan dokumen sebelum MongoDB dibutuhkan.
Database mana untuk pekerjaan apa
Biasanya aplikasi yang menentukan, dan kami mengikutinya. Jika pilihannya terbuka, beginilah cara kami memilih.
| Pekerjaan | Pilihan pertama kami | Juga bisa | Alasan |
|---|---|---|---|
| Toko, situs WordPress, atau aplikasi PHP | MySQL · MariaDB | PostgreSQL | Tempat aplikasi dibangun dan diuji, dengan dukungan paling luas. |
| Akuntansi, ERP, dan laporan dengan banyak join | PostgreSQL | MySQL 8 | Transaksi yang ketat, window function, dan planner yang dibuat untuk query kompleks. |
| Cache, sesi, antrean, dan pembatasan laju | Redis | Memcached | Jawaban dari memori. Simpan di sana hanya yang bisa dibangun ulang jika hilang. |
| Pencarian di seluruh produk atau artikel | OpenSearch · Elasticsearch | MySQL · PostgreSQL full-text | Relevansi, salah ketik, filter, dan facet yang tidak bisa diberikan query LIKE. Untuk katalog kecil, pencarian full-text bawaan database sudah cukup. |
| Aplikasi mobile, alat desktop, atau layanan internal kecil | SQLite | —Tidak ada yang lain | Tanpa server yang perlu dijalankan: satu file, dicadangkan dengan menyalinnya secara aman. |
| Event, log, atau data yang bentuknya terus berubah | MongoDB | PostgreSQL JSONB | Dokumen yang fleksibel; PostgreSQL bila juga membutuhkan join dan transaksi. |
| Beban baca yang melampaui satu server | MySQL · MariaDB · PostgreSQL replicas | —Tidak ada yang lain | Beban baca disebar ke replika sementara penulisan tetap di satu server utama. |
Satu query lambat, ditemukan dan diperbaiki
Sebagian besar halaman lambat disebabkan satu query. Slow query log menyebutkannya, EXPLAIN menunjukkan mengapa ia lambat, dan satu indeks sering kali menjadi seluruh perbaikannya.
SELECT id, total, created_at
FROM orders
WHERE customer_id = 4821
ORDER BY created_at DESC
LIMIT 20;
Sebelum
- type
- ALL
- key
- NULL
- Extra
- Using where; Using filesort
Membaca setiap baris tabel, lalu mengurutkan yang ditemukan.
Perbaikannya: satu indeks
ALTER TABLE orders
ADD INDEX idx_customer_created (customer_id, created_at);
Sesudah
- type
- ref
- key
- idx_customer_created
- Extra
- Backward index scan
Hanya membaca baris milik pelanggan ini, sudah berurutan.
Cadangan baru berarti setelah dipulihkan
Salinan malam saja akan kehilangan satu hari. Dengan menyimpan juga log perubahan, kami dapat mengembalikan database ke detik sebelum sebuah kesalahan.
00:00
Dipulihkan sampai sini14:31:59
DELETE tanpa WHERE14:32:00
- Pulihkan cadangan penuh terakhir
Di server terpisah, sehingga database produksi tetap seperti apa adanya selama kami bekerja.
- Putar ulang log sampai sesaat sebelumnya
Binary log untuk MySQL dan MariaDB, WAL yang diarsipkan untuk PostgreSQL, oplog untuk MongoDB.
- Periksa, lalu kembalikan datanya
Baris yang hilang disalin kembali, atau salinan yang dipulihkan mengambil alih - keputusan ada di tangan Anda, dengan perbedaannya di depan mata.
Pemulihan ke titik waktu tertentu bergantung pada mesinnya:
- MySQL · MariaDB · PostgreSQL · MongoDBke detik mana pun yang dicakup log
- Redissampai penulisan terakhir di file append-only
- SQLitesampai salinan terakhir file
- OpenSearch · Elasticsearchsampai snapshot terakhir, lalu dibangun ulang dari sumbernya
Uji pemulihan adalah bagian dari perawatan yang kami sepakati dengan Anda: ke server terpisah, dengan jadwal tetap, dan setiap hasilnya dicatat. Cadangan yang belum pernah dipulihkan hanyalah harapan, bukan cadangan.
Pekerjaan lainnya
Apa yang dibutuhkan database sejak hari dipasang hingga hari di-upgrade, dan pengaturan yang disentuh setiap langkah.
-
Pemasangan dan penentuan ukuran
Versi yang didukung aplikasi Anda, dari repositori resmi vendornya. Memori dibagi antara database, aplikasi, dan sistem sebelum hal lain diatur.
innodb_buffer_pool_size · shared_buffers · maxmemory · -Xmx -
Indeks dan query lambat
Slow query log dibaca, query terburuk dijelaskan, dan indeks ditambah atau dihapus dengan alasan yang dicatat.
slow_query_log · pg_stat_statements · EXPLAIN ANALYZE -
Replikasi
Salinan kedua yang mengikuti yang pertama, untuk menyebarkan beban baca dan mengambil alih saat server utama gagal.
GTID · Galera · streaming replication · replica set -
Keamanan
Hanya mendengarkan di jaringan privat, satu pengguna per aplikasi dengan hak yang dibutuhkannya saja, dan koneksi terenkripsi di mana pun lalu lintas keluar dari server.
bind-address · TLS · GRANT · SCRAM · ACL -
Pemantauan
Koneksi, jeda replikasi, ruang disk, dan query lambat, dengan peringatan sebelum batas tercapai, bukan sesudahnya.
max_connections · Seconds_Behind_Source · pg_stat_replication -
Upgrade
Dilatih dulu pada salinan, replika sebelum server utama, dan jalan kembali ditulis sebelum kami mulai.
pg_upgrade · mariadb-upgrade · rolling restart

Ceritakan apa yang sedang dilakukan database Anda
Mesin apa, seberapa besar, di mana berjalan, dan apa yang Anda khawatirkan. Kami melihatnya dulu, lalu memberi penawaran pemasangan atau perawatan setelah satu percakapan.