Sebelum saya mengajukan pertanyaan, izinkan saya menjelaskan pikiran saya tentang SQLite terlebih dahulu.
Saya kebetulan menyukai alat yang kecil, cepat dan, yang lebih penting, hanya memiliki fungsi yang benar-benar diperlukan. Itu sebabnya saya suka SQLite dan saya kurang suka MS-SQL.
Sebagai contoh: MS-SQL mungkin memiliki lebih banyak fungsionalitas, skalabilitas, dll., Tetapi juga dapat merepotkan jika Anda tidak beruntung. Tentu saja, saya tidak mengatakan bahwa instalasi yang sulit adalah alasan untuk tidak memilih database tertentu.
Jangan salah paham: MS-SQL adalah produk berkualitas baik. Saya sangat berpengalaman dengan MS-SQL; Saya memahami produk dengan sangat baik sebagai seorang profesional. Saya hanya lebih suka kurang dalam beberapa keadaan di mana itu tidak terlalu dibutuhkan (= tidak banyak pengguna, <10-15).
Seberapa banyak fungsi basis data yang Anda gunakan? Dalam pengalaman saya, seringkali hanya SQL biasa (SELECT, INSERT, dan UPDATE).
Saya suka SQLite. Sangat cepat menarik. Sangat mudah untuk "menginstal". Saya pikir SQLite dapat melakukan lebih dari yang diklaim dapat dilakukannya. Mengapa hanya menggunakannya untuk aplikasi satu proses / satu pengguna? Lagi pula: tidak banyak aplikasi yang secara konstan mengakses database.
Misalnya: pertimbangkan aplikasi ERP dengan, katakanlah, 15 pengguna. Mengapa SQLite tidak bisa digunakan untuk itu? Mari kita hadapi itu: dalam pengalaman profesional saya sebagian besar waktu pengguna aplikasi semacam ini akan mengakses database sekitar 5-10% dari total waktu mereka menggunakan aplikasi. Di 90-95% lainnya mereka hanya menonton informasi di layar, memasukkan data dalam kotak / formulir dan ketika mereka menyimpan input mereka yang tidak lebih dari 1 detik waktu database. Fe: 1,5 menit waktu input vs. 1 detik menghemat waktu.
Jika file database SQLite terkunci selama "menghemat waktu" pengguna lain yang perlu mengakses database hanya menunggu, tetapi mereka tidak menyadari bahwa karena waktu tunggu akan sangat kecil (tidak terlihat). Dalam kode Anda hanya perlu berurusan dengan waktu yang mungkin "sibuk" dari database, untuk menghindari pengecualian, tetapi itu tidak sulit untuk dilakukan.
Beberapa pria, yang harus berpikir sama seperti saya, bahkan telah membangun solusi client-server untuk SQLite: SQLitening . Ini membuat saya lebih yakin bahwa saya mungkin tidak membodohi diri sendiri.
Tentu saja ada aplikasi intensif basis data di mana SQLite tidak cocok. Tapi seperti yang saya pikirkan sekarang, banyak aplikasi multi-pengguna, jika mereka tidak melebihi 15 pengguna atau lebih, seharusnya cukup baik dengan SQLite.
Banyak pelanggan kami tidak menghabiskan banyak uang untuk perangkat keras, jadi saya sering menemukan satu-satunya server dengan semua yang ada di dalamnya (Exchange, SQL (s), klien, dll.) Dan karena itu hampir "kehabisan napas". Jika saya bisa mengirimkan produk yang tidak memiliki persyaratan sistem tinggi, maka pelanggan saya akan senang. SQLite tidak menambah bobot (setidaknya tidak banyak), MS-SQL. Jadi saya tidak akan memilih SQLite karena gratis, murah, atau mudah dipasang. Saya akan memilihnya karena alasan praktis / teknis.
FYI: Dalam profesi saya, kami menjual produk (adat dan standar, sebagian besar terkait dengan ERP) kepada pelanggan di mana, rata-rata, tidak lebih dari 5-6 orang akan menggunakan produk tersebut. Ada beberapa pengecualian, tetapi tidak lebih dari 10-15 pengguna.
Pertanyaannya adalah: Apakah saya benar dalam berpikir bahwa saya dapat menggunakan SQLite untuk beberapa aplikasi multi-user seperti contoh yang saya jelaskan? Apakah ada kelemahan teknis yang harus saya ketahui? Apa pengalaman Anda (negatif atau positif) yang akan membantu saya membuat pilihan yang tepat?
Pembaruan: Tolong jangan melihat ini sebagai penilaian negatif dari database lain. Mereka kebanyakan adalah produk-produk bagus. Cukup bagikan pemikiran saya di sini dan tertarik dengan pendapat Anda tentang ini.
Jawaban:
Ada banyak contoh di mana SQLite banyak. Pengguna, departemen, atau perusahaan jarang melebihi itu (Kami tidak mendengar sebanyak itu karena tidak ada yang memanggil seorang programmer jika aplikasi berfungsi dengan baik.) Anda bisa membuat argumen yang sama untuk file MS Access (Windows) atau SQL Server Compact Edition (diperlukan beberapa instalasi). Semuanya cukup baik untuk aplikasi lokal karena Anda tidak perlu khawatir tentang keamanan file.
Dalam scenerio multi-pengguna pada jaringan lokal, file tersebut akan menuju folder bersama yang akan membutuhkan akses oleh semua pengguna - sebut keamanan. Perawatan sederhana atau perubahan struktur tabel seperti cadangan atau menambah kolom akan mencegah pengguna lain mengakses. Tadi malam cadangan tidak berfungsi karena seseorang lupa untuk keluar dari aplikasi. Apa yang terjadi ketika Anda ingin melakukan pencadangan di tengah hari? Semua orang merasionalisasi bahwa mereka tidak memerlukan cadangan pada siang hari karena keterbatasan teknis dari basis data mereka. Pada titik tertentu, menginstal SQL Server Express / setara lainnya di server Anda akan mengambil beberapa pengaturan awal dan konfigurasi keamanan, lebih terlibat di muka, tetapi sedikit pemeliharaan akan diperlukan.
Selalu ada kekhawatiran untuk skalabilitas / rekayasa berlebihan. Sekalipun jumlah pengguna atau jumlah data masih dapat dikelola, seseorang selalu memiliki ide untuk memanfaatkan data langsung pada beberapa intranet atau antarmuka situs web / browser lainnya. Database file menimbulkan masalah. Hanya diperlukan satu orang yang ingin mengakses file data melalui VPN (aplikasi diinstal pada laptop mereka) untuk memberi Anda masalah 'penskalaan'. Anda dapat membangun aplikasi untuk memungkinkan pengguna terputus yang dapat melakukan sinkronisasi ketika mereka kembali. Kelihatannya tidak sepadan untuk pengguna sesekali yang keluar dari kantor.
sumber
Saya pikir ini bagus untuk digunakan ketika Anda membutuhkan database "internal". Yaitu, basis data aplikasi / kode Anda akan berinteraksi tetapi itu tidak akan secara langsung terkait dengan alasan utama aplikasi Anda ada. Alih-alih menggunakan pemetaan dalam memori yang sangat besar, atau pengelola cache, Anda dapat menggunakan database seperti itu misalnya. Saya punya contoh yang sangat konkret tentang ini, karena saya baru-baru ini menggunakannya dalam kasus uji JUnit / DBunit di mana saya perlu terhubung ke database, melakukan beberapa pekerjaan, membaca data, dan menghapus semuanya pada akhirnya. Karena Anda hanya perlu membuat file kosong untuk membuat database , itu cukup mudah dilakukan.
Penggunaan lain yang saya lihat: ketika Anda hanya memiliki satu pengguna. Ya, itu mungkin, pikirkan "Firefox" atau "Opera" misalnya :-)
Juga, di situs web SQLite mereka sangat jujur tentang hal itu dan memberikan alasan kapan untuk TIDAK MENGGUNAKANNYA (lihat paragraf "Situasi di mana RDBMS Lain Dapat Bekerja Lebih Baik")
ps: terkait dengan komentar di Sql Server Express, ya itu perlu "diinstal". Dan saya mengalami beberapa masalah memperbarui secara pribadi (saya harus secara manual menghapus beberapa kunci registri yang terkait dengan versi sebelumnya agar dapat menginstal 2008 R2). Namun, jika Anda ingin membandingkan SQLite dengan database yang dikembangkan oleh Microsoft, lihat Sql Server Compact Edition , yang tidak perlu Anda instal (lihat "penyebaran berbasis file pribadi").
sumber
Sangat sedikit aplikasi yang memiliki beberapa pengguna selamanya. Dan untuk apa pun yang melihat lebih banyak pengguna, dan manipulasi data yang lebih kompleks, menggunakan SQLite benar-benar keluar dari pertanyaan karena alasan kinerja karena model penguncian "satu transaksi pada satu waktu" yang sederhana.
Katakanlah Anda memiliki 100 pengguna, masing-masing bekerja selama 60 detik mengisi formulir dan kemudian mengirimkannya. Jadi, Anda perlu memproses sekitar 1,6 transaksi per detik. Model data rumit dan menyimpan formulir melibatkan membaca dari dan menulis ke banyak tabel besar, bahkan mungkin berkomunikasi dengan sistem yang berbeda, sehingga setiap "mengirimkan formulir" menghasilkan transaksi yang membutuhkan waktu 2 detik. Tetapi SQLite tidak dapat memproses transaksi secara bersamaan, jadi ini berarti ia hanya dapat memproses 0,5 transaksi per scond. Ups.
"Dapat merepotkan untuk dipasang" bukanlah alasan yang baik untuk memutuskan menentang infrastruktur yang kritis. Selain itu, ada mesin DB lain untuk dipilih, setidaknya dua di antaranya (MySQL dan Postgres) gratis dan tidak memiliki batasan konkurensi dari SQLite. Mereka bahkan mungkin lebih mudah untuk menginstal daripada MS-SQL.
sumber
Saya pikir SQLLite sangat baik untuk pengembangan aplikasi, kekuatan terbesarnya adalah tidak perlu diinstal pada klien.
Namun, jangan meremehkan SQL Server Express juga, ini adalah basis data yang sangat baik gratis dengan sebagian besar fitur server sql biasa dengan hanya batasan dalam ukuran basis data (yang sulit untuk dilampaui) bersama dengan kemampuan untuk menggunakan alat yang sangat baik dari normal sql server.
Ini kerugian terbesar afaik adalah bahwa Anda perlu menginstalnya, saya sedikit tidak yakin bagian itu, mungkin ada jalan keluar sekarang
sumber
Saya tidak menganggap SQLite sebagai database serius jika Anda berurusan dengan beberapa GB data setiap jam. Itu menjadi sangat lambat dan menurunkan kinerja seluruh Aplikasi. Maaf, tapi saya tidak setuju dengan ketertarikan Anda pada SQLite :-)
sumber
Masalah dengan database adalah bahwa mereka cenderung mengakumulasi semakin banyak data. Memilih DB yang ringan menimbulkan risiko bahwa alat Anda tidak akan menskala dengan baik.
sumber