Bukankah SQLite agak diremehkan? [Tutup]

15

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.


sumber
9
Maaf, tetapi menambahkan "Apakah saya benar?" tidak mengubah kata-kata kasar menjadi pertanyaan.
pdr
1
@ pdr: Mengapa Anda menganggap ini kata-kata kasar? Saya tidak menilai negatif MS-SQL atau database lain; mereka kebanyakan adalah produk bagus. Saya hanya berbagi pemikiran saya dan tertarik untuk mendengar pendapat sesama programmer. Tidak lebih, tidak kurang.
3
Tidak ada pertanyaan di sana, hanya pencarian validasi. Dari FAQ: "Anda seharusnya hanya mengajukan pertanyaan praktis yang dapat dijawab berdasarkan masalah aktual yang Anda hadapi. Obrolan, pertanyaan terbuka mengurangi kegunaan situs kami dan mendorong pertanyaan lain dari halaman depan." programmers.stackexchange.com/faq
pdr
1
@ pdr: Saya mengerti itu, tapi sejujurnya saya bermaksud mengajukan pertanyaan di sini. Mungkin saya tidak jelas, jadi saya ulangi pertanyaannya.
4
Pilihan basis data, optimasi kode, klien, server atau aplikasi berbasis web, ini semua adalah bidang pertimbangan dan pro dan kontra perlu dibahas pada platform seperti ini. Bagi saya kata-kata kasar lebih ketika seseorang dengan tegas menolak untuk menemukan kualitas penukaran dalam teknologi tertentu.
JeffO

Jawaban:

8

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.

JeffO
sumber
Anda bisa membuat argumen yang sama untuk SQL Server Compact Edition, tetapi tidak untuk database MS Access. Database akses diperlakukan seolah-olah mereka adalah database nyata, tetapi berfungsi lebih seperti file bersama. Mereka adalah solusi yang rapuh; SQL Server Compact sebenarnya merupakan alternatif yang lebih baik, lebih cepat, lebih dapat diandalkan yang masih bekerja dengan Access frontends. Saya menduga bahwa SQLite secara substansial lebih tahan lama daripada database Access, meskipun secara teknis solusi file bersama.
Robert Harvey
@RobertHarvey - Kami memiliki tuntutan bisnis di mana MS Access telah menjadi solusi yang cukup baik (yaitu lebih baik dari Excel) selama 10 tahun. Ketika kesepakatan besar dibuat, kita harus menjalankan sesuatu. Memberdayakan pengguna dengan keterampilan Access jauh lebih mudah ditemukan dan dimanfaatkan. Fungsionalitas harus ada di sana pada tanggal tertentu, tetapi kami beruntung bahwa skalabilitas, kinerja, pertumbuhan data, dan keamanan tidak pernah menjadi faktor. Meningkatkan Akses, sekarang cerita yang berbeda.
JeffO
Jangan salah sangka; Saya pikir Access itu hebat. Tetapi SQL Server Compact akan menjadi persyaratan backend minimum saya untuk setiap aplikasi Access baru di mana pengguna berbagi data.
Robert Harvey
@RobertHarvey - Saya harus memeriksa itu. Terima kasih
JeffO
12

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").

Jalayn
sumber
Saya melihat CE, tetapi entah bagaimana tampaknya SQLite lebih baik / lebih cepat / lebih mudah. Tidak tahu pasti, saya tidak menggunakan / menguji CE cukup untuk memastikan.
5

Misalnya: pertimbangkan aplikasi ERP dengan, katakanlah, 15 pengguna. Mengapa SQLite tidak bisa digunakan untuk itu?

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.

Michael Borgwardt
sumber
Saya mengerti dan setuju. Tetapi dalam profesi saya, saya benar-benar tidak memiliki pelanggan yang menggunakan produk kami (standar dan kebiasaan, sebagian besar terkait dengan ERP) dengan lebih dari 10 orang. Rata-rata bahkan 5-6 pengguna. Saya akan ulangi pertanyaan saya.
4
@Marcus V: Pertanyaannya adalah: jika seorang pelanggan telah tumbuh banyak dan menemukan bahwa aplikasi yang Anda buat menjadi sangat lambat untuk digunakan, dan Anda memberi tahu mereka alasannya adalah bahwa DBMS tidak dapat menangani banyak pengguna, dan mereka bertanya " mengapa Anda tidak menggunakan DBMS yang lebih baik ", bagaimana menurut Anda jawaban" sulit untuk dipasang "akan diterima? Saya dapat memberi tahu Anda apa reaksi saya: Saya pikir "ini seorang amatir. Saya perlu mencari orang lain untuk menulis perangkat lunak saya".
Michael Borgwardt
Kamu benar. Saya pikir Anda tidak bermaksud seperti itu, tetapi saya dapat meyakinkan Anda bahwa saya bukan seorang amatir. Saya pasti akan menggunakan sistem DBMS "nyata" jika situasinya akan memintanya. Produk kami dilisensikan untuk sejumlah pengguna. Saya hanya akan mengembangkan menggunakan SQLite jika saya tahu bahwa jumlah pengguna relatif kecil (<10-15). Jika pelanggan akan melebihi batas, yang dalam basis pelanggan kami tidak akan terjadi segera, kami dapat selalu relatif cepat / sederhana mengubahnya ke database lain. Itu bukan ilmu roket;). Berdasarkan komentar Anda, saya mengulangi pertanyaan itu untuk membuatnya lebih jelas.
Pengguna yang berteriak busuk tentang keluarnya aplikasi mungkin diberitahu tentang keterbatasan pengguna tetapi memilih untuk pergi ke rute yang lebih murah. Semuanya baik-baik saja pada pengaturan awal, tetapi betapa bahagianya mereka ketika Anda harus membebankan biaya lain untuk menginstal pada server baru, ketika mereka bisa saja menyalin file?
JeffO
1
@ Jeff O: Saya kira Anda salah mengerti niat saya. Saya tidak memilih SQLite karena gratis, murah dan / atau mudah dipasang. Saya akan memilihnya hanya karena kecil, cepat, dan ramah sumber daya. Jadi itu terutama untuk alasan praktis / teknis. 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, 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, MSSQL tidak.
4

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

Homde
sumber
2
Kamu benar. MS-SQL Express adalah produk berkualitas baik. Hanya saja saya merasa agak kembung dan menggunakan terlalu banyak sumber daya. Saat ini PC / server yang tidak menjadi masalah. Saya hanyalah orang tua yang masih berpikir bahwa perangkat keras yang lebih kuat tidak berarti saya harus mengabaikan / membuang sumber daya jika saya dapat menghindarinya. Lebih sedikit lebih baik ...;).
2
database dengan mesin DB dapat mengoptimalkan akses dengan menyimpannya di memori daripada membaca / menulis dari disk. Tetapi saya tidak yakin tentang kinerja untuk DB dalam proses seperti SQL Lite
sarat
1
@sarat: Afaik SQLite tidak menggunakan cache memori secara intensif.
2

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 :-)

Kutu buku
sumber
1
Saya menghargai pendapat Anda. Saya hanya orang yang praktis. Ketika saya memilih alat saya memilihnya karena saya pikir itu adalah keputusan yang paling realistis / praktis. Saya tidak tertarik dengan SQLite, tetapi kagumi cara mereka berhasil memasukkan begitu banyak dalam paket kecil, efisien dan cepat. Seperti yang saya sebutkan dalam pertanyaan saya: jika MS-SQL adalah alat yang lebih baik untuk pekerjaan tertentu, maka saya hanya akan memilih itu. Tetapi, seperti yang saya jelaskan, dalam banyak kesempatan saya benar-benar percaya bahwa SQLite hanya cocok dengan baik.
Jumlah penggunaan data yang besar jika.
JeffO
@ Jeff O: Benar. Saya hanya akan memilih SQLite jika jumlah pengguna relatif rendah (<10-15) dan juga jumlah total data tidak tinggi. Dalam pengalaman kami, ukuran total basis data seringkali 300-400MB dan hampir tidak pernah> 1GB.
1

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.

quant_dev
sumber