Bab 5: Database dan Pengelolaannya
5.1. SQL: MySQL, PostgreSQL, SQLite
Apa itu SQL?
SQL (Structured Query Language) adalah bahasa yang digunakan untuk mengelola dan memanipulasi data dalam database relasional.
Database | Kelebihan | Kekurangan |
---|---|---|
MySQL | Populer, performa tinggi, open-source | Beberapa fitur lanjutan memerlukan lisensi |
PostgreSQL | Mendukung fitur kompleks seperti JSONB | Performa awal sedikit lebih lambat |
SQLite | Ringan, tanpa server, cocok untuk aplikasi kecil | Tidak ideal untuk aplikasi skala besar |
Contoh Query Dasar SQL: |
-
Create Table:
CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), email VARCHAR(100) );
-
Insert Data:
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
-
Select Data:
SELECT * FROM users;
5.2. NoSQL: MongoDB, Redis, Firebase
Apa itu NoSQL?
NoSQL adalah jenis database yang tidak menggunakan tabel relasional. Cocok untuk data yang tidak terstruktur atau aplikasi yang membutuhkan skalabilitas tinggi.
Database | Ciri Utama | Penggunaan Umum |
---|---|---|
MongoDB | Berbasis dokumen (JSON-like) | Aplikasi web dan mobile |
Redis | Key-value store di memori | Cache, real-time analytics |
Firebase | Database real-time berbasis cloud | Aplikasi mobile dengan sinkronisasi data |
Contoh Query MongoDB: |
-
Insert Data:
db.users.insertOne({ name: "Jane Doe", email: "jane@example.com" });
-
Select Data:
db.users.find({ name: "Jane Doe" });
5.3. ORM Tools: Sequelize, Mongoose, Eloquent
Apa itu ORM?
ORM (Object-Relational Mapping) adalah alat yang memungkinkan pengembang untuk berinteraksi dengan database menggunakan bahasa pemrograman, bukan SQL.
ORM | Bahasa | Database |
---|---|---|
Sequelize | JavaScript | MySQL, PostgreSQL, SQLite |
Mongoose | JavaScript | MongoDB |
Eloquent | PHP (Laravel) | MySQL, PostgreSQL, SQLite |
Contoh Sequelize (Node.js):
-
Define Model:
const { Sequelize, DataTypes } = require("sequelize"); const sequelize = new Sequelize("sqlite::memory:"); const User = sequelize.define("User", { name: DataTypes.STRING, email: DataTypes.STRING, });
-
CRUD dengan Sequelize:
await User.create({ name: "John Doe", email: "john@example.com" }); const users = await User.findAll();
5.4. Optimasi Query dan Indexing
Optimasi Query
-
Hindari Query Berulang: Gabungkan beberapa query menjadi satu jika memungkinkan.
-
Gunakan Limit: Hindari mengambil semua data sekaligus.
SELECT * FROM users LIMIT 10;
-
Gunakan Alias: Mempermudah pembacaan query kompleks.
SELECT u.name AS user_name FROM users u;
Indexing
Indexing mempercepat pencarian data dalam tabel besar.
-
Create Index:
CREATE INDEX idx_email ON users(email);
-
Jenis Index:
- Primary Index: Dibuat otomatis pada primary key.
- Unique Index: Memastikan tidak ada data duplikat.
- Composite Index: Index pada beberapa kolom.
Penggunaan Index yang Efisien
-
Gunakan index pada kolom yang sering digunakan dalam WHERE atau JOIN.
-
Hindari membuat terlalu banyak index karena dapat memperlambat proses insert atau update.
5.5. Backup dan Recovery Data
Mengapa Backup Penting?
- Untuk mencegah kehilangan data akibat kegagalan sistem, kerusakan perangkat keras, atau serangan cyber.
Metode Backup
-
Full Backup: Mencadangkan seluruh data.
-
Incremental Backup: Mencadangkan data yang berubah sejak backup terakhir.
-
Differential Backup: Mencadangkan data yang berubah sejak full backup terakhir.
Contoh Backup MySQL:
-
Backup:
mysqldump -u root -p database_name > backup.sql
-
Restore:
mysql -u root -p database_name < backup.sql
Strategi Recovery
-
Simpan backup di lokasi yang aman, seperti cloud storage atau perangkat eksternal.
-
Uji proses recovery secara berkala untuk memastikan data dapat dipulihkan dengan benar.
Kesimpulan:
Bab ini membahas berbagai jenis database, alat ORM, teknik optimasi query, dan strategi backup. Memahami dasar-dasar ini penting untuk memastikan pengelolaan data yang efisien, performa tinggi, dan keamanan data dalam pengembangan aplikasi backend.