Saya baru-baru ini membaca Pertanyaan tentang SQLite vs MySQL ini dan jawabannya menunjukkan bahwa SQLite tidak memiliki skala yang baik dan situs resmi semacam ini menegaskan hal ini .
Bagaimana scalable adalah SQLite dan apa batas paling atas?
Saya baru-baru ini membaca Pertanyaan tentang SQLite vs MySQL ini dan jawabannya menunjukkan bahwa SQLite tidak memiliki skala yang baik dan situs resmi semacam ini menegaskan hal ini .
Bagaimana scalable adalah SQLite dan apa batas paling atas?
Jawaban:
Kemarin saya merilis situs kecil *untuk melacak perwakilan Anda yang menggunakan database SQLite bersama untuk semua pengunjung. Sayangnya, bahkan dengan beban sederhana yang diletakkan di host saya itu berjalan cukup lambat. Ini karena seluruh basis data dikunci setiap kali seseorang melihat halaman karena berisi pembaruan / sisipan. Saya segera beralih ke MySQL dan sementara saya tidak punya banyak waktu untuk mengujinya, sepertinya jauh lebih mudah dibandingkan dengan SQLite. Saya hanya ingat memuat halaman lambat dan kadang-kadang mendapatkan kesalahan terkunci basis data ketika mencoba menjalankan query dari shell di sqlite. Yang mengatakan, saya menjalankan situs lain dari SQLite dengan baik. Perbedaannya adalah bahwa situs ini statis (yaitu saya satu-satunya yang dapat mengubah database) dan itu berfungsi dengan baik untuk dibaca bersamaan. Pesan moral dalam cerita:
sunting : Saya baru menyadari bahwa saya mungkin tidak adil terhadap SQLite - saya tidak mengindeks kolom apa pun di database SQLite ketika saya menyajikannya dari halaman web. Ini sebagian menyebabkan perlambatan yang saya alami. Namun, pengamatan terhadap penguncian basis data - jika Anda memiliki pembaruan yang sangat berat, kinerja SQLite tidak akan cocok dengan MySQL atau Postgres.
suntingan lain: Sejak saya memposting ini hampir 3 bulan yang lalu saya memiliki kesempatan untuk memeriksa skalabilitas SQLite, dan dengan beberapa trik itu bisa sangat scalable. Seperti yang saya sebutkan di edit pertama saya, indeks basis data secara dramatis mengurangi waktu permintaan, tetapi ini lebih merupakan pengamatan umum tentang database daripada tentang SQLite. Namun, ada trik lain yang dapat Anda gunakan untuk mempercepat SQLite: transaksi . Setiap kali Anda harus menulis banyak database, letakkan di dalam transaksi. Alih-alih menulis untuk (dan mengunci) file masing-masing dan setiap kali kueri menulis dikeluarkan, penulisan hanya akan terjadi sekali ketika transaksi selesai.
Situs yang saya sebutkan saya rilis di paragraf pertama telah beralih kembali ke SQLite, dan itu berjalan cukup lancar setelah saya mencari kode saya di beberapa tempat.
* situs tidak lagi tersedia
Sqlite dapat diukur dalam hal pengguna tunggal, saya memiliki basis data multi-gigabyte yang berkinerja sangat baik dan saya tidak punya banyak masalah dengannya.
Tapi ini adalah pengguna tunggal, jadi itu tergantung pada skala apa yang sedang Anda bicarakan.
Menanggapi komentar. Perhatikan bahwa tidak ada yang mencegah menggunakan database Sqlite di lingkungan multi-pengguna, tetapi setiap transaksi (pada dasarnya, setiap pernyataan SQL yang memodifikasi database) mengambil kunci pada file , yang akan mencegah pengguna lain mengakses database di semua .
Jadi, jika Anda memiliki banyak modifikasi yang dilakukan pada database, Anda pada dasarnya akan mencapai masalah penskalaan dengan sangat cepat. Sebaliknya, jika Anda memiliki banyak akses baca dibandingkan akses tulis, itu mungkin tidak terlalu buruk.
Tapi tentu saja Sqlite akan berfungsi dalam lingkungan multi-pengguna, tetapi tidak akan bekerja dengan baik.
SQLite menggerakkan situs web sqlite.org dan lainnya yang memiliki banyak lalu lintas. Mereka menyarankan bahwa jika Anda memiliki kurang dari 100 ribu hit per hari, SQLite akan berfungsi dengan baik. Dan itu ditulis sebelum mereka memberikan fitur "Writeahead Logging".
Jika Anda ingin mempercepat dengan SQLite, lakukan hal berikut:
Anda mungkin ingin melihat video saya di YouTube yang disebut " Tingkatkan Kinerja SQLite dengan Writeahead Logging " yang menunjukkan cara menggunakan logging penulisan-depan dan menunjukkan peningkatan kecepatan 5x untuk menulis.
Sqlite adalah database desktop atau dalam proses . SQL Server, MySQL, Oracle, dan saudara-saudara mereka adalah server .
Database desktop pada dasarnya bukan pilihan yang baik untuk aplikasi apa pun yang perlu mendukung akses tulis bersamaan ke penyimpanan data. Ini termasuk pada tingkat tertentu sebagian besar situs web yang pernah dibuat. Jika Anda bahkan harus login untuk apa pun, Anda mungkin perlu akses tulis ke DB.
Sudahkah Anda membaca dokumen SQLite ini - http://www.sqlite.org/whentouse.html ?
SQLite biasanya akan bekerja dengan baik sebagai mesin basis data untuk situs web dengan lalu lintas rendah hingga sedang (artinya, 99,9% dari semua situs web). Jumlah lalu lintas web yang dapat ditangani oleh SQLite tergantung, tentu saja, pada seberapa banyak situs web menggunakan database-nya. Secara umum, situs apa pun yang mendapat kurang dari 100 ribu hit / hari harus berfungsi baik dengan SQLite. Angka 100 ribu / hari adalah perkiraan konservatif, bukan batas atas yang sulit. SQLite telah terbukti bekerja dengan 10 kali jumlah traffic.
Skalabilitas SQLite akan sangat tergantung pada data yang digunakan, dan formatnya. Saya memiliki pengalaman yang sulit dengan tabel ekstra panjang (catatan GPS, satu catatan per detik). Pengalaman menunjukkan bahwa SQLite akan melambat secara bertahap, sebagian karena penyeimbangan ulang terus-menerus dari pohon biner yang tumbuh yang menahan indeks (dan dengan indeks waktu, Anda hanya tahu bahwa pohon akan mendapatkan banyak penyeimbangan kembali, namun sangat penting bagi Anda pencarian). Jadi pada akhirnya sekitar 1GB (sangat kasar, saya tahu), pertanyaan menjadi lamban dalam kasus saya. Jarak tempuh Anda akan bervariasi.
Satu hal yang perlu diingat, meskipun semua membual, SQLite TIDAK dibuat untuk data warehousing. Ada berbagai kegunaan yang tidak disarankan untuk SQLite. Orang-orang baik di belakang SQLite mengatakannya sendiri:
Cara lain untuk melihat SQLite adalah ini: SQLite tidak dirancang untuk menggantikan Oracle. Ini dirancang untuk menggantikan fopen ().
Dan ini mengarah pada argumen utama (bukan kuantitatif, maaf, tapi kualitatif), SQLite tidak untuk semua penggunaan, sedangkan MySQL dapat mencakup banyak kegunaan yang beragam, bahkan jika tidak idealnya. Misalnya, Anda dapat memiliki MySQL yang menyimpan cookie Firefox (bukan SQLite), tetapi Anda akan membutuhkan layanan itu berjalan sepanjang waktu. Di sisi lain, Anda bisa membuat situs web transaksional berjalan di SQLite (seperti banyak orang), bukan MySQL, tetapi mengharapkan banyak downtime.
ATTACH DATABASE
untuk membuat koneksi database virtual dengan semua tabel (namun terbatas pada 62 basis data).
Saya berpikir bahwa (dalam angka 1) server web yang melayani hunderts klien muncul di backend dengan satu koneksi ke database, bukan?
Jadi tidak ada akses bersamaan dalam database dan oleh karena itu kita dapat mengatakan bahwa database bekerja dalam 'mode pengguna tunggal'. Tidak masuk akal untuk menghentikan akses multi-pengguna dalam keadaan seperti itu dan SQLite berfungsi serta database berbasis server lainnya.
Pikirkan seperti ini. SQL Lite akan dikunci setiap kali seseorang menggunakannya (SQLite tidak mengunci saat membaca). Jadi jika Anda menyajikan halaman web atau aplikasi yang memiliki banyak pengguna secara bersamaan, hanya satu yang dapat menggunakan aplikasi Anda sekaligus dengan SQLLite. Jadi ada masalah penskalaan. Jika aplikasi satu orang mengatakan Perpustakaan Musik di mana Anda memegang ratusan judul, peringkat, informasi, penggunaan, bermain, waktu bermain maka SQL Lite akan skala indah memegang ribuan jika tidak jutaan catatan (Hard drive bersedia)
MySQL di sisi lain bekerja dengan baik untuk aplikasi server di mana orang-orang di seluruh dunia akan menggunakannya secara bersamaan. Itu tidak mengunci dan ukurannya cukup besar. Jadi untuk perpustakaan musik Anda MySql akan lebih dari membunuh karena hanya satu orang yang akan melihatnya, KECUALI ini adalah perpustakaan musik bersama di mana ribuan menambahkan atau memperbaruinya. Maka MYSQL yang akan digunakan.
Jadi secara teori MySQL memiliki skala yang lebih baik daripada Sqllite karena dapat menangani beberapa pengguna, tetapi terlalu banyak untuk satu aplikasi pengguna.
Situs web SQLite (bagian yang Anda referensikan) menunjukkan bahwa itu dapat digunakan untuk berbagai situasi multi-pengguna.
Saya akan mengatakan bahwa itu dapat menangani sedikit. Dalam pengalaman saya selalu sangat cepat. Tentu saja, Anda perlu mengindeks tabel Anda dan ketika mengkodekannya, Anda harus memastikan bahwa Anda menggunakan kueri yang diparematisasi dan sejenisnya. Pada dasarnya hal yang sama akan Anda lakukan dengan basis data apa pun untuk meningkatkan kinerja.
Mungkin perlu memeriksa REAL SQL Server , yang merupakan server basis data yang dibangun di atas SQLite.