Situs web penggunaan internal: Apakah ada alasan kuat terhadap SQLite?

23

Banyak kerangka kerja web, seperti Flask atau Django menggunakan SQLite sebagai database default mereka. SQLite menarik karena termasuk dalam python, dan biaya administrasi cukup rendah.

Namun, sebagian besar situs produksi publik dengan lalu lintas tinggi menggunakan database yang lebih berat: mySQL, Oracle, atau postgresql.

Pertanyaan :

Menganggap:

  • Lalu lintas situs moderat, dan akses baca / tulis bersamaan ke basis data akan terjadi
  • Kami akan menggunakan SQLAlchemy dengan kunci tulis SQLite (meskipun komentar ini membuat saya sedikit gugup)
  • Basis data mungkin berisi sekitar 60.000 catatan
  • Struktur data tidak memerlukan fitur-fitur canggih yang ditemukan dalam database yang lebih berat

Apakah pernah ada kasus yang meyakinkan terhadap konkurensi SQLite untuk situs web yang berfungsi sebagai alat internal perusahaan traffic sedang? Jika demikian, kondisi apa yang akan menyebabkan SQLite memiliki masalah konkurensi?

Saya mencari penyebab root spesifik yang diketahui, alih-alih ketakutan umum / pengarahan jari yang tidak berdasar.

Mike Pennington
sumber
Bagaimana sqllite dengan fitur-fitur seperti replikasi dll yang dapat berguna untuk cadangan dll? Dalam SQLlite saya mendapat kesan bahwa aplikasi memiliki db. Bisakah Anda menjalankan skrip admin, dll saat aplikasi Anda aktif?
Doug T.
1
Beberapa anekdot tentang SQLite dan konkurensi (kebanyakan positif): sqlite3 akses bersamaan
Daniel B
1
Dalam kasus situs web internal, apa alasan yang memaksa untuk SQLite? Adakah batasan untuk menginstal RDBMS?
JeffO
Selain menyederhanakan lingkungan pengembangan pada laptop masing-masing pengembang tidak ada alasan. Pertanyaannya tentu saja adalah apakah kita dapat menyederhanakan pengembangan dan lingkungan produksi
Mike Pennington

Jawaban:

23

Saya sarankan membaca jawaban resmi untuk pertanyaan Anda, Penggunaan yang Sesuai Untuk SQLite . Secara khusus, "Situasi di mana RDBMS lain dapat bekerja lebih baik" memperingatkan bahwa SQLite tidak mendukung penulisan bersamaan:

SQLite mendukung jumlah pembaca simultan yang tidak terbatas, tetapi hanya akan memungkinkan satu penulis setiap saat. Untuk banyak situasi, ini bukan masalah. Setiap aplikasi melakukan pekerjaan databasenya dengan cepat dan bergerak, dan tidak ada kunci yang bertahan lebih dari beberapa lusin milidetik. Tetapi ada beberapa aplikasi yang membutuhkan lebih banyak konkurensi, dan aplikasi tersebut mungkin perlu mencari solusi yang berbeda.

Dari perspektif kesesuaian, saya cenderung melihat SQLite sebagai format file yang sangat canggih yang mendukung query SQL. Saya cenderung menghindari SQLite jika saya ingin memisahkan database saya dari aplikasi web saya, karena tidak dioptimalkan untuk kasus ini. Singkatnya, SQLite tidak cukup scalable untuk digunakan dalam beberapa skenario, sehingga orang yang menjalankan situs web yang berharap suatu hari nanti menjadi populer mungkin lebih baik memulai dengan sesuatu yang scalable, daripada menggunakan SQLite dan kemudian dipaksa untuk beralih.

Semua yang dikatakan, SQLite mungkin baik untuk sebagian besar situs web internal; biasanya situs web internal tidak memerlukan tingkat konkurensi dan skalabilitas yang sama.

Brian
sumber
Juga tidak sebagian besar situs web eksternal. Mesin basis data dapat diganti jika menggunakan sesuatu seperti EF, meskipun PostGres mungkin akan menjadi pilihan yang lebih baik sejak awal.
Robert Harvey
@RobertHarvey, apa itu EF?
Mike Pennington
@MikePennington: Kerangka Entitas. Saya membayangkan ada ORM lain yang juga memiliki transparansi database, atau setidaknya dapat menukar driver.
Robert Harvey
1
Setara pythonic akan menjadi sesuatu seperti SQL Alchemy
Wyatt Barnett
"Saya cenderung melihat SQLite sebagai format file yang sangat canggih yang mendukung permintaan SQL." Definisi sempurna.
Wildcard
4

Mengenakan topi Direktur IT saya, saya melihat beberapa no-gos di sini:

  • Risiko korupsi data. Mungkin lebih dipersepsikan daripada yang sebenarnya tetapi pada akhirnya ini adalah jenis file non-transaksional DB yang tidak memiliki banyak jika ada jalan lain untuk menulis yang buruk selain bertanya apakah Anda punya cadangan baru-baru ini. Ngomong-ngomong soal . . .
  • Bagaimana saya mencadangkan hal ini? Aku tahu aku punya salinan yang bagus. Lebih disukai tanpa mengambil aplikasi offline.
  • Bagaimana saya bisa mengamankan akses ke DB? Pemahaman umum saya adalah SQL lite tidak memiliki akses di luar sistem file, yang merupakan awal yang baik tetapi tidak semua, akhir semua. Khusus untuk aplikasi web di mana Anda mungkin menginginkan izin lulus lebih banyak daripada DBA atau tidak sama sekali.

Dari sudut pandang pengembang, saya pikir penting untuk mengetahui mengapa SqlLite adalah default - itu karena mudah dan demo dengan baik. Jika Anda "menjual" platform ke pengembang baru, bisa menjalankan aplikasi web yang berfungsi dengan kerepotan minimal adalah kuncinya. Dan harus berdiri dan mengkonfigurasi server database dengan benar akan menjadi batu sandungan besar yang harus dihindari.

Wyatt Barnett
sumber
1
Nah, pencadangan dapat dilakukan melalui SQLite Backup API . Saya akan mengakui SQLite mungkin tidak cukup aman secara default, karena, tidak seperti sistem berorientasi layanan, klien SQLite berbicara dengan file database lebih langsung. Yang mengatakan, SQLite tidak menggunakan jurnal untuk melindungi terhadap kegagalan sistem, dan harus dapat diandalkan jika OS host dengan benar mendukung penguncian primitif menggunakan SQLite (disk jaringan I / O tidak). Situs resmi mencantumkan beberapa skenario yang akan mengarah ke database SQLite yang korup.
Brian
SQLite bersifat transaksional . Gunakan API Pencadangan atau adaptasi skrip cadangan MediaWiki untuk melakukan pencadangan online. Pemahaman umum Anda tentang model keamanan SQLite benar. The nasihat keamanan resmi adalah 'menggunakan akal sehat': berpikir tentang bagaimana orang bisa mengakses file database dan desain aplikasi web Anda sesuai.
Iain Samuel McLean Elder
@ Brian - Saya akan sulit sekali memikirkan DB lain yang memiliki seluruh halaman yang didedikasikan untuk "bagaimana database ini bisa rusak". Saya akan menambahkan bahwa saya menemukan proyek sql lite luar biasa - mereka mungkin memiliki halaman itu karena mereka jenis kacang dan juga memiliki sekitar 10 baris kode uji untuk setiap baris kode produksi dan sangat ingin memastikan dan teliti.
Wyatt Barnett