- Struktur penulis tunggal dan sifat embedded SQLite terbukti lewat eksperimen justru menjadi faktor yang meningkatkan skalabilitas dan performa
- Dalam kondisi yang sama, Postgres turun hingga 348 TPS saat ada latensi jaringan, sedangkan SQLite mencapai 44.096 TPS setelah jaringan dihilangkan
- Dengan memanfaatkan model penulis tunggal melalui pemrosesan batch dan transaksi terperinci berbasis SAVEPOINT, tercatat hingga 186.157 TPS, dan 102.545 TPS pada konfigurasi yang stabil
- Hukum Amdahl menjelaskan bottleneck pada database berbasis jaringan, dan SQLite mempertahankan efisiensi tinggi dengan menghindarinya
- Hasil ini menekankan potensi penggunaan SQLite di lingkungan lokal dan pentingnya menghilangkan bottleneck jaringan
Struktur SQLite dan lingkungan eksperimen
- SQLite tidak memiliki MVCC dan hanya mengizinkan satu penulis, tetapi struktur ini justru memungkinkan skalabilitas yang tinggi
- Sebagai database embedded, tidak ada overhead jaringan
- Benchmark dijalankan pada MacBook Pro (2021) dengan Apple M1 Pro dan memori 16GB
- Eksperimen ini bukan ditujukan untuk optimasi sempurna, melainkan untuk menunjukkan bahwa throughput tulis yang tinggi dapat dicapai bahkan dalam kondisi umum
Definisi TPS dan contoh transaksi
- TPS bukan sekadar kecepatan tulis, melainkan transaksi interaktif (Interactive Transaction)
- Contoh: saat mentransfer dana antar rekening, beberapa query dan kode aplikasi dijalankan dalam satu transaksi
- Transaksi dapat melakukan rollback saat terjadi kesalahan, sehingga berperan penting dalam menjaga konsistensi
Konfigurasi benchmark
- Menggunakan virtual threads berbasis Clojure untuk mensimulasikan permintaan serentak dalam skala besar
- Postgres dikonfigurasi dengan connection pool berbasis HikariCP, sedangkan SQLite menggunakan satu penulis dan koneksi baca sebanyak jumlah core
- Kedua database menggunakan tabel
account sederhana dengan field id, balance, dan memasukkan 1 miliar baris
- Aktivitas pengguna mengikuti distribusi hukum pangkat (0,9995), dengan sekitar 100 ribu pengguna aktif
Kinerja database jaringan (Postgres)
- Pada server yang sama, Postgres mencapai 13.756 TPS
- Saat ditambahkan latensi jaringan 5ms, performanya turun tajam menjadi 1.214 TPS, dan pada 10ms menjadi 702 TPS
- Setelah menerapkan tingkat isolasi serializable, turun menjadi 660 TPS, dan dengan query tambahan menjadi 348 TPS
- Ini menunjukkan, sesuai Hukum Amdahl, bahwa bottleneck jaringan membatasi performa keseluruhan
- Saat latensi jaringan meningkat, kompetisi lock transaksi makin parah sehingga tidak dapat diskalakan
Keunggulan embedded SQLite
- Setelah jaringan dihilangkan, SQLite mencapai 44.096 TPS
- Karena bottleneck jaringan hilang, dampak Hukum Amdahl diminimalkan
- Dengan memanfaatkan struktur penulis tunggal dan menerapkan pemrosesan batch, performa naik hingga 186.157 TPS
- Penyesuaian ukuran batch secara dinamis otomatis mengoptimalkan latency dan throughput
Transaksi terperinci dengan SAVEPOINT
- Untuk mencegah kegagalan transaksi individual di dalam batch, diterapkan transaksi bertingkat menggunakan SAVEPOINT
- Jika gagal, hanya transaksi tersebut yang di-rollback, sementara batch keseluruhan tetap dipertahankan
- Dengan cara ini, sistem tetap mempertahankan 121.922 TPS
Uji beban campuran baca/tulis
- Total permintaan terdiri dari 75% baca dan 25% tulis
- Menggunakan thread pool baca terpisah agar permintaan baca tidak mengganggu tulis
- Hasilnya, tercapai 102.545 TPS
Ringkasan perbandingan performa
| Kondisi |
Postgres |
SQLite |
| Tanpa jaringan |
13.756 |
44.096 |
| Latensi 5ms |
1.214 |
n/a |
| Latensi 10ms |
702 |
n/a |
| 10ms + serializable |
660 |
n/a |
| Pemrosesan batch |
n/a |
186.157 |
| Batch + SAVEPOINT |
n/a |
121.922 |
| Batch + SAVEPOINT + baca |
n/a |
102.545 |
Kesimpulan
- SQLite mencapai TPS yang jauh lebih tinggi dibanding database berbasis jaringan berkat model penulis tunggal dan struktur embedded
- Efisiensi dimaksimalkan dengan menghindari batas bottleneck jaringan yang dijelaskan oleh Hukum Amdahl
- Seluruh kode telah dipublikasikan di GitHub, dan materi terkait seperti Hukum Amdahl, hukum pangkat, serta contoh skalabilitas SQLite juga disertakan
- SQLite adalah pilihan yang sangat efektif untuk pemrosesan transaksi berkinerja tinggi di lingkungan lokal
Belum ada komentar.